mirror of
https://github.com/denoland/deno.git
synced 2024-11-27 16:10:57 -05:00
ec63b36994
This PR optimizes `Event` constructor - ~Added a fast path for empty `eventInitDict`~ Removed `EventInit` dictionary converter - Don't make `isTrusted` a [LegacyUnforgeable](https://webidl.spec.whatwg.org/#LegacyUnforgeable) property. Doing so makes it non-spec compliant but calling `Object/Reflect.defineProperty` on the constructor is a big bottleneck. Node did the same a few months ago https://github.com/nodejs/node/pull/46974. In my opinion, the performance gains are worth deviating from the spec for a browser-related property. **This PR** ``` cpu: 13th Gen Intel(R) Core(TM) i9-13900H runtime: deno 1.36.1 (x86_64-unknown-linux-gnu) benchmark time (avg) iter/s (min … max) p75 p99 p995 ------------------------------------------------------------------------------- ----------------------------- event constructor no init 36.69 ns/iter 27,257,504.6 (33.36 ns … 42.45 ns) 37.71 ns 39.61 ns 40.07 ns event constructor 36.7 ns/iter 27,246,776.6 (33.35 ns … 56.03 ns) 37.73 ns 40.14 ns 41.74 ns ``` **main** ``` cpu: 13th Gen Intel(R) Core(TM) i9-13900H runtime: deno 1.36.1 (x86_64-unknown-linux-gnu) benchmark time (avg) iter/s (min … max) p75 p99 p995 ------------------------------------------------------------------------------- ----------------------------- event constructor no init 380.48 ns/iter 2,628,275.8 (366.66 ns … 399.39 ns) 384.58 ns 398.27 ns 399.39 ns event constructor 480.33 ns/iter 2,081,882.6 (466.67 ns … 503.47 ns) 484.27 ns 501.28 ns 503.47 ns ``` ```js Deno.bench("event constructor no init", () => { const event = new Event("foo"); }); Deno.bench("event constructor", () => { const event = new Event("foo", { bubbles: true, cancelable: false }); }); ``` towards https://github.com/denoland/deno/issues/20167 |
||
---|---|---|
.. | ||
abort_controller_test.ts | ||
blob_test.ts | ||
body_test.ts | ||
broadcast_channel_test.ts | ||
buffer_test.ts | ||
build_test.ts | ||
cache_api_test.ts | ||
chmod_test.ts | ||
chown_test.ts | ||
command_test.ts | ||
console_test.ts | ||
copy_file_test.ts | ||
custom_event_test.ts | ||
dir_test.ts | ||
dom_exception_test.ts | ||
error_stack_test.ts | ||
error_test.ts | ||
esnext_test.ts | ||
event_target_test.ts | ||
event_test.ts | ||
fetch_test.ts | ||
ffi_test.ts | ||
file_test.ts | ||
filereader_test.ts | ||
files_test.ts | ||
flock_test.ts | ||
fs_events_test.ts | ||
get_random_values_test.ts | ||
globals_test.ts | ||
headers_test.ts | ||
http_test.ts | ||
internals_test.ts | ||
intl_test.ts | ||
io_test.ts | ||
kv_queue_undelivered_test.ts | ||
kv_test.ts | ||
link_test.ts | ||
make_temp_test.ts | ||
message_channel_test.ts | ||
metrics_test.ts | ||
mkdir_test.ts | ||
navigator_test.ts | ||
net_test.ts | ||
network_interfaces_test.ts | ||
opcall_test.ts | ||
os_test.ts | ||
path_from_url_test.ts | ||
performance_test.ts | ||
permissions_test.ts | ||
process_test.ts | ||
progressevent_test.ts | ||
promise_hooks_test.ts | ||
read_dir_test.ts | ||
read_file_test.ts | ||
read_link_test.ts | ||
read_text_file_test.ts | ||
README.md | ||
real_path_test.ts | ||
ref_unref_test.ts | ||
remove_test.ts | ||
rename_test.ts | ||
request_test.ts | ||
resources_test.ts | ||
response_test.ts | ||
serve_test.ts | ||
signal_test.ts | ||
stat_test.ts | ||
stdio_test.ts | ||
structured_clone_test.ts | ||
symlink_test.ts | ||
sync_test.ts | ||
test_util.ts | ||
testing_test.ts | ||
text_encoding_test.ts | ||
timers_test.ts | ||
tls_test.ts | ||
truncate_test.ts | ||
tty_color_test.ts | ||
tty_test.ts | ||
umask_test.ts | ||
url_search_params_test.ts | ||
url_test.ts | ||
urlpattern_test.ts | ||
utime_test.ts | ||
version_test.ts | ||
wasm_test.ts | ||
webcrypto_test.ts | ||
websocket_test.ts | ||
webstorage_test.ts | ||
worker_permissions_test.ts | ||
worker_types.ts | ||
write_file_test.ts | ||
write_text_file_test.ts |
Deno runtime tests
Files in this directory are unit tests for Deno runtime.
Testing Deno runtime code requires checking API under different runtime
permissions. To accomplish this all tests exercised are created using
Deno.test()
function.
import {} from "./test_util.ts";
Deno.test(function simpleTestFn(): void {
// test code here
});
Deno.test(
{
ignore: Deno.build.os === "windows",
permissions: { read: true, write: true },
},
function complexTestFn(): void {
// test code here
},
);
Running tests
There are two ways to run unit_test_runner.ts
:
# Run all tests.
cargo run --bin deno -- test --allow-all --unstable --location=http://js-unit-tests/foo/bar cli/tests/unit/
# Run a specific test module
cargo run --bin deno -- test --allow-all --unstable --location=http://js-unit-tests/foo/bar cli/tests/unit/files_test.ts
Http server
target/debug/test_server
is required to run when one's running unit tests.
During CI it's spawned automatically, but if you want to run tests manually make
sure that server is spawned otherwise there'll be cascade of test failures.