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);
    }
}

注意:本实例需要在服务器上运行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,838评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,994评论 25 709
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 81,518评论 21 356
  • 线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥...
    LittlePy阅读 1,553评论 0 0
  • 如果你准备做个花束、送个花艺礼品的话,你最好多咨询一下花艺师,因为在花艺这个领域里,她比你、比你的朋友要专业的多。...
    快跑_狼来了阅读 4,251评论 4 12

友情链接更多精彩内容