WebWork浅谈

  • 前言:
  1. 都知道JS是单线程语言,最让人头疼的莫过于在网络正常的情况下经常出现页面的假死,
  2. 以及在进行大量的for循环计算时会导致线程阻塞,由于要进行大量的计算JS后面的运行会被阻隔在此处,使得性能较差,代码维护性差等一系列的问题发生。
  3. 本人也看了很多关于webwork的demo和官方的讲解,都说是官方很多都不是很容易读懂,在最近几天的学习过程我也针对这个做了些功课发现了webwork的作用非同一般!
  • 先上代码:

let worker = new Worker("work.js")//此处写待处理的地址
let data = [1, 2, 3, 4, 5, 6, 7]
worker.postMessage(data); worker.onmessage = function(event) {
console.log(event.data)
document.querySelector("ul").innerHTML = event.data
} //此部分是work.js中
this.addEventListener("message", (data) => {
let str = render(data.data)
this.postMessage(str)
}) function render(data) {
let str = ''
data.forEach(i => {
str += `<li>${i}</li>`
});
return str
}
  1. 正如您所看到的,这就是一个简单的Demo:
  2. 但是你在之后再补一句简单的console.log(1)就能够看出结果了,
  3. 打开F12(传说中的开发者模式)你会惊奇的发现单线程语言居然先输出了1然后在UL中添加了节点,
  • 思考?
  1. 照以前的写法我们肯定会这样做:

let str = "";
data.forEach(i => {
str += `<li>${i}</li>`
}); document.querySelector("ul").innerHTML = str;
  1. 是不是发现了其中的好处?
  2. 简单来说我们把一套本该同步的代码该成了异步,也就是在主线程中开辟了一条子线程,这样的好处就是不会影响主线程,线程任务的执行,具体步骤在子线程中进行,最后返回结果给主线程中,很巧妙的解决了之前上文提到的,假如在主线程中我有个任务循环了10000次(当然是开玩笑!)这时webwork是不是很巧妙的处理了这个问题呢?

结尾:

  1. 为什么要这么做?

随着web的发展,时代越来越讲究优化二字,能够用更加优雅的代码,更加简洁的代码去完成任务是至关重要的。

  • 用户需求一直是我们开发者比较密切关心的问题,试想一下如果在某一天有个用户访问了你的网站由于你代码的到至了页面的假死的现象的发生那是一件多么可怕的事情,在深层次的探究中,每一个优秀的前端工作者都应该去努力解决这些问题。

作者寄语:刘某人,写文章不多,不喜勿喷,只是发表个人见解,如果有更好的建议希望可以互相帮助,相互学习

来源:https://segmentfault.com/a/1190000016460349

WebWork(在主线程创建子进程)的更多相关文章

  1. ThreadLocal ——android消息机制handler在非主线程创建not called Looper.prepare() 错误的原因

    引用自:https://www.jianshu.com/p/a8fa72e708d3 引出: 使用Handler的时候,其必须要跟一个Looper绑定.在UI线程可直接初始化Handler来使用.但是 ...

  2. 在非主线程里面使用NSTimer创建和取消定时任务

    为什么要在非主线程创建NSTimer 将 timer 添加到主线程的Runloop里面本身会增加线程负荷 如果主线程因为某些原因阻塞卡顿了,timer 定时任务触发的时间精度肯定也会受到影响 有些定时 ...

  3. python主线程与子线程的结束顺序

    引用自 主线程退出对子线程的影响--YuanLi 的一段话: 对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后 ...

  4. Android主线程的消息系统(Handler\Looper)

    前言: 之前的文章写的都是关于Bitmap和内存的优化技术,这一篇文章给大家谈谈Handler. Handler是Android系统中比较重要的一个知识,在Android多线程面试经常会被问到,在实际 ...

  5. UNIX网络编程卷1 server程序设计范式8 预先创建线程,由主线程调用accept

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.程序启动阶段创建一个线程池之后仅仅让主线程调用 accept 并把客户连接传递给池中某个 ...

  6. Python开发【笔记】:关于子线程(子进程)与主线程(主进程)的关联

    前言: 主要分析下面的问题: 主线程启线程  主线程执行完毕,会关闭子线程吗? 子线程启线程  主线程执行完毕,会结束吗? 主进程启动进程,主进程执行完毕,会怎样? 子进程启动进程,进程执行完毕,又会 ...

  7. Java多线程--让主线程等待所有子线程执行完毕

    数据量很大百万条记录,因此考虑到要用多线程并发执行,在写的过程中又遇到问题,我想统计所有子进程执行完毕总共的耗时,在第一个子进程创建前记录当前时间用System.currentTimeMillis() ...

  8. (原)Android在子线程用handler发送的消息,主线程是怎么loop到的?

    来自知乎:https://www.zhihu.com/question/48130951?sort=created   大家都知道Android的Looper是ThreadLocal方式实现,每个线程 ...

  9. js的server worker创建子进程

    类似nodejs的 child_process.fork() // index.html 主线程 function isClose(data){ if(data === 0) return true; ...

随机推荐

  1. 手机端META详细解释

    一.天猫 <title>天猫触屏版</title> <meta content="text/html; charset=utf-8" http-equ ...

  2. 廖雪峰Java10加密与安全-4加密算法-5非对称加密算法

    1.非对称加密 非对称加密就是加密和解密使用的不是相同的密钥 方法1: * 加密:用自己的私钥加密,然后发送给对方:encrypt(privateKeyA, message)->s * 解密:对 ...

  3. php基础学习过程

    1.基础知识 a.注释: <?php // 这是单行注释 # 这也是单行注释 /* 这是多行注释块 它横跨了 多行 */ ?> b.大小写敏感: 在 PHP 中,所有用户定义的函数.类和关 ...

  4. 自己动手编写JEECMS自定义栏目统计标签

    今天想在给Java客二级版面加入栏目文章统计效果,如下图, 查看JEECMS的源代码发现开发者版本还没有类似现成的统计标签,一种解决的办法是使用现有的JEECMS标签,像这样Struts( [@cms ...

  5. 【JSOI2018】绝地反击

    题面 50pts 首先当然是二分答案\(mid\), 对于每一个点,以它为圆心的圆,交上攻击轨道: 那么这个点到攻击轨迹的可达范围就是一段圆弧. 怎么求这段圆弧呢? 我们知道圆弧可以用其两端点对于圆心 ...

  6. PAT甲级——A1033 To Fill or Not to Fill

    With highways available, driving a car from Hangzhou to any other city is easy. But since the tank c ...

  7. HashMap基础知识

    HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一. JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap ...

  8. [原创]最优化/Optimization文章合集

    转载请注明出处:https://www.codelast.com/ 最优化(Optimization)是应用数学的一个分支,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最 ...

  9. springcloud熔断器代码简单实现

    Feign包赖熔断器相关的包,所有不用再单独引用 1.在服务消费方的基础上修改,开启熔断机制, feign.hystrix.enabled=true 2.修改消费者调用的接口 package com. ...

  10. K8s 学习者绝对不能错过的最全知识图谱(内含 56个知识点链接)

    导读:Kubernetes 作为云原生时代的“操作系统”,熟悉和使用它是每名用户的必备技能.本篇文章概述了容器服务 Kubernetes 的知识图谱,部分内容参考了网上的知识图谱,旨在帮助用户更好的了 ...