Raj*_*ena 5 javascript performance web webassembly
今天我决定第一次使用WebAssembly.所以,我用C++编写了这个小的Fibonacci程序:
#include <iostream>
#include <chrono>
int fib(int n) {
if(n==0) {
return 0;
} else if(n==1) {
return 1;
} else {
return fib(n-1) + fib(n-2);
}
}
int main() {
std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
int sum = 0;
for (int i = 0; i < 35; ++i) {
sum += fib(i);
}
std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> dur = t2 - t1;
std::cout << sum << std::endl;
std::cout << dur.count() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
并Web Assembly使用以下命令将其编译为(WA从现在开始):
emcc fib.cpp -s WASM=1 -o fib.html
Run Code Online (Sandbox Code Playgroud)
然后,在将生成的.html文件加载到浏览器中之后,我得到的输出就是14930351 592.8,这意味着WA几乎耗尽了600 milliseconds.
然后,我写了一个相同程序的JS等价物,如下:
export function fib(n) {
return n === 0 ? 0 : (n === 1 ? 1 : fib(n-1) + fib(n-2));
}
export function fibSum(n) {
let sum = 0;
for (let i = 0; i < n; i++) {
sum += fib(i)
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
我曾经performance.now()测量过计算的经过时间(以毫秒为单位)fibSum(35),这给出了347.200 millisecondsChrome 的输出.
我知道WA是非常新的,因此与V8引擎相比,编译器必须缺少一些优化,并且从浏览器调用WA代码需要花费时间,但我不希望它变得如此缓慢.
思考?我没有创建一个合适的测试用例来比较两者吗?
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |