mirror of
https://github.com/denoland/deno.git
synced 2025-02-21 21:03:16 -05:00
perf: don't add unload event listener (#18082)
This commit changes how "unload" event is handled - before this commit an event listener was added unconditionally in the runtime bootstrapping function, which for some reason was very expensive (0.3ms). Instead of adding an event listener, a check was added to "dispatchEvent" function that performs the same action (so it's only called if there's an event dispatched).
This commit is contained in:
parent
9e08d43d68
commit
f9b43044ef
2 changed files with 9 additions and 11 deletions
|
@ -1056,6 +1056,15 @@ class EventTarget {
|
||||||
prefix: "Failed to execute 'dispatchEvent' on 'EventTarget'",
|
prefix: "Failed to execute 'dispatchEvent' on 'EventTarget'",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// This is an optimization to avoid creating an event listener
|
||||||
|
// on each startup.
|
||||||
|
// Stores the flag for checking whether unload is dispatched or not.
|
||||||
|
// This prevents the recursive dispatches of unload events.
|
||||||
|
// See https://github.com/denoland/deno/issues/9201.
|
||||||
|
if (event.type === "unload" && self === globalThis_) {
|
||||||
|
globalThis_[SymbolFor("isUnloadDispatched")] = true;
|
||||||
|
}
|
||||||
|
|
||||||
const { listeners } = self[eventTargetData];
|
const { listeners } = self[eventTargetData];
|
||||||
if (!ReflectHas(listeners, event.type)) {
|
if (!ReflectHas(listeners, event.type)) {
|
||||||
setTarget(event, this);
|
setTarget(event, this);
|
||||||
|
|
|
@ -30,7 +30,6 @@ const {
|
||||||
ObjectSetPrototypeOf,
|
ObjectSetPrototypeOf,
|
||||||
PromiseResolve,
|
PromiseResolve,
|
||||||
Symbol,
|
Symbol,
|
||||||
SymbolFor,
|
|
||||||
SymbolIterator,
|
SymbolIterator,
|
||||||
PromisePrototypeThen,
|
PromisePrototypeThen,
|
||||||
SafeWeakMap,
|
SafeWeakMap,
|
||||||
|
@ -404,7 +403,6 @@ function bootstrapMainRuntime(runtimeOptions) {
|
||||||
if (hasBootstrapped) {
|
if (hasBootstrapped) {
|
||||||
throw new Error("Worker runtime already bootstrapped");
|
throw new Error("Worker runtime already bootstrapped");
|
||||||
}
|
}
|
||||||
|
|
||||||
performance.setTimeOrigin(DateNow());
|
performance.setTimeOrigin(DateNow());
|
||||||
globalThis_ = globalThis;
|
globalThis_ = globalThis;
|
||||||
|
|
||||||
|
@ -451,15 +449,6 @@ function bootstrapMainRuntime(runtimeOptions) {
|
||||||
|
|
||||||
core.setPromiseRejectCallback(promiseRejectCallback);
|
core.setPromiseRejectCallback(promiseRejectCallback);
|
||||||
|
|
||||||
const isUnloadDispatched = SymbolFor("isUnloadDispatched");
|
|
||||||
// Stores the flag for checking whether unload is dispatched or not.
|
|
||||||
// This prevents the recursive dispatches of unload events.
|
|
||||||
// See https://github.com/denoland/deno/issues/9201.
|
|
||||||
globalThis[isUnloadDispatched] = false;
|
|
||||||
globalThis.addEventListener("unload", () => {
|
|
||||||
globalThis_[isUnloadDispatched] = true;
|
|
||||||
});
|
|
||||||
|
|
||||||
runtimeStart(runtimeOptions);
|
runtimeStart(runtimeOptions);
|
||||||
|
|
||||||
setNumCpus(runtimeOptions.cpuCount);
|
setNumCpus(runtimeOptions.cpuCount);
|
||||||
|
|
Loading…
Add table
Reference in a new issue