[RFC] perf: use an internal module resolver to improve require performance (#14633)

* perf: use an internal module resolver instead of relative requires

* perf: memoize the results of getting exported Electron properties

* perf: make internal module changes consistent across sandboxed / bundled files
This commit is contained in:
Samuel Attard 2018-09-20 13:43:26 +10:00 committed by GitHub
parent 73d1b76b54
commit 54ef906832
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
32 changed files with 156 additions and 73 deletions

View file

@ -1,4 +1,4 @@
const moduleList = require('../module-list')
const moduleList = require('@electron/internal/sandboxed_renderer/api/module-list')
for (const {
name,

View file

@ -1,4 +1,4 @@
const ipcRenderer = require('../../renderer/api/ipc-renderer')
const ipcRenderer = require('@electron/internal/renderer/api/ipc-renderer')
const v8Util = process.atomBinding('v8_util')
const ipcNative = process.atomBinding('ipc')

View file

@ -3,32 +3,32 @@ const features = process.atomBinding('features')
module.exports = [
{
name: 'crashReporter',
load: () => require('../../common/api/crash-reporter')
load: () => require('@electron/internal/common/api/crash-reporter')
},
{
name: 'desktopCapturer',
load: () => require('../../renderer/api/desktop-capturer'),
load: () => require('@electron/internal/renderer/api/desktop-capturer'),
enabled: features.isDesktopCapturerEnabled()
},
{
name: 'ipcRenderer',
load: () => require('./ipc-renderer')
load: () => require('@electron/internal/sandboxed_renderer/api/ipc-renderer')
},
{
name: 'isPromise',
load: () => require('../../common/api/is-promise'),
load: () => require('@electron/internal/common/api/is-promise'),
private: true
},
{
name: 'nativeImage',
load: () => require('../../common/api/native-image')
load: () => require('@electron/internal/common/api/native-image')
},
{
name: 'remote',
load: () => require('../../renderer/api/remote')
load: () => require('@electron/internal/renderer/api/remote')
},
{
name: 'webFrame',
load: () => require('../../renderer/api/web-frame')
load: () => require('@electron/internal/renderer/api/web-frame')
}
]

View file

@ -2,7 +2,7 @@
/* global binding, Buffer */
const events = require('events')
process.atomBinding = require('../common/atom-binding-setup')(binding.get, 'renderer')
process.atomBinding = require('@electron/internal/common/atom-binding-setup')(binding.get, 'renderer')
// The electron module depends on process.atomBinding
const electron = require('electron')
@ -41,7 +41,7 @@ const {
preloadSrc, preloadError, process: processProps
} = electron.ipcRenderer.sendSync('ELECTRON_BROWSER_SANDBOX_LOAD')
require('../renderer/web-frame-init')()
require('@electron/internal/renderer/web-frame-init')()
// Pass different process object to the preload script(which should not have
// access to things like `process.atomBinding`).
@ -76,7 +76,7 @@ function preloadRequire (module) {
if (window.location.protocol === 'chrome-devtools:') {
// Override some inspector APIs.
require('../renderer/inspector')
require('@electron/internal/renderer/inspector')
}
if (binding.guestInstanceId) {
@ -85,8 +85,8 @@ if (binding.guestInstanceId) {
if (!process.guestInstanceId && preloadProcess.argv.indexOf('--webview-tag=true') !== -1) {
// don't allow recursive `<webview>`
require('../renderer/web-view/web-view')
require('../renderer/web-view/web-view-attributes')
require('@electron/internal/renderer/web-view/web-view')
require('@electron/internal/renderer/web-view/web-view-attributes')
}
// Wrap the script into a function executed in global scope. It won't have