diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-04-30 10:50:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-30 08:50:24 +0000 |
commit | bb1f5e4262940a966e6314f57a4267514911d262 (patch) | |
tree | 0b5b870e34fca10daf8e664eb4214e5e756daf53 /core/bindings.js | |
parent | 9c8ebce3dcc784f1a6ecd29d5fe0b3d35256ab82 (diff) |
perf(core): async op pseudo-codegen and performance work (#18887)
Performance:
```
async_ops.js: 760k -> 1030k (!)
async_ops_deferred.js: 730k -> 770k
Deno.serve bench: 118k -> 124k
WS test w/ third_party/prebuilt/mac/load_test 100 localhost 8000 0 0: unchanged
Startup time: approx 0.5ms slower (13.7 -> 14.2ms)
```
Diffstat (limited to 'core/bindings.js')
-rw-r--r-- | core/bindings.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/core/bindings.js b/core/bindings.js new file mode 100644 index 000000000..c7d7af30c --- /dev/null +++ b/core/bindings.js @@ -0,0 +1,49 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +if (!globalThis.Deno) { + globalThis.Deno = { + core: { + ops: {}, + asyncOps: {}, + }, + }; +} + +Deno.__op__console = function (callConsole, console) { + Deno.core.callConsole = callConsole; + Deno.core.console = console; +}; + +Deno.__op__registerOp = function (isAsync, op, opName) { + const core = Deno.core; + if (isAsync) { + if (core.ops[opName] !== undefined) { + return; + } + core.asyncOps[opName] = op; + core.ops[opName] = function (...args) { + if (this !== core.ops) { + // deno-lint-ignore prefer-primordials + throw new Error( + "An async stub cannot be separated from Deno.core.ops. Use ???", + ); + } + return core.asyncStub(opName, args); + }; + } else { + core.ops[opName] = op; + } +}; + +Deno.__op__unregisterOp = function (isAsync, opName) { + if (isAsync) { + delete Deno.core.asyncOps[opName]; + } + delete Deno.core.ops[opName]; +}; + +Deno.__op__cleanup = function () { + delete Deno.__op__console; + delete Deno.__op__registerOp; + delete Deno.__op__unregisterOp; + delete Deno.__op__cleanup; +}; |