deno.land / x / deno@v1.28.2 / serde_v8 / keys.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.use std::collections::HashMap;
// KeyCache stores a pool struct keys mapped to v8,// to minimize allocs and speed up decoding/encoding `v8::Object`s// TODO: experiment with in from_v8/to_v8pub struct KeyCache(HashMap<&'static str, v8::Global<v8::String>>);
// creates an optimized v8::String for a struct field// TODO: experiment with external strings// TODO: evaluate if own KeyCache is better than v8's dedupepub fn v8_struct_key<'s>( scope: &mut v8::HandleScope<'s>, field: &'static str,) -> v8::Local<'s, v8::String> { // Internalized v8 strings are significantly faster than "normal" v8 strings // since v8 deduplicates re-used strings minimizing new allocations // see: https://github.com/v8/v8/blob/14ac92e02cc3db38131a57e75e2392529f405f2f/include/v8.h#L3165-L3171 v8::String::new_from_utf8( scope, field.as_ref(), v8::NewStringType::Internalized, ) .unwrap()
// TODO: consider external strings later // right now non-deduped external strings (without KeyCache) // are slower than the deduped internalized strings by ~2.5x // since they're a new string in v8's eyes and needs to be hashed, etc... // v8::String::new_external_onebyte_static(scope, field).unwrap()}
deno

Version Info

Tagged at
a year ago