diff options
author | Divy Srivastava <dj.srivastava23@gmail.com> | 2023-11-12 20:52:59 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-13 04:52:59 +0000 |
commit | 1ef617e8f3d48098e69e222b6eb6fe981aeca1c3 (patch) | |
tree | 8ab4fab5b5b248d51575e874f240c16fba4ae268 /runtime/js/98_global_scope.js | |
parent | 39223f709bcb86069f3aa8eab7a4be80304128e6 (diff) |
perf: lazy bootstrap options - first pass (#21164)
Move most runtime options to be lazily loaded. Constant options will be
covered in a different PR.
Towards https://github.com/denoland/deno/issues/21133
Diffstat (limited to 'runtime/js/98_global_scope.js')
-rw-r--r-- | runtime/js/98_global_scope.js | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/runtime/js/98_global_scope.js b/runtime/js/98_global_scope.js index 6c650da10..aada57d70 100644 --- a/runtime/js/98_global_scope.js +++ b/runtime/js/98_global_scope.js @@ -1,6 +1,7 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. const core = globalThis.Deno.core; +const ops = core.ops; const primordials = globalThis.__bootstrap.primordials; const { ObjectDefineProperties, @@ -157,19 +158,19 @@ class Navigator { const navigator = webidl.createBranded(Navigator); -let numCpus, userAgent, language; - -function setNumCpus(val) { - numCpus = val; -} - -function setUserAgent(val) { - userAgent = val; +function memoizeLazy(f) { + let v_ = null; + return () => { + if (v_ === null) { + v_ = f(); + } + return v_; + }; } -function setLanguage(val) { - language = val; -} +const numCpus = memoizeLazy(() => ops.op_bootstrap_numcpus()); +const userAgent = memoizeLazy(() => ops.op_bootstrap_user_agent()); +const language = memoizeLazy(() => ops.op_bootstrap_language()); ObjectDefineProperties(Navigator.prototype, { hardwareConcurrency: { @@ -177,7 +178,7 @@ ObjectDefineProperties(Navigator.prototype, { enumerable: true, get() { webidl.assertBranded(this, NavigatorPrototype); - return numCpus; + return numCpus(); }, }, userAgent: { @@ -185,7 +186,7 @@ ObjectDefineProperties(Navigator.prototype, { enumerable: true, get() { webidl.assertBranded(this, NavigatorPrototype); - return userAgent; + return userAgent(); }, }, language: { @@ -193,7 +194,7 @@ ObjectDefineProperties(Navigator.prototype, { enumerable: true, get() { webidl.assertBranded(this, NavigatorPrototype); - return language; + return language(); }, }, languages: { @@ -201,7 +202,7 @@ ObjectDefineProperties(Navigator.prototype, { enumerable: true, get() { webidl.assertBranded(this, NavigatorPrototype); - return [language]; + return [language()]; }, }, }); @@ -225,7 +226,7 @@ ObjectDefineProperties(WorkerNavigator.prototype, { enumerable: true, get() { webidl.assertBranded(this, WorkerNavigatorPrototype); - return numCpus; + return numCpus(); }, }, userAgent: { @@ -233,7 +234,7 @@ ObjectDefineProperties(WorkerNavigator.prototype, { enumerable: true, get() { webidl.assertBranded(this, WorkerNavigatorPrototype); - return userAgent; + return userAgent(); }, }, language: { @@ -241,7 +242,7 @@ ObjectDefineProperties(WorkerNavigator.prototype, { enumerable: true, get() { webidl.assertBranded(this, WorkerNavigatorPrototype); - return language; + return language(); }, }, languages: { @@ -249,7 +250,7 @@ ObjectDefineProperties(WorkerNavigator.prototype, { enumerable: true, get() { webidl.assertBranded(this, WorkerNavigatorPrototype); - return [language]; + return [language()]; }, }, }); @@ -284,9 +285,7 @@ const workerRuntimeGlobalProperties = { export { mainRuntimeGlobalProperties, - setLanguage, - setNumCpus, - setUserAgent, + memoizeLazy, unstableWindowOrWorkerGlobalScope, windowOrWorkerGlobalScope, workerRuntimeGlobalProperties, |