summaryrefslogtreecommitdiff
path: root/runtime/js/98_global_scope.js
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-11-12 20:52:59 -0800
committerGitHub <noreply@github.com>2023-11-13 04:52:59 +0000
commit1ef617e8f3d48098e69e222b6eb6fe981aeca1c3 (patch)
tree8ab4fab5b5b248d51575e874f240c16fba4ae268 /runtime/js/98_global_scope.js
parent39223f709bcb86069f3aa8eab7a4be80304128e6 (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.js43
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,