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. springMVC和springBoot区别

    Spring MVC是什么?(1)Spring MVC是Spring提供的一个强大而灵活的模块式web框架.通过Dispatcher Servlet, ModelAndView 和 View Reso ...

  2. Leetcode953. Verifying an Alien Dictionary验证外星语词典

    某种外星语也使用英文小写字母,但可能顺序 order 不同.字母表的顺序(order)是一些小写字母的排列. 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在 ...

  3. springboot核心技术(五)-----消息(rabbitmq)

    消息 1. 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力 2. 消息服务中两个重要概念: 消息代理(message broker)和目的地(destination) 当消息发送者发 ...

  4. 【arc072f】AtCoder Regular Contest 072 F - Dam

    题意 有一个体积为L的水池,有N天 每天早上进水Vi体积的Ti温度的水. 每天晚上可以放掉任意体积的水. 问每天中午,水池满的情况下,水温最高多少. 水的温度只受新加进的谁的影响,对于水\(W1(T1 ...

  5. Django-rest Framework(五)

    把十大接口做完了才能更好的了解后面的视图类 1.(重点)二次封装Response;自定义APIResponse继承Response,重写 ____init____方法 from rest_framew ...

  6. keras multi-label classification 多标签分类

    问题:一个数据又多个标签,一个样本数据多个类别中的某几类:比如一个病人的数据有多个疾病,一个文本有多种题材,所以标签就是: [1,0,0,0,1,0,1] 这种高维稀疏类型,如何计算分类准确率? 分类 ...

  7. 64位电脑上安装MySQL进行MFC开发的相关问题

    本人环境: 64位win7 + MySQL5.6 安装MySQL的时候有个选项是 选择:32位/64位.默认情况下是安装当前操作系统的位数.但我在使用VS进行开发的时候发现问题: error LNK2 ...

  8. 关于apache kylin 安装32位linux办法

    最近公司在使用apache kylin做实时开发访问,但是自己集群是linux32 只能安装JDK32位的受限只能3G多内存,而apachekylin 默认是4G内存,需要JDK64位支持. 解决办法 ...

  9. vue 权限管理

    核心想法: 登陆后获得用户角色,通过角色获得用户的权限,注入权限对应的路由.刷新页面,从localStorage用角色(更好的方式是通过token)再次获得所属权限,再次注入路由.在管理界面左端循环权 ...

  10. TZOJ 2478 How many 0's?(数位DP)

    描述 A Benedict monk No.16 writes down the decimal representations of all natural numbers between and ...