From 2509613bbe11df78811f2fa6f29a2b7ee437d75c Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Sun, 20 Mar 2022 06:34:05 -0700 Subject: microptimize --- src/javascript/jsc/api/html_rewriter.zig | 6 +++--- src/javascript/jsc/api/server.zig | 23 +++++++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) (limited to 'src/javascript/jsc/api') diff --git a/src/javascript/jsc/api/html_rewriter.zig b/src/javascript/jsc/api/html_rewriter.zig index c62a6503f..e314fc18d 100644 --- a/src/javascript/jsc/api/html_rewriter.zig +++ b/src/javascript/jsc/api/html_rewriter.zig @@ -216,7 +216,7 @@ pub const HTMLRewriter = struct { response.cloneInto(result, getAllocator(global.ref())); this.finalizeWithoutDestroy(); - return JSValue.fromRef(Response.Class.make(global.ref(), result)); + return JSValue.fromRef(Response.makeMaybePooled(global.ref(), result)); } var new_context = this.context; @@ -311,7 +311,7 @@ pub const HTMLRewriter = struct { }; return JSC.JSValue.fromRef( - Response.Class.make(sink.global.ref(), sink.response), + Response.makeMaybePooled(sink.global.ref(), sink.response), ); } @@ -327,7 +327,7 @@ pub const HTMLRewriter = struct { if (prev_value.Locked.promise) |promise| { prev_value.Locked.promise = null; promise.asInternalPromise().?.resolve(this.global, JSC.JSValue.fromRef( - Response.Class.make( + Response.makeMaybePooled( this.global.ref(), this.response, ), diff --git a/src/javascript/jsc/api/server.zig b/src/javascript/jsc/api/server.zig index 4b7805adb..8c64c112a 100644 --- a/src/javascript/jsc/api/server.zig +++ b/src/javascript/jsc/api/server.zig @@ -92,6 +92,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type { app: *App = undefined, globalThis: *JSGlobalObject, default_server: URL = URL{ .host = "localhost", .port = "3000" }, + response_objects_pool: JSC.WebCore.Response.Pool = JSC.WebCore.Response.Pool{}, request_pool_allocator: std.mem.Allocator = undefined, @@ -116,6 +117,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type { this.listener = socket; VirtualMachine.vm.uws_event_loop = uws.Loop.get(); + VirtualMachine.vm.response_objects_pool = &this.response_objects_pool; this.app.run(); } @@ -127,6 +129,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type { method: HTTP.Method, aborted: bool = false, response_jsvalue: JSC.JSValue = JSC.JSValue.zero, + response_ptr: ?*JSC.WebCore.Response = null, blob: JSC.WebCore.Blob = JSC.WebCore.Blob{}, promise: ?*JSC.JSValue = null, response_headers: ?*JSC.WebCore.Headers.RefCountedHeaders = null, @@ -181,14 +184,13 @@ pub fn NewServer(comptime ssl_enabled: bool) type { .method = HTTP.Method.which(req.method()) orelse .GET, .server = server, }; - resp.onAborted(*RequestContext, onAbort, this); } pub fn onAbort(this: *RequestContext, _: *App.Response) void { this.aborted = true; this.req = undefined; if (!this.response_jsvalue.isEmpty()) { - JSC.C.JSValueUnprotect(this.server.globalThis.ref(), this.response_jsvalue.asObjectRef()); + this.server.response_objects_pool.push(this.server.globalThis, this.response_jsvalue); this.response_jsvalue = JSC.JSValue.zero; } } @@ -196,7 +198,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type { pub fn finalize(this: *RequestContext) void { this.blob.detach(); if (!this.response_jsvalue.isEmpty()) { - JSC.C.JSValueUnprotect(this.server.globalThis.ref(), this.response_jsvalue.asObjectRef()); + this.server.response_objects_pool.push(this.server.globalThis, this.response_jsvalue); this.response_jsvalue = JSC.JSValue.zero; } @@ -213,11 +215,11 @@ pub fn NewServer(comptime ssl_enabled: bool) type { this.server.request_pool_allocator.destroy(this); } - pub fn render(this: *RequestContext, response: *JSC.WebCore.Response) void { + pub fn doRender(this: *RequestContext) void { if (this.aborted) { return; } - + var response = this.response_ptr.?; this.blob = response.body.use(); const status = response.statusCode(); @@ -236,9 +238,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type { this.resp.writeStatus(std.fmt.bufPrint(&status_text_buf, "{d} HM", .{response.body.init.status_code}) catch unreachable); } - for (names) |name, i| { - this.resp.writeHeader(headers.asStr(name), headers.asStr(values[i])); - } + this.resp.writeHeaders(names, values, headers.buf.items); } if (status == 302 or status == 202 or this.blob.size == 0) { @@ -250,6 +250,12 @@ pub fn NewServer(comptime ssl_enabled: bool) type { this.resp.end(this.blob.sharedView(), false); this.finalize(); } + + pub fn render(this: *RequestContext, response: *JSC.WebCore.Response) void { + this.response_ptr = response; + this.resp.runCorked(*RequestContext, doRender, this); + this.response_ptr = null; + } }; pub fn onRequest(this: *ThisServer, req: *uws.Request, resp: *App.Response) void { @@ -286,6 +292,7 @@ pub fn NewServer(comptime ssl_enabled: bool) type { } if (ctx.response_jsvalue.jsTypeLoose() == .JSPromise) { + resp.onAborted(*RequestContext, RequestContext.onAbort, ctx); JSC.VirtualMachine.vm.tick(); ctx.response_jsvalue.then( -- cgit v1.2.3 rror'>jarred/cleanup-error Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/integration/snapshots/react-context-value-func.hmr.debug.tsx (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2022-06-22change the directory structurejarred/renameGravatar Jarred Sumner 1-63/+0
2022-06-22maybe improve CPP build timeGravatar Jarred Sumner 1-24/+37
2022-06-22Move builtins to src/javascript/jsc/builtinsGravatar Jarred Sumner 72-6/+2285
2022-06-22Tweak test runner outputGravatar Jarred Sumner 1-90/+44
2022-06-22Cleanup some testsGravatar Jarred Sumner 2-8/+46
2022-06-22Update Dockerfile.baseGravatar Jarred Sumner 1-1/+1
2022-06-22Update WebKitGravatar Jarred Sumner 1-0/+0
2022-06-22cleanup websocket testGravatar Jarred Sumner 1-3/+6
2022-06-22Fix `WebSocket` when HTTP server is not runningGravatar Jarred Sumner 14-38/+103
2022-06-22Update build-idGravatar Jarred Sumner 1-1/+1
2022-06-22cleanupGravatar Jarred Sumner 6-719/+3
2022-06-22Update index.d.tsGravatar Jarred Sumner 1-0/+1
2022-06-22types for `bun:jsc`Gravatar Jarred Sumner 2-1/+37
2022-06-22Slightly customize the `events` polyfill so it uses ESMGravatar Jarred Sumner 1-1/+522
2022-06-22Fix memory bugs in escapeHTML & arrayBufferToStringGravatar Jarred Sumner 1-65/+61