[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:
parent
73d1b76b54
commit
54ef906832
32 changed files with 156 additions and 73 deletions
|
@ -1,5 +1,5 @@
|
|||
const common = require('../../../common/api/exports/electron')
|
||||
const moduleList = require('../module-list')
|
||||
const common = require('@electron/internal/common/api/exports/electron')
|
||||
const moduleList = require('@electron/internal/renderer/api/module-list')
|
||||
|
||||
// Import common modules.
|
||||
common.defineProperties(exports)
|
||||
|
@ -16,6 +16,6 @@ for (const {
|
|||
|
||||
Object.defineProperty(exports, name, {
|
||||
enumerable: !isPrivate,
|
||||
get: () => require(`../${file}`)
|
||||
get: common.memoizedGetter(() => require(`@electron/internal/renderer/api/${file}`))
|
||||
})
|
||||
}
|
||||
|
|
|
@ -4,8 +4,8 @@ const v8Util = process.atomBinding('v8_util')
|
|||
const { ipcRenderer, isPromise } = require('electron')
|
||||
const resolvePromise = Promise.resolve.bind(Promise)
|
||||
|
||||
const CallbacksRegistry = require('../callbacks-registry')
|
||||
const bufferUtils = require('../../common/buffer-utils')
|
||||
const CallbacksRegistry = require('@electron/internal/renderer/callbacks-registry')
|
||||
const bufferUtils = require('@electron/internal/common/buffer-utils')
|
||||
|
||||
const callbacksRegistry = new CallbacksRegistry()
|
||||
const remoteObjectCache = v8Util.createIDWeakMap()
|
||||
|
@ -349,8 +349,8 @@ const addBuiltinProperty = (name) => {
|
|||
}
|
||||
|
||||
const browserModules =
|
||||
require('../../common/api/module-list').concat(
|
||||
require('../../browser/api/module-list'))
|
||||
require('@electron/internal/common/api/module-list').concat(
|
||||
require('@electron/internal/browser/api/module-list'))
|
||||
|
||||
// And add a helper receiver for each one.
|
||||
browserModules
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const { ipcRenderer } = require('electron')
|
||||
const Event = require('./extensions/event')
|
||||
const Event = require('@electron/internal/renderer/extensions/event')
|
||||
const url = require('url')
|
||||
|
||||
let nextId = 0
|
||||
|
@ -175,7 +175,7 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
|||
onMessage: chrome.runtime.onMessage
|
||||
}
|
||||
|
||||
chrome.storage = require('./extensions/storage').setup(extensionId)
|
||||
chrome.storage = require('@electron/internal/renderer/extensions/storage').setup(extensionId)
|
||||
|
||||
chrome.pageAction = {
|
||||
show () {},
|
||||
|
@ -187,6 +187,6 @@ exports.injectTo = function (extensionId, isBackgroundPage, context) {
|
|||
getPopup () {}
|
||||
}
|
||||
|
||||
chrome.i18n = require('./extensions/i18n').setup(extensionId)
|
||||
chrome.webNavigation = require('./extensions/web-navigation').setup()
|
||||
chrome.i18n = require('@electron/internal/renderer/extensions/i18n').setup(extensionId)
|
||||
chrome.webNavigation = require('@electron/internal/renderer/extensions/web-navigation').setup()
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ const matchesPattern = function (pattern) {
|
|||
// Run the code with chrome API integrated.
|
||||
const runContentScript = function (extensionId, url, code) {
|
||||
const context = {}
|
||||
require('./chrome-api').injectTo(extensionId, false, context)
|
||||
require('@electron/internal/renderer/chrome-api').injectTo(extensionId, false, context)
|
||||
const wrapper = `((chrome) => {\n ${code}\n })`
|
||||
const compiledWrapper = runInThisContext(wrapper, {
|
||||
filename: url,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const Event = require('./event')
|
||||
const Event = require('@electron/internal/renderer/extensions/event')
|
||||
const { ipcRenderer } = require('electron')
|
||||
|
||||
class WebNavigation {
|
||||
|
|
|
@ -12,7 +12,7 @@ process.argv.splice(1, 1)
|
|||
require('../common/reset-search-paths')
|
||||
|
||||
// Import common settings.
|
||||
require('../common/init')
|
||||
require('@electron/internal/common/init')
|
||||
|
||||
var globalPaths = Module.globalPaths
|
||||
|
||||
|
@ -37,9 +37,9 @@ const {
|
|||
warnAboutInsecureCSP,
|
||||
warnAboutAllowedPopups,
|
||||
shouldLogSecurityWarnings
|
||||
} = require('./security-warnings')
|
||||
} = require('@electron/internal/renderer/security-warnings')
|
||||
|
||||
require('./web-frame-init')()
|
||||
require('@electron/internal/renderer/web-frame-init')()
|
||||
|
||||
// Process command line arguments.
|
||||
let nodeIntegration = 'false'
|
||||
|
@ -77,26 +77,26 @@ if (preloadScript) {
|
|||
|
||||
if (window.location.protocol === 'chrome-devtools:') {
|
||||
// Override some inspector APIs.
|
||||
require('./inspector')
|
||||
require('@electron/internal/renderer/inspector')
|
||||
nodeIntegration = 'false'
|
||||
} else if (window.location.protocol === 'chrome-extension:') {
|
||||
// Add implementations of chrome API.
|
||||
require('./chrome-api').injectTo(window.location.hostname, isBackgroundPage, window)
|
||||
require('@electron/internal/renderer/chrome-api').injectTo(window.location.hostname, isBackgroundPage, window)
|
||||
nodeIntegration = 'false'
|
||||
} else if (window.location.protocol === 'chrome:') {
|
||||
// Disable node integration for chrome UI scheme.
|
||||
nodeIntegration = 'false'
|
||||
} else {
|
||||
// Override default web functions.
|
||||
require('./override')
|
||||
require('@electron/internal/renderer/override')
|
||||
|
||||
// Inject content scripts.
|
||||
require('./content-scripts-injector')
|
||||
require('@electron/internal/renderer/content-scripts-injector')
|
||||
|
||||
// Load webview tag implementation.
|
||||
if (webviewTag === 'true' && process.guestInstanceId == null) {
|
||||
require('./web-view/web-view')
|
||||
require('./web-view/web-view-attributes')
|
||||
require('@electron/internal/renderer/web-view/web-view')
|
||||
require('@electron/internal/renderer/web-view/web-view-attributes')
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,4 +6,4 @@ const { guestInstanceId, openerId } = process
|
|||
const hiddenPage = process.argv.includes('--hidden-page')
|
||||
const usesNativeWindowOpen = process.argv.includes('--native-window-open')
|
||||
|
||||
require('./window-setup')(ipcRenderer, guestInstanceId, openerId, hiddenPage, usesNativeWindowOpen)
|
||||
require('@electron/internal/renderer/window-setup')(ipcRenderer, guestInstanceId, openerId, hiddenPage, usesNativeWindowOpen)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const { ipcRenderer, webFrame } = require('electron')
|
||||
const errorUtils = require('../common/error-utils')
|
||||
const errorUtils = require('@electron/internal/common/error-utils')
|
||||
|
||||
module.exports = () => {
|
||||
// Call webFrame method
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'use strict'
|
||||
|
||||
const WebViewImpl = require('./web-view')
|
||||
const webViewConstants = require('./web-view-constants')
|
||||
const WebViewImpl = require('@electron/internal/renderer/web-view/web-view')
|
||||
const webViewConstants = require('@electron/internal/renderer/web-view/web-view-constants')
|
||||
const { remote } = require('electron')
|
||||
|
||||
// Helper function to resolve url set in attribute.
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
const { ipcRenderer, remote, webFrame } = require('electron')
|
||||
|
||||
const v8Util = process.atomBinding('v8_util')
|
||||
const guestViewInternal = require('./guest-view-internal')
|
||||
const webViewConstants = require('./web-view-constants')
|
||||
const guestViewInternal = require('@electron/internal/renderer/web-view/guest-view-internal')
|
||||
const webViewConstants = require('@electron/internal/renderer/web-view/web-view-constants')
|
||||
|
||||
// An unique ID that can represent current context.
|
||||
const contextId = v8Util.getHiddenValue(global, 'contextId')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue