From c27ef0ac7b5fd7aba4de24292e80387c8243896e Mon Sep 17 00:00:00 2001 From: Aaron O'Mullan Date: Tue, 26 Oct 2021 22:00:01 +0200 Subject: perf(http): encode string bodies in op-layer (#12451) Using serde_v8's StringOrBuffer --- ext/http/lib.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'ext/http/lib.rs') diff --git a/ext/http/lib.rs b/ext/http/lib.rs index f040ce104..ffca4fa2f 100644 --- a/ext/http/lib.rs +++ b/ext/http/lib.rs @@ -19,6 +19,7 @@ use deno_core::OpState; use deno_core::RcRef; use deno_core::Resource; use deno_core::ResourceId; +use deno_core::StringOrBuffer; use deno_core::ZeroCopyBuf; use hyper::body::HttpBody; use hyper::header::CONNECTION; @@ -400,7 +401,7 @@ struct RespondArgs( async fn op_http_response( state: Rc>, args: RespondArgs, - data: Option, + data: Option, ) -> Result, AnyError> { let RespondArgs(rid, status, headers) = args; @@ -426,15 +427,13 @@ async fn op_http_response( builder = builder.header(key.as_ref(), value.as_ref()); } - let res; - let maybe_response_body_rid = if let Some(d) = data { + let (maybe_response_body_rid, res) = if let Some(d) = data { // If a body is passed, we use it, and don't return a body for streaming. - res = builder.body(Vec::from(&*d).into())?; - None + (None, builder.body(d.into_bytes().into())?) } else { // If no body is passed, we return a writer for streaming the body. let (sender, body) = Body::channel(); - res = builder.body(body)?; + let res = builder.body(body)?; let response_body_rid = state.borrow_mut().resource_table.add(ResponseBodyResource { @@ -442,7 +441,7 @@ async fn op_http_response( conn_rid, }); - Some(response_body_rid) + (Some(response_body_rid), res) }; // oneshot::Sender::send(v) returns |v| on error, not an error object. -- cgit v1.2.3