From 4f29d9d4d8d3aac0092078a98e31f2f44b80808a Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Mon, 1 Jan 2024 15:47:52 +0900 Subject: [PATCH 1/4] ES2015 optional arguments to reduce filesize and improve performance --- setImmediate.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/setImmediate.js b/setImmediate.js index 3c1b06e..879342f 100644 --- a/setImmediate.js +++ b/setImmediate.js @@ -11,16 +11,11 @@ var doc = global.document; var registerImmediate; - function setImmediate(callback) { + function setImmediate(callback, ...args) { // Callback can either be a function or a string if (typeof callback !== "function") { callback = new Function("" + callback); } - // Copy function arguments - var args = new Array(arguments.length - 1); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i + 1]; - } // Store and register the task var task = { callback: callback, args: args }; tasksByHandle[nextHandle] = task; From 447106b35e15b50fe344f59c4396a34ed744399c Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Mon, 1 Jan 2024 15:50:58 +0900 Subject: [PATCH 2/4] Replace Object store to Map store to avoid performance issue in `delete` operator --- setImmediate.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/setImmediate.js b/setImmediate.js index 879342f..32a4d92 100644 --- a/setImmediate.js +++ b/setImmediate.js @@ -6,7 +6,7 @@ } var nextHandle = 1; // Spec says greater than zero - var tasksByHandle = {}; + var tasksByHandle = new Map(); var currentlyRunningATask = false; var doc = global.document; var registerImmediate; @@ -18,13 +18,13 @@ } // Store and register the task var task = { callback: callback, args: args }; - tasksByHandle[nextHandle] = task; + tasksByHandle.set(nextHandle, task); registerImmediate(nextHandle); return nextHandle++; } function clearImmediate(handle) { - delete tasksByHandle[handle]; + tasksByHandle.delete(handle); } function run(task) { @@ -57,7 +57,7 @@ // "too much recursion" error. setTimeout(runIfPresent, 0, handle); } else { - var task = tasksByHandle[handle]; + var task = tasksByHandle.get(handle); if (task) { currentlyRunningATask = true; try { From 82eaa7202605e5d4112d318f421b3a20937158cc Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Mon, 1 Jan 2024 15:52:23 +0900 Subject: [PATCH 3/4] Avoid reading event.data multiple times and use startsWith (ES2015) instead --- setImmediate.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/setImmediate.js b/setImmediate.js index 32a4d92..3882da2 100644 --- a/setImmediate.js +++ b/setImmediate.js @@ -98,10 +98,11 @@ var messagePrefix = "setImmediate$" + Math.random() + "$"; var onGlobalMessage = function(event) { - if (event.source === global && - typeof event.data === "string" && - event.data.indexOf(messagePrefix) === 0) { - runIfPresent(+event.data.slice(messagePrefix.length)); + if (event.source === global) { + var data = event.data; + if (typeof data === "string" && data.startsWith(messagePrefix)) { + runIfPresent(+data.slice(messagePrefix.length)); + } } }; From 2bbd212174a018f3a8c81718b74d3a9cd7a73fa5 Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Mon, 1 Jan 2024 16:03:01 +0900 Subject: [PATCH 4/4] Drop IE support --- setImmediate.js | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/setImmediate.js b/setImmediate.js index 3882da2..307a295 100644 --- a/setImmediate.js +++ b/setImmediate.js @@ -106,11 +106,7 @@ } }; - if (global.addEventListener) { - global.addEventListener("message", onGlobalMessage, false); - } else { - global.attachEvent("onmessage", onGlobalMessage); - } + global.addEventListener("message", onGlobalMessage, false); registerImmediate = function(handle) { global.postMessage(messagePrefix + handle, "*"); @@ -129,22 +125,6 @@ }; } - function installReadyStateChangeImplementation() { - var html = doc.documentElement; - registerImmediate = function(handle) { - // Create a