1
0
Fork 0
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:
Bartek Iwańczuk 2023-03-08 21:08:54 -04:00 committed by Yoshiya Hinosawa
parent 9e08d43d68
commit f9b43044ef
2 changed files with 9 additions and 11 deletions

View file

@ -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);

View file

@ -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);