summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2023-03-08 23:42:46 -0400
committerGitHub <noreply@github.com>2023-03-09 09:12:46 +0530
commit4e8edafb398f52499f9e975ffb8765cdbd268f34 (patch)
tree34cd19b4b51386bfc8b8e76d1999e10a67f54522
parent0f9df733499da4dea563342fc19e842f04bd7a40 (diff)
perf(core): over-allocate in ModuleMap when running from snapshot (#18083)
This commit changes "ModuleMap" initialization to over-allocate by 16 for vectors storing module information and module V8 handles. In 99% cases there's gonna be at least one additional module loaded, so it's very wasteful to have to reallocate when the module is executed (IIRC Rust will double the size of the vector) and move all of the elements.
-rw-r--r--core/modules.rs3
-rw-r--r--core/runtime.rs4
2 files changed, 5 insertions, 2 deletions
diff --git a/core/modules.rs b/core/modules.rs
index 3a3b1c370..ee5f72d9d 100644
--- a/core/modules.rs
+++ b/core/modules.rs
@@ -1129,7 +1129,8 @@ impl ModuleMap {
let info_arr: v8::Local<v8::Array> = info_val.try_into().unwrap();
let len = info_arr.length() as usize;
- let mut info = Vec::with_capacity(len);
+ // Over allocate so executing a few scripts doesn't have to resize this vec.
+ let mut info = Vec::with_capacity(len + 16);
for i in 0..len {
let module_info_arr: v8::Local<v8::Array> = info_arr
diff --git a/core/runtime.rs b/core/runtime.rs
index 456dbe828..b9da06346 100644
--- a/core/runtime.rs
+++ b/core/runtime.rs
@@ -463,7 +463,6 @@ impl JsRuntime {
}
}
- let mut module_handles = vec![];
let mut scope = v8::ContextScope::new(scope, context);
// The 0th element is the module map itself, followed by X number of module
// handles. We need to deserialize the "next_module_id" field from the
@@ -476,6 +475,9 @@ impl JsRuntime {
info_data.length()
};
+ // Over allocate so executing a few scripts doesn't have to resize this vec.
+ let mut module_handles =
+ Vec::with_capacity(next_module_id as usize + 16);
for i in 1..=next_module_id {
match scope
.get_context_data_from_snapshot_once::<v8::Module>(i as usize)