gpt4 book ai didi

javascript - v8:为什么 javascript 中的函数调用比 C++ 中的函数调用更快

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:08 27 4
gpt4 key购买 nike

我有以下脚本:

var rnd = 0;
function test(){
rnd += dummy();
}
for(i = 0; i < 10000000; i++)
test();
log(rnd);
rnd = 0;

log 在终端上打印一些东西。dummy 是一个返回随机数的 c++ 回调函数:

void dummy(const v8::FunctionCallbackInfo<v8::Value> &args)
{
args.GetReturnValue().Set(rand() % 10);
}

v8编译运行时间为828毫秒

在此之后,我从测试中获取了 C++ 中的函数句柄,并在循环中以相同的数量调用它。这需要 2195 毫秒。

为什么这么慢,有没有可能让它更快?

C++ 片段:

 auto global = context->Global();
auto function = v8::Local<v8::Function>::Cast(global->Get(v8::String::New("test")));
auto start = chrono::high_resolution_clock::now();
for(size_t i = 0; i < 10000000; i++) {
function->Call(global, 0, 0);
}
auto milli = chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - start);
cout << "time: " << milli.count() << endl;

最佳答案

答案很简单——在 JS/C++ 代码之间切换很慢。

当你从 JavaScript V8 调用 C++ 代码时,必须执行 JS 代码(test 函数)-> C++ 代码(dummy function)-> JS 代码(返回测试函数)

当你调用从 C++ 代码调用 C++ 代码的 JavaScript 时,V8 必须执行以下行程:C++ 代码 -> JS 代码(test 函数) -> C++ 代码(dummy function) -> JS代码(返回测试函数)-> C++代码。

关于javascript - v8:为什么 javascript 中的函数调用比 C++ 中的函数调用更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21774140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com