mirror of
https://github.com/denoland/deno.git
synced 2024-11-22 15:06:54 -05:00
7599990a4f
This PR introduces several optimizations to streams ### Highlights: - `ReadableStream` constructor: +20% iter/s. - `WritableStream` constructor: +50% iter/s. - `TransformStream` constructor: +30% iter/s. - `ReadableStream` iterator (both 2 and 20 chunks): +42% and +25% iter/s. - `ReadableByteStream` iterator (both 2 and 20 chunks): +39% and +20% iter/s. ### Benchmarks **main** ``` cpu: 13th Gen Intel(R) Core(TM) i9-13900H runtime: deno 1.37.0 (x86_64-unknown-linux-gnu) benchmark time (avg) iter/s (min … max) p75 p99 p995 ----------------------------------------------------------------------------------------------- ----------------------------- ReadableStream constructor 294.52 ns/iter 3,395,392.9 (277.92 ns … 618.26 ns) 292.66 ns 353.87 ns 618.26 ns WritableStream constructor 235.51 ns/iter 4,246,065.3 (213.04 ns … 306.35 ns) 236.77 ns 279.08 ns 281.32 ns TransformStream constructor 672.52 ns/iter 1,486,938.7 (652.15 ns … 880.74 ns) 670.11 ns 880.74 ns 880.74 ns ReadableStream - iterator (2 chunks) 10.44 µs/iter 95,757.9 (8.97 µs … 830.91 µs) 10.22 µs 14.74 µs 18.93 µs ReadableStream - iterator (20 chunks) 21.93 µs/iter 45,593.4 (18.8 µs … 864.97 µs) 20.57 µs 57.15 µs 137.16 µs ReadableStream - reader (2 chunks) 7.09 µs/iter 140,987.2 (7.03 µs … 7.18 µs) 7.13 µs 7.18 µs 7.18 µs ReadableStream - reader (20 chunks) 18.41 µs/iter 54,324.2 (15.7 µs … 252.7 µs) 17.14 µs 68.88 µs 94.08 µs ReadableByteStream - iterator (2 chunks) 11.06 µs/iter 90,375.1 (9.75 µs … 404.69 µs) 10.88 µs 16.6 µs 29.69 µs ReadableByteStream - iterator (20 chunks) 26.71 µs/iter 37,435.0 (22.98 µs … 508.34 µs) 25.25 µs 85.28 µs 155.65 µs ReadableByteStream - reader (2 chunks) 7.99 µs/iter 125,131.1 (7.92 µs … 8.13 µs) 8.01 µs 8.13 µs 8.13 µs ReadableByteStream - reader (20 chunks) 23.46 µs/iter 42,618.5 (20.28 µs … 414.66 µs) 21.94 µs 90.52 µs 147.38 µs ``` **this PR** ``` cpu: 13th Gen Intel(R) Core(TM) i9-13900H runtime: deno 1.37.0 (x86_64-unknown-linux-gnu) benchmark time (avg) iter/s (min … max) p75 p99 p995 ----------------------------------------------------------------------------------------------- ----------------------------- ReadableStream constructor 235.48 ns/iter 4,246,584.3 (223.12 ns … 504.65 ns) 234.3 ns 290.84 ns 311.12 ns WritableStream constructor 156.31 ns/iter 6,397,537.3 (148.54 ns … 211.13 ns) 157.49 ns 199.82 ns 208.23 ns TransformStream constructor 471.29 ns/iter 2,121,815.3 (452.53 ns … 791.41 ns) 468.62 ns 540.36 ns 791.41 ns ReadableStream - iterator (2 chunks) 7.32 µs/iter 136,705.4 (6.35 µs … 639.97 µs) 7.1 µs 12.12 µs 20.98 µs ReadableStream - iterator (20 chunks) 17.48 µs/iter 57,195.1 (14.48 µs … 289.06 µs) 16.06 µs 76.98 µs 114.61 µs ReadableStream - reader (2 chunks) 6.86 µs/iter 145,847.9 (6.8 µs … 6.97 µs) 6.88 µs 6.97 µs 6.97 µs ReadableStream - reader (20 chunks) 16.88 µs/iter 59,227.7 (14.04 µs … 311.29 µs) 15.39 µs 74.95 µs 97.45 µs ReadableByteStream - iterator (2 chunks) 7.94 µs/iter 125,881.2 (6.86 µs … 811.16 µs) 7.69 µs 11.43 µs 16.6 µs ReadableByteStream - iterator (20 chunks) 22.23 µs/iter 44,978.2 (18.98 µs … 590.11 µs) 20.73 µs 45.13 µs 159.8 µs ReadableByteStream - reader (2 chunks) 7.4 µs/iter 135,206.9 (7.36 µs … 7.42 µs) 7.4 µs 7.42 µs 7.42 µs ReadableByteStream - reader (20 chunks) 21.03 µs/iter 47,555.6 (17.75 µs … 357.66 µs) 19.52 µs 98.69 µs 146.5 µs ``` --------- Co-authored-by: Luca Casonato <hello@lcas.dev> |
||
---|---|---|
.. | ||
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 | ||
jupyter_test.ts | ||
kv_queue_test_no_db_close.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 | ||
streams_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.