背景 前一阵子开发的项目 pptx 导入, 由于自己的代码问题,引起了个性能问题,一个 40p 的 pptx 文件,转换成 json 数据,大概要耗时 60s+ ,虽然后面发现是某个使用频率非常高的函数内部,用了 new Function 构造函数 造成的(所以这里顺便提醒一下,如果你很在乎几毫秒的差距的话,建议谨慎使用哈),但是在优化的过程中,一度怀疑是性能达到了瓶颈,所以尝试了使用 web worker 去优化,由于是文件,一般内容都比较大,发现 web worker 在传值这块占用了大部分…
前言 前端工程师们一定有过这样的体验,当一个页面加载了大量的 js 文件时,用户界面可能会短暂地"冻结".这很好理解,因为 js 是单线程的语言.我们再走的极端点,一段 js 中出现了 while(){} 的死循环,这时再去点击页面的 DOM 元素,将不会触发事件,事实上,这些异步的事件都排成了队列,只等页面的 js 渲染完后去执行(从setTimeout谈JavaScript运行机制),而此时渲染进入了死循环,所以出现了用户界面被"冻结"的现象. 而实际的开发中,…
本文大致讲解mvc前后端的传值方式,包括control向view.view向control.以及action向action. 一.经典回顾 二.Controller向View传值 1. ViewBag 2. ViewData 3. TempData 4. Model 三.View向Controller传值 1. 使用Html.BeginForm(...)方法提交表单 2. 使用Html.BeginRouteForm(...)方法提交表单 3. 传统Form表单的Action属性提交 4. 使用A…
第一部分 什么是 web worker? 我们一直强调JavaScript是单线程的,但是web worker的出现使得JavaScript可以在多线程上跑,只是web worker本身适合用于一些复杂的.耗费cpu的运算,不能操作window.document.parent对象,所以说本质上的JavaScript还是单线程的. 这里,我们仅仅举一个简单的例子,看看web worker是怎么运行的,毕竟是html5的规范,目前浏览器的支持还不是很好. web worker就是运行在后台的Java…
0.从一道题说起 var t = true; setTimeout(function(){ t = false; }, 1000); while(t){ } alert('end'); 问,以上代码何时alert“end”呢? 测试一下:答案是:永远都不会alert. 解析:JavaScript引擎是单线程的,事件触发排队等候.所有任务按照触发时间先后排队处理. 上例中,排队的顺序状态是: | var t=true ; | while(t){}; | alert(‘end’); | 在1000m…
一 web worker web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能.您可以继续做任何愿意做的事情:点击.选取内容等等,而此时 web worker 在后台运行. 下面的例子创建了一个简单的 web worker,在后台计数: demo_workers.js 文件代码: var i=0;function timedCount(){    i=i+1;    postMessage(i);    setTimeout("timedCount()&…
Service Worker 处理网络请求的后台服务.适用于离线和后台同步数据或推送信息.不能直接和dom交互.通过postMessage方法交互. Web Worker 模拟多线程,允许复杂计算功能的脚本在后台运行而不会阻碍到其他脚本的运行.适用于处理器占用量大而又不阻碍的情形.不能直接与dom交互.通过postMessage方法交互. WebSocket 在客户端和服务端之间建立保持双向通信的连接.适用于需要保持长推送的情形,如聊天应用,在线游戏或运动直播等.不能直接与dom交互.通过sen…
本文首发在alloyteam团队博客,链接地址http://www.alloyteam.com/2015/11/deep-in-web-worker/ 上一篇文章<从setTimeout说事件循环模型>从setTimeout入手,探讨了Javascript的事件循环模型.有别于Java/C#等编程语言,Javascript运行在一个单线程环境中,对setTimeout/setInterval.ajax和dom事件的异步处理是依赖事件循环实现的.作为一个转向Javascript的开发人员,很自然…
.Web Worker是什么 Web Worker 是HTML5标准的一部分,这一规范定义了一套 API,它允许一段JavaScript程序运行在主线程之外的另外一个线程中.Web Worker 规范中定义了两类工作线程,分别是专用线程Dedicated Worker和共享线程 Shared Worker,其中,Dedicated Worker只能为一个页面所使用,而Shared Worker则可以被多个页面所共享,本文示例为专用线程Dedicated Worker. 1.1 API快速上手 使…
什么是woker 官方的解释是这样的: worker是一个对象,通过构造函数Worker创建,参数就是一个js文件的路径:文件中的js代码将运行在主线程之外的worker线程: var jsFileURI = JS_FILE_PATH; // js文件路径 var worker = new Worker(jsFileURI); worker运行在另一个全局上下文中(self),这个全局上下文不同于window,所以不能在woker中访问window和DOM: 该线程分为两种:dedicated…