mirror of
https://github.com/denoland/deno.git
synced 2025-10-02 15:14:33 +00:00
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:
parent
39223f709b
commit
1ef617e8f3
10 changed files with 139 additions and 149 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue