zoukankan      html  css  js  c++  java
  • Web Worker

    Web Worker:
    1.这是浏览器(即宿主环境)的功能,浏览器这样的环境,很容易提供多个 JavaScript 引擎实例,
    各自运行在自己的线程上,这样你可以在每个线程上运行不同的程序。程序中每一个这样的独立
    的多线程部分被称为一个(Web)Worker。这种类型的并行化被称为任务并行,因为其重点在
    于把程序划分为多个块来并发运行。

    2.实例化一个 Worker:
    var wk = new Worker("http://testUrl/myWorker.js");

    这个 URL 应该指向一个 JavaScript 文件的位置(而不是一个 HTML 页面!),这个文件将
    被加载到一个 Worker 中。然后浏览器启动一个独立的线程,让这个文件在这个线程中作
    为独立的程序运行。
    Worker 之间以及它们和主程序之间,不会共享任何作用域或资源,那会把所有多线程编程
    的噩梦带到前端领域,而是通过一个基本的事件消息机制相互联系。

    3.侦听事件与发送事件(固定的 "message" 事件):
    wk.addEventListener( "message", function(evt){
    // evt.data
    } );
    发送 "message" 事件给这个 Worker:
    wk.postMessage( "something cool to say" );
    注意一点,收发消息是完全对称的

    4.Worker环境
    在 Worker 内部是无法访问主程序的任何资源的。这意味着不能访问它的任何全局变量,也不能访问页面的 DOM 或者其他资源。
    可以执行网络操作(Ajax、WebSockets)以及设定定时器。还有,Worker 可以访问几个重要的全局变量和功能的本地复本,
    包括 navigator、location、JSON 和applicationCache。

    5.共享worker
    var sw = new SharedWorker( "http://testUrl/myworker.js" );
    共享 Worker 可以与站点的多个程序实例或多个页面连接,所以这个 Worker 需要通过
    某种方式来得知消息来自于哪个程序。这个唯一标识符称为端口(port),可以类比网络
    socket 的端口。因此,调用程序必须使用 Worker 的 port 对象用于通信,端口连接必须要初始化
    在共享 Worker 内部,必须要处理额外的一个事件:"connect"。这个事件为这个特定的连
    接提供了端口对象。保持多个连接独立的最简单办法就是使用 port 上的闭包:
    // 在共享Worker内部
    addEventListener( "connect", function(evt){
    // 这个连接分配的端口
    var port = evt.ports[0];
    port.addEventListener( "message", function(evt){
    // ..
    port.postMessage( .. );
    // ..
    } );
    // 初始化端口连接
    port.start();
    } );

  • 相关阅读:
    vim:spell语法
    ubuntu安装texlive2019
    virtualbox安装ubuntu
    正在阅读的tex教程
    Koa 框架介绍以及 Koa2.x 环境搭建
    检测Android应用的通知栏权限开启状态(已经适配8.0以上系统)
    Redis 的 8 大应用场景
    Redis问与答
    SpringBoot中使用Redis
    Mac环境下安装Redis
  • 原文地址:https://www.cnblogs.com/xinyouhunran/p/14271109.html
Copyright © 2011-2022 走看看