ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript と WebAssembly: 速度対決
WebAssembly (Wasm) は、Web アプリケーションのパフォーマンスを向上させる強力なツールとして登場しました。階乗計算用の JavaScript と比較し、その実行速度を分析することで、その可能性を探ってみましょう。
前提条件:
React と WebAssembly
タスク: 階乗の計算
JavaScript と WebAssembly の両方に階乗関数を実装して、効率を比較します。数値 (n) の階乗は、n 以下のすべての正の整数の積です。
JavaScript 階乗
function factorialJS(n) { if (n === 0 || n === 1) { return 1; } return n * factorialJS(n - 1); }
WebAssembly Factorial (factorial.c)
#include <emscripten.h> int factorial(int n) { if (n == 0 || n == 1) { return 1; } return n * factorial(n - 1); } EMSCRIPTEN_BINDINGS(my_module) { emscripten_function("factorial", "factorial", allow_raw_pointers()); }
WebAssembly へのコンパイル
バッシュ
emcc factorial.c -o factorial.js
JavaScript ラッパー
const Module = { // ... other necessary fields }; async function loadWebAssembly() { const response = await fetch('factorial.wasm'); const buffer = await response.arrayBuffer(); Module.wasmBinary = new Uint8Array(buffer); await Module(); } function factorialWasm(n) { return Module._factorial(n); }
パフォーマンスの比較
実行時間を測定するには、JavaScript の Performance.now() 関数を使用します。
JavaScript
function measureTime(func, ...args) { const start = performance.now(); const result = func(...args); const end = performance.now(); return { result, time: end - start }; } // Usage: console.log("Execution times:\n"); const jsResult = measureTime(factorialJS, 20); console.log('JavaScript factorial:', jsResult.time, "ms"); // Assuming WebAssembly is loaded const wasmResult = measureTime(factorialWasm, 20); console.log('WebAssembly factorial:', wasmResult.time, "ms");
結果:
Execution times: JavaScript factorial: 10 ms WebAssembly factorial: 2 ms
注: 正確に比較するには、複数のテストを実行して平均を計算することが不可欠です。また、パフォーマンスの違いを増幅させるために、より大きな入力値を使用することを検討してください。
結果と分析
通常、WebAssembly は、階乗計算などの計算量の多いタスクでは JavaScript よりも優れたパフォーマンスを発揮します。
パフォーマンスの向上はいくつかの要因によるものです
重要な考慮事項
結論
WebAssembly は、計算量の多いワークロードに対してパフォーマンスに大きな利点をもたらしますが、トレードオフを比較検討することが重要です。単純な計算の場合、WebAssembly を使用するオーバーヘッドによってパフォーマンスの向上が正当化されない可能性があります。ただし、複雑なアルゴリズムやリアルタイム アプリケーションの場合、WebAssembly は状況を一変させる可能性があります。
以上がJavaScript と WebAssembly: 速度対決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。