summaryrefslogtreecommitdiff
path: root/runtime/js
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-02-22 01:55:31 +0100
committerGitHub <noreply@github.com>2023-02-22 06:25:31 +0530
commit4c6db7aa1493139f5a832c1e9ebfe44a1c80af80 (patch)
tree758a1e2b21fce29ac82bee66973853d75de8f950 /runtime/js
parent5becfd6381889287ff16a064128021f87c8dfcb6 (diff)
perf(core, runtime): Further improve startup time (#17860)
This commit further improves startup time by: - no relying on "JsRuntime::execute_script" for runtime bootstrapping, this is instead done using V8 APIs directly - registering error classes during the snapshot time, instead of on startup Further improvements can be made, mainly around removing "core.initializeAsyncOps()" which takes around 2ms. This commit should result in ~1ms startup time improvement.
Diffstat (limited to 'runtime/js')
-rw-r--r--runtime/js/99_main.js129
1 files changed, 63 insertions, 66 deletions
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index fa9b0a20d..da5b5f1b8 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -231,6 +231,69 @@ function formatException(error) {
}
}
+core.registerErrorClass("NotFound", errors.NotFound);
+core.registerErrorClass("PermissionDenied", errors.PermissionDenied);
+core.registerErrorClass("ConnectionRefused", errors.ConnectionRefused);
+core.registerErrorClass("ConnectionReset", errors.ConnectionReset);
+core.registerErrorClass("ConnectionAborted", errors.ConnectionAborted);
+core.registerErrorClass("NotConnected", errors.NotConnected);
+core.registerErrorClass("AddrInUse", errors.AddrInUse);
+core.registerErrorClass("AddrNotAvailable", errors.AddrNotAvailable);
+core.registerErrorClass("BrokenPipe", errors.BrokenPipe);
+core.registerErrorClass("AlreadyExists", errors.AlreadyExists);
+core.registerErrorClass("InvalidData", errors.InvalidData);
+core.registerErrorClass("TimedOut", errors.TimedOut);
+core.registerErrorClass("Interrupted", errors.Interrupted);
+core.registerErrorClass("WouldBlock", errors.WouldBlock);
+core.registerErrorClass("WriteZero", errors.WriteZero);
+core.registerErrorClass("UnexpectedEof", errors.UnexpectedEof);
+core.registerErrorClass("BadResource", errors.BadResource);
+core.registerErrorClass("Http", errors.Http);
+core.registerErrorClass("Busy", errors.Busy);
+core.registerErrorClass("NotSupported", errors.NotSupported);
+core.registerErrorBuilder(
+ "DOMExceptionOperationError",
+ function DOMExceptionOperationError(msg) {
+ return new DOMException(msg, "OperationError");
+ },
+);
+core.registerErrorBuilder(
+ "DOMExceptionQuotaExceededError",
+ function DOMExceptionQuotaExceededError(msg) {
+ return new DOMException(msg, "QuotaExceededError");
+ },
+);
+core.registerErrorBuilder(
+ "DOMExceptionNotSupportedError",
+ function DOMExceptionNotSupportedError(msg) {
+ return new DOMException(msg, "NotSupported");
+ },
+);
+core.registerErrorBuilder(
+ "DOMExceptionNetworkError",
+ function DOMExceptionNetworkError(msg) {
+ return new DOMException(msg, "NetworkError");
+ },
+);
+core.registerErrorBuilder(
+ "DOMExceptionAbortError",
+ function DOMExceptionAbortError(msg) {
+ return new DOMException(msg, "AbortError");
+ },
+);
+core.registerErrorBuilder(
+ "DOMExceptionInvalidCharacterError",
+ function DOMExceptionInvalidCharacterError(msg) {
+ return new DOMException(msg, "InvalidCharacterError");
+ },
+);
+core.registerErrorBuilder(
+ "DOMExceptionDataError",
+ function DOMExceptionDataError(msg) {
+ return new DOMException(msg, "DataError");
+ },
+);
+
function runtimeStart(runtimeOptions, source) {
core.setMacrotaskCallback(timers.handleTimerMacrotask);
core.setMacrotaskCallback(promiseRejectMacrotaskCallback);
@@ -247,72 +310,6 @@ function runtimeStart(runtimeOptions, source) {
colors.setNoColor(runtimeOptions.noColor || !runtimeOptions.isTty);
// deno-lint-ignore prefer-primordials
Error.prepareStackTrace = core.prepareStackTrace;
- registerErrors();
-}
-
-function registerErrors() {
- core.registerErrorClass("NotFound", errors.NotFound);
- core.registerErrorClass("PermissionDenied", errors.PermissionDenied);
- core.registerErrorClass("ConnectionRefused", errors.ConnectionRefused);
- core.registerErrorClass("ConnectionReset", errors.ConnectionReset);
- core.registerErrorClass("ConnectionAborted", errors.ConnectionAborted);
- core.registerErrorClass("NotConnected", errors.NotConnected);
- core.registerErrorClass("AddrInUse", errors.AddrInUse);
- core.registerErrorClass("AddrNotAvailable", errors.AddrNotAvailable);
- core.registerErrorClass("BrokenPipe", errors.BrokenPipe);
- core.registerErrorClass("AlreadyExists", errors.AlreadyExists);
- core.registerErrorClass("InvalidData", errors.InvalidData);
- core.registerErrorClass("TimedOut", errors.TimedOut);
- core.registerErrorClass("Interrupted", errors.Interrupted);
- core.registerErrorClass("WouldBlock", errors.WouldBlock);
- core.registerErrorClass("WriteZero", errors.WriteZero);
- core.registerErrorClass("UnexpectedEof", errors.UnexpectedEof);
- core.registerErrorClass("BadResource", errors.BadResource);
- core.registerErrorClass("Http", errors.Http);
- core.registerErrorClass("Busy", errors.Busy);
- core.registerErrorClass("NotSupported", errors.NotSupported);
- core.registerErrorBuilder(
- "DOMExceptionOperationError",
- function DOMExceptionOperationError(msg) {
- return new DOMException(msg, "OperationError");
- },
- );
- core.registerErrorBuilder(
- "DOMExceptionQuotaExceededError",
- function DOMExceptionQuotaExceededError(msg) {
- return new DOMException(msg, "QuotaExceededError");
- },
- );
- core.registerErrorBuilder(
- "DOMExceptionNotSupportedError",
- function DOMExceptionNotSupportedError(msg) {
- return new DOMException(msg, "NotSupported");
- },
- );
- core.registerErrorBuilder(
- "DOMExceptionNetworkError",
- function DOMExceptionNetworkError(msg) {
- return new DOMException(msg, "NetworkError");
- },
- );
- core.registerErrorBuilder(
- "DOMExceptionAbortError",
- function DOMExceptionAbortError(msg) {
- return new DOMException(msg, "AbortError");
- },
- );
- core.registerErrorBuilder(
- "DOMExceptionInvalidCharacterError",
- function DOMExceptionInvalidCharacterError(msg) {
- return new DOMException(msg, "InvalidCharacterError");
- },
- );
- core.registerErrorBuilder(
- "DOMExceptionDataError",
- function DOMExceptionDataError(msg) {
- return new DOMException(msg, "DataError");
- },
- );
}
const pendingRejections = [];