我尝试为我的 Android 项目提供 WebAssembly 功能v8 7.2。我已成功导入v8为静态库。但我遇到了一个问题,WebAssembly 既没有调用then也没有catch回调。下面是我的代码:
std::unique_ptr<v8::Platform> platform;
v8::Isolate *isolate;
v8::Persistent<v8::Context> persistentContext;
void runMain();
void runScript();
void _log(const v8::FunctionCallbackInfo<v8::Value>& info) {
v8::String::Utf8Value utf(isolate, info[0].As<v8::String>());
__android_log_print(ANDROID_LOG_DEBUG, "V8Native", "%s",*utf);
}
void JNICALL
Java_com_hustunique_v8demoapplication_MainActivity_initV8(JNIEnv *env, jobject /* this */) {
// Initialize V8.
v8::V8::InitializeICU();
platform = v8::platform::NewDefaultPlatform();
v8::V8::InitializePlatform(&(*platform.get()));
v8::V8::Initialize();
runMain();
}
void runMain() {
// Create a new Isolate and make it the current one.
v8::Isolate::CreateParams create_params;
create_params.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator();
isolate = v8::Isolate::New(create_params);
// …Run Code Online (Sandbox Code Playgroud) 我读过很多文章,说编译(创建)阶段首先发生在全局执行上下文中,然后执行代码,当调用函数时,创建阶段然后再次开始该函数,然后执行,这真的是发生了什么吗?为什么创建阶段没有发生在所有代码中,首先包括函数内的变量,然后执行所有代码,因为像这样,创建阶段是执行阶段本身的一部分,引擎在执行之前不知道函数内有哪些变量阶段 另外,如果是这样,为什么这样的事情会在不先登录到控制台的情况下给出错误
console.log('First No Error')
function Error() {
let a = 2
console.log(z)
}
Error()Run Code Online (Sandbox Code Playgroud)
它给出了参考错误,因为 z 没有定义而没有登录到控制台(无错误),为什么会发生这种情况,因为引擎不应该知道函数内部存在错误,直到它只在最后一行执行。
我想知道函数内部已知什么,并且可以在执行函数本身之前使用它(即使它只是内存中没有实际数据的引用以及何时成为内存中的实际数据)。
在我的程序中,我通常有很多带有签名的函数myFunc({ param })。我想测试每次使用新对象或使用包含对象的变量调用这些函数之间有什么区别。IE:
myFuncA({ param: 1 });
// vs
const paramObj = { param: 1 };
myFuncB(paramObj);
Run Code Online (Sandbox Code Playgroud)
所以我想出了一个简单的测试:
let a = 0;
let b = 0;
function myFuncA({ param }) {
a += param;
}
function myFuncB({ param }) {
b += param;
}
const iterations = 1e9;
console.time('myFuncA');
for(let i = 0; i < iterations; i++) {
myFuncA({ param: 1 });
}
console.timeEnd('myFuncA')
console.time('myFuncB');
const paramObj = { param: 1 };
for(let i = 0; i < …Run Code Online (Sandbox Code Playgroud) 我有两个组件:ComponentList 和 ComponentDetail。它现在的工作方式是,用户将从列表中选择一个,然后将其重定向到 ComponentDetail,该 ComponentDetail 调用 API 并获取可观察的大型数据集。现在,我遇到的问题是,当我返回 ComponentList 时,ComponentDetail 使用的内存不会在 onDestroy 时被垃圾收集。它会在十分钟后关闭,但如果从开发工具中强制进行 GC,它将快速释放内存空间。我不确定是什么导致它需要很长时间才能自动收集,我可以做些什么来使垃圾收集在 ngOnDestroy 之后立即发生吗?
Heyho 在 Javascript 中对地图和对象进行了一些测试,发现 null 比将值设置为 undefined 或简单地删除属性要快得多(2.5 倍)
如果您想知道为什么我总是创建地图和/或 javascript 对象,我这样做是为了让每个测试都有相同的“开销”。
编辑:还得到了这个,其中存在逻辑错误(将值设置为从 null 到 null 或将其从未定义设置为未定义) https://www.measurethat.net/Benchmarks/Show/15587/0/delete- vs-null-vs-undefined-vs-void-0-vs-objectcreatenu
这里的结果是更极端的 4mio 操作(从 null 到 null)与 4k 操作(未定义到未定义)
我知道这个测试与其纯粹的兴趣无关,我问:)。
通过使用perf_hooks我们可以获得一些关于 NodeJS 中垃圾收集的信息。PerformanceObserver我们可以像下面这样在每个垃圾收集(?)上使用哪个调用来使用它。
const obs = new perf_hooks.PerformanceObserver(list => {
console.log(list.getEntries()[0]);
});
obs.observe({ entryTypes: ['gc'] });
Run Code Online (Sandbox Code Playgroud)
这也是来自 console.log 的响应:
PerformanceEntry {
name: 'gc',
entryType: 'gc',
startTime: 1150138386.4544,
duration: 0.08009982109069824,
detail: { kind: 4, flags: 0 }
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在网上查找有关detail.kind此回复内容的信息。有人可以向我解释它是什么吗?
我发现NodeJS中有四种gc:
perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR
perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR
perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL
perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB
Run Code Online (Sandbox Code Playgroud)
参考(https://nodejs.org/docs/latest-v16.x/api/perf_hooks.html#performanceentrykind)
但这些类型的含义是什么?
谢谢你的帮助!
PS:duration确定操作执行了多长时间?
我想在带有 M2 pro 苹果芯片的 MacO 上安装 v8 3.15。收到禁用的错误。
我尝试使用 Rosetta 安装 x86-64 brew 并使用它来安装 v8,但仍然遇到相同的错误。有没有人有解决这个问题的方法,或者 homebrew 已经完全废弃了英特尔和苹果芯片的 v8@3.15 ?
在新的0.5.1分支中,有一个Node.js的官方Windows可执行文件.Node.js的Linux版本使用已建立的库,例如v8,libev,libeio.
由于libev和libeio适用于*NIX平台; Node.js的Windows端口是否可供生产使用,还是仅用于开发?
我用以下简单的程序简要测试了这三个引擎(rhino/spidermonkey/v8):
function p(n) {
for (var i = 2;i * i <= n;i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
var sum = 0;
for (var k = 2;k < 10000000;k++) {
if (p(k)) {
sum++;
}
}
print(sum);
Run Code Online (Sandbox Code Playgroud)
并获得以下结果:
$ time rhino -O 9 sample.js
664579
real 0m40.495s
user 0m40.793s
sys 0m0.180s
$ time js sample.js
664579
real 0m9.465s
user 0m9.477s
sys 0m0.000s
$ time d8 sample.js
664579
real 0m8.941s
user …Run Code Online (Sandbox Code Playgroud) v8 ×10
javascript ×8
node.js ×3
jit ×2
angular ×1
apple-m1 ×1
apple-m2 ×1
c++ ×1
embedded-v8 ×1
function ×1
iocp ×1
libev ×1
performance ×1
rhino ×1
spidermonkey ×1
webassembly ×1
windows ×1