HTML5中Js多线程编程
<h1 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">Web Worker</span></h1><p class="md-end-block md-p"><span><code>Web Worker</code><span class="md-plain">是<span><code>HTML5</code><span class="md-plain">提出的新标准,为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样的好处是,一些计算密集型或高延迟的任务,被 Worker 线程负担了,主线程(通常负责 UI 交互)就会很流畅,不会被阻塞或拖慢。</span></span></span></span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">注意</span></h2>
<p class="md-end-block md-p"><span><strong>1.性能上要注意</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。</span></p>
<p class="md-end-block md-p"><span><strong>2.同源限制</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。</span></p>
<p class="md-end-block md-p"><span><strong>3.DOM限制</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">Worker 线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的 DOM 对象,也无法使用<span><code>document</code><span class="md-plain">、<span><code>window</code><span class="md-plain">、<span><code>parent</code><span class="md-plain">这些对象。但是,Worker 线程可以<span><code>navigator</code><span class="md-plain">对象和<span><code>location</code><span class="md-plain">对象。</span></span></span></span></span></span></span></span></span></span></span></p>
<p class="md-end-block md-p"><span><strong>4.通信联系</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">Worker 线程和主线程不在同一个上下文环境,它们不能直接通信,必须通过消息完成。</span></p>
<p class="md-end-block md-p"><span><strong>5.脚本限制</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">Worker 线程不能执行<span><code>alert()</code><span class="md-plain">方法和<span><code>confirm()</code><span class="md-plain">方法,但可以使用 XMLHttpRequest 对象发出 AJAX 请求。</span></span></span></span></span></p>
<p class="md-end-block md-p"><span><strong>6.文件限制</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">Worker 线程无法读取本地文件,即不能打开本机的文件系统(<span><code>file://</code><span class="md-plain">),它所加载的脚本,必须来自网络。</span></span></span></p>
<p class="md-end-block md-p"> </p>
<h2 class="md-end-block md-heading"><span class="md-plain">Demo</span></h2>
<p class="md-end-block md-p"><span class="md-plain">关于这个demo又几点需要<span><strong>注意</strong><span class="md-plain">的地方。</span></span></span></p>
<ol class="ol-list" start="">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">因<span><code>Web Worker</code><span class="md-plain">是HTML5的新标准所以ECMAScript的标准语法中并不支持,这个demo实在浏览器上进行测试,支持HTML的浏览器除IE外都能很好的兼容<span><code>Web Worker</code><span class="md-plain">,IE10部分兼容。我这里选择的chrome进行测试。</span></span></span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><strong><span class="md-plain">由于Worker构造函数 不能读取本地文件,关于worker线程的脚本文件需要通过网络下载,否则会报404(这点需要特别注意下)</span></strong></p>
</li>
</ol>
<p class="md-end-block md-p"><span class="md-plain">为了顺利测试解决worker线程的脚本需要通过网络下载的问题这里我将WebWorkerDemo部署到本机的nginx上面使用chrom进行访问</span></p>
<p class="md-end-block md-p"><img src="https://img2018.cnblogs.com/blog/1601343/201905/1601343-20190505161005795-1816523305.png"></p>
<p class="md-end-block md-p"><span class="md-image md-img-loaded" data-src="C:%5CUsers%5Cdjlia%5CDesktop%5Cnote%5Cweb%E5%89%8D%E7%AB%AF%5C%E6%A1%86%E6%9E%B6%5Cangular7%5C%E7%BB%84%E4%BB%B6%5C1557042363801.png"><img src="C:%5CUsers%5Cdjlia%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1557026787347.png"><img alt="" data-local-refresh="true"></span></span></p>
<p class="md-end-block md-p"> <img alt="" data-src="https://img2018.cnblogs.com/blog/1601343/201905/1601343-20190505161120294-2005533667.png"></p>
<h1 class="md-end-block md-heading"><span class="md-plain">Node.js的线程和进程</span></h1>
<p class="md-end-block md-p"><span><strong>了解一下</strong></span></p>
<p class="md-end-block md-p"><span class=" md-link"><span class="md-plain">Node.js的线程和进程</span></span></p>
<h1 class="md-end-block md-heading"><span class="md-plain">参考</span></h1>
<p class="md-end-block md-p"><span class=" md-link"><span class="md-plain">MDN</span></span></p>
<p class="md-end-block md-p"><span class="md-link md-expand"><span class="md-plain">Web Worker 使用教程</span></span></p><br><br>
来源:https://www.cnblogs.com/siegaii/p/10813622.html
頁:
[1]