mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 19:08:15 +00:00
refactor(core): Improve ergonomics of managing ASCII strings (#18498)
This is a follow-on to the earlier work in reducing string copies, mainly focused on ensuring that ASCII strings are easy to provide to the JS runtime. While we are replacing a 16-byte reference in a number of places with a 24-byte structure (measured via `std::mem::size_of`), the reduction in copies wins out over the additional size of the arguments passed into functions. Benchmarking shows approximately the same if not slightly less wallclock time/instructions retired, but I believe this continues to open up further refactoring opportunities.
This commit is contained in:
parent
2dc2016837
commit
a1764f7690
27 changed files with 817 additions and 641 deletions
|
@ -11,6 +11,7 @@ use std::task::Poll;
|
|||
use deno_broadcast_channel::InMemoryBroadcastChannel;
|
||||
use deno_cache::CreateCache;
|
||||
use deno_cache::SqliteBackedCache;
|
||||
use deno_core::ascii_str;
|
||||
use deno_core::error::AnyError;
|
||||
use deno_core::error::JsError;
|
||||
use deno_core::futures::Future;
|
||||
|
@ -370,10 +371,10 @@ impl MainWorker {
|
|||
}
|
||||
|
||||
/// See [JsRuntime::execute_script](deno_core::JsRuntime::execute_script)
|
||||
pub fn execute_script<S: Into<ModuleCode>>(
|
||||
pub fn execute_script(
|
||||
&mut self,
|
||||
script_name: &'static str,
|
||||
source_code: S,
|
||||
source_code: ModuleCode,
|
||||
) -> Result<v8::Global<v8::Value>, AnyError> {
|
||||
self.js_runtime.execute_script(script_name, source_code)
|
||||
}
|
||||
|
@ -510,12 +511,12 @@ impl MainWorker {
|
|||
&mut self,
|
||||
script_name: &'static str,
|
||||
) -> Result<(), AnyError> {
|
||||
self.execute_script(
|
||||
self.js_runtime.execute_script(
|
||||
script_name,
|
||||
// NOTE(@bartlomieju): not using `globalThis` here, because user might delete
|
||||
// it. Instead we're using global `dispatchEvent` function which will
|
||||
// used a saved reference to global scope.
|
||||
"dispatchEvent(new Event('load'))",
|
||||
ascii_str!("dispatchEvent(new Event('load'))"),
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -527,12 +528,12 @@ impl MainWorker {
|
|||
&mut self,
|
||||
script_name: &'static str,
|
||||
) -> Result<(), AnyError> {
|
||||
self.execute_script(
|
||||
self.js_runtime.execute_script(
|
||||
script_name,
|
||||
// NOTE(@bartlomieju): not using `globalThis` here, because user might delete
|
||||
// it. Instead we're using global `dispatchEvent` function which will
|
||||
// used a saved reference to global scope.
|
||||
"dispatchEvent(new Event('unload'))",
|
||||
ascii_str!("dispatchEvent(new Event('unload'))"),
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -549,7 +550,9 @@ impl MainWorker {
|
|||
// NOTE(@bartlomieju): not using `globalThis` here, because user might delete
|
||||
// it. Instead we're using global `dispatchEvent` function which will
|
||||
// used a saved reference to global scope.
|
||||
"dispatchEvent(new Event('beforeunload', { cancelable: true }));",
|
||||
ascii_str!(
|
||||
"dispatchEvent(new Event('beforeunload', { cancelable: true }));"
|
||||
),
|
||||
)?;
|
||||
let local_value = value.open(&mut self.js_runtime.handle_scope());
|
||||
Ok(local_value.is_false())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue