mirror of
https://github.com/denoland/deno.git
synced 2025-01-05 22:09:02 -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'",
|
||||
});
|
||||
|
||||
// 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];
|
||||
if (!ReflectHas(listeners, event.type)) {
|
||||
setTarget(event, this);
|
||||
|
|
|
@ -30,7 +30,6 @@ const {
|
|||
ObjectSetPrototypeOf,
|
||||
PromiseResolve,
|
||||
Symbol,
|
||||
SymbolFor,
|
||||
SymbolIterator,
|
||||
PromisePrototypeThen,
|
||||
SafeWeakMap,
|
||||
|
@ -404,7 +403,6 @@ function bootstrapMainRuntime(runtimeOptions) {
|
|||
if (hasBootstrapped) {
|
||||
throw new Error("Worker runtime already bootstrapped");
|
||||
}
|
||||
|
||||
performance.setTimeOrigin(DateNow());
|
||||
globalThis_ = globalThis;
|
||||
|
||||
|
@ -451,15 +449,6 @@ function bootstrapMainRuntime(runtimeOptions) {
|
|||
|
||||
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);
|
||||
|
||||
setNumCpus(runtimeOptions.cpuCount);
|
||||
|
|
Loading…
Reference in a new issue