zoukankan      html  css  js  c++  java
  • 285 H5 Web Workers

    • 可以让js在分线程执行

    • Worker

      var worker = new Worker('worker.js');
      worker.onMessage = function(event){event.data} : 用来接收另一个线程发送过来的数据的回调
      worker.postMessage(data1) : 向另一个线程发送数据
      

    • 问题:

      • worker内代码不能操作DOM更新UI
      • 不是每个浏览器都支持这个新特性
      • 不能跨域加载JS
    • svn版本控制

    • svn server


    demo:使用 web workers计算斐波那契,验证执行效率

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>06_Web Workers_测试</title>
    </head>
    
    <body>
        <!--
    1. H5规范提供了js分线程的实现, 取名为: Web Workers
    2. 相关API
      * Worker: 构造函数, 加载分线程执行的js文件
      * Worker.prototype.onmessage: 用于接收另一个线程的回调函数
      * Worker.prototype.postMessage: 向另一个线程发送消息
    3. 不足
      * worker内代码不能操作DOM(更新UI)
      * 不能跨域加载JS
      * 不是每个浏览器都支持这个新特性
    -->
    
        <input type="text" placeholder="数值" id="number">
        <button id="btn">计算</button>
        <script type="text/javascript">
            // 1 1 2 3 5 8    f(n) = f(n-1) + f(n-2)
            function fibonacci(n) {
                return n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2)
            }
    
            document.querySelector('#btn').onclick = function() {
                console.log(11);
    
                let val = document.querySelector('#number').value
                console.log(fibonacci(val));
    
            }
        </script>
    </body>
    
    </html>
    

    demo:使用 web workers计算斐波那契,验证执行效率

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <title>06_Web Workers_测试</title>
    </head>
    
    <body>
        <!--
    1. H5规范提供了js分线程的实现, 取名为: Web Workers
    2. 相关API
      * Worker: 构造函数, 加载分线程执行的js文件
      * Worker.prototype.onmessage: 用于接收另一个线程的回调函数
      * Worker.prototype.postMessage: 向另一个线程发送消息
    3. 不足
      * worker内代码不能操作DOM(更新UI)
      * 不能跨域加载JS
      * 不是每个浏览器都支持这个新特性
    -->
    
        <input type="text" placeholder="数值" id="number">
        <button id="btn">计算</button>
        <script type="text/javascript">
            // 1 1 2 3 5 8    f(n) = f(n-1) + f(n-2)
            function fibonacci(n) {
                return n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2) //递归调用
            }
            // console.log(fibonacci(7))
            var input = document.getElementById('number')
            document.getElementById('btn').onclick = function() {
                var number = input.value
                var result = fibonacci(number)
                alert(result)
            }
        </script>
    </body>
    
    </html>
    

    function fibonacci(n) {
        return n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2) //递归调用
    }
    
    console.log(this)
    this.onmessage = function(event) {
        var number = event.data
        console.log('分线程接收到主线程发送的数据: ' + number);
        //计算
        var result = fibonacci(number)
        postMessage(result)
        console.log('分线程向主线程返回数据: ' + result);
        // alert(result)  alert是window的方法, 在分线程不能调用
        // 分线程中的全局对象不再是window, 所以在分线程中不可能更新界面
    }
    
  • 相关阅读:
    b/s批量下载文件
    b/s批量下载图片
    python函数总结(转载的 有空看下)
    使用命令行执行需要传参的 py文件的方法
    Jmeter3.1官方自带的HTML图形测试报告 + 汉化 (Jmeter 3.1~5.0通用)(有空试一下)
    Jmeter 获取响应时间图形、TPS的三个插件(有空试一下)
    把表里面的字段连起来 输出到一个字段里面的方法 concat()
    testng要了解的
    包的相互调用的方法
    包目录展示方法设置,和 包里面建包的方法
  • 原文地址:https://www.cnblogs.com/jianjie/p/12257440.html
Copyright © 2011-2022 走看看