diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-08-17 07:52:37 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-17 07:52:37 -0600 |
commit | 23ff0e722e3c4b0827940853c53c5ee2ede5ec9f (patch) | |
tree | 1521ffd2ac5e803224546cb349b3905925b9b5ff /ext/web/lib.rs | |
parent | 0960e895da1275792c1f38999f6a185c864edb3f (diff) |
feat(ext/web): resourceForReadableStream (#20180)
Extracted from fast streams work.
This is a resource wrapper for `ReadableStream`, allowing us to treat
all `ReadableStream` instances as resources, and remove special paths in
both `fetch` and `serve`.
Performance with a ReadableStream response yields ~18% improvement:
```
return new Response(new ReadableStream({
start(controller) {
controller.enqueue(new Uint8Array([104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]));
controller.close();
}
})
```
This patch:
```
12:36 $ third_party/prebuilt/mac/wrk http://localhost:8080
Running 10s test @ http://localhost:8080
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 99.96us 100.03us 6.65ms 98.84%
Req/Sec 47.73k 2.43k 51.02k 89.11%
959308 requests in 10.10s, 117.10MB read
Requests/sec: 94978.71
Transfer/sec: 11.59MB
```
main:
```
Running 10s test @ http://localhost:8080
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 163.03us 685.51us 19.73ms 99.27%
Req/Sec 39.50k 3.98k 66.11k 95.52%
789582 requests in 10.10s, 82.83MB read
Requests/sec: 78182.65
Transfer/sec: 8.20MB
```
Diffstat (limited to 'ext/web/lib.rs')
-rw-r--r-- | ext/web/lib.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/web/lib.rs b/ext/web/lib.rs index 374815804..88937efb2 100644 --- a/ext/web/lib.rs +++ b/ext/web/lib.rs @@ -4,6 +4,7 @@ mod blob; mod compression; mod hr_timer_lock; mod message_port; +mod stream_resource; mod timers; use deno_core::error::range_error; @@ -90,6 +91,12 @@ deno_core::extension!(deno_web, op_cancel_handle, op_sleep, op_transfer_arraybuffer, + stream_resource::op_readable_stream_resource_allocate, + stream_resource::op_readable_stream_resource_get_sink, + stream_resource::op_readable_stream_resource_write_error, + stream_resource::op_readable_stream_resource_write_buf, + stream_resource::op_readable_stream_resource_close, + stream_resource::op_readable_stream_resource_await_close, ], esm = [ "00_infra.js", |