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
This commit is contained in:
Divy Srivastava 2023-11-12 20:52:59 -08:00 committed by GitHub
parent 39223f709b
commit 1ef617e8f3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 139 additions and 149 deletions

View file

@ -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 memoizeLazy(f) {
let v_ = null;
return () => {
if (v_ === null) {
v_ = f();
}
return v_;
};
}
function setUserAgent(val) {
userAgent = val;
}
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,