HTML5 Web Worker多線程編程實例 -- 計算最小公倍數和最大共約數

注釋詳細,不多解釋!請看代碼!!!

  1. 簡單交互頁面 index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Web worker 最小公倍數和最大共約數</title>
</head>
<style>
    body {
        font-family: "微軟雅黑";
        font-size: 14px;
    }
    .input-number,.result,.operate {
        margin: 10px auto;
        text-align: center;
    }
    .result {
        width: 200px;
        text-align: left;
    }
</style>
<body>
<div class="input-number">
    <label for="first">
        第一個數:
    </label>
    <input type="number" id="first" name="first">
</div>
<div class="input-number">
    <label for="second">
        第二個數:
    </label>
    <input type="number" id="second" name="first">
</div>
<div class="operate">
    <button id="calculate">計算</button>
</div>

<div class="result">
    <p>最小公倍數:<span id="common_multiple"></span></p>
    <p>最大共約數:<span id="common_divisor"></span></p>

</div>
<script src="main.js"></script>
</body>
</html>
  1. 主線程js文件 main.js
var worker = new Worker('multiple-divisor.js'),
    calculateBtn = document.getElementById('calculate');
// 監聽點擊事件
calculateBtn.addEventListener('click', function () {
    var first = document.getElementById('first').value,
        second = document.getElementById('second').value;
    // 向子線程發送參數
    worker.postMessage({first: parseInt(first), second: parseInt(second)});
});
// 接收數據
worker.onmessage = function(e) {
    document.getElementById('common_multiple').textContent = e.data.multiple;
    document.getElementById('common_divisor').textContent = e.data.divisor;
}
  1. web worker線程js文件 multiple-divisor.js
// 接收主線程發過來的參數
onmessage = function (e) {
    var first = e.data.first,
        second = e.data.second;
    calculate(first, second);
}

// 求最小公倍數和最大公約數
function calculate(a, b) {
    var c_multiple = multiple(a, b),
        c_divisor = divisor(a, b);
    // 向主進程發送計算結果
    postMessage({multiple: c_multiple, divisor: c_divisor});

}

// 求最小公倍數
function multiple(a, b) {
    return a * b / divisor(a, b);
}

// 求最大共約數
function divisor(a, b) {
    if( a % b == 0) {
        return b;
    } else {
        return divisor(b, a % b);
    }
}

注意:本實例需要在服務器上運行

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,285評論 25 708
  • 上一篇《WEB請求處理一:瀏覽器請求發起處理》,我們講述了瀏覽器端請求發起過程,通過DNS域名解析服務器IP,并建...
    七寸知架構閱讀 81,212評論 21 356
  • 線程是進程中執行運算的最小單位,是進程中的一個實體,是被系統獨立調度和分派的基本單位,線程自己不擁有系統資源,只擁...
    LittlePy閱讀 204評論 0 0
  • 如果你準備做個花束、送個花藝禮品的話,你最好多咨詢一下花藝師,因為在花藝這個領域里,她比你、比你的朋友要專業的多。...
    快跑_狼來了閱讀 846評論 4 12