SlideShare a Scribd company logo
1 of 66
Jackson Tian/田永强 @朴灵 at SAP 从无阻塞脚本加载(LAB.js)到浏览器线程模型 5/7/2011 1
Agenda ,[object Object]
如何实现无阻塞脚本加载
依赖管理与无阻塞并行加载与顺序执行(LAB.js实现机制)
无阻塞脚本加载潜在问题
为什么要谈谈JavaScript线程
为什么要谈谈同步与异步
浏览器线程消息模型
从Web Worker看浏览器的线程
NodeJS的单线程与多线程5/7/2011 2
说到无阻塞脚本加载 ,[object Object]
Steve Souders
At Google on web performance and open source initiatives.
http://www.stevesouders.com/5/7/2011 3
为什么script标签会阻塞页面解析 ,[object Object]
Document.write() 是魔鬼。
<p>task 1.</p><script>document.write(“<p>task5</p>”);</script><p>task 2.</p><p>task 3.</p><p>task 4.</p>
浏览器在UI渲染上,采用队列的方式实现5/7/2011 4
5/7/2011 5
Document.write是魔鬼 ,[object Object]
先进先出原则(FIFO, First-In-First-Out)http://zh.wikipedia.org/wiki/%E9%98%9F%E5%88%97
Document.write破坏了原始的UI更新队列
从document.write来看,JavaScript设计之初只是用来做Web页面辅助的5/7/2011 6
5/7/2011 7
Alert也是魔鬼 ,[object Object]
是否有人通过alert来debug JavaScript程序呢?
for(vari=0; i< 1000; i++) {	alert(“Hi, ” + i);}
alert最坏的地方在于它中断整个UI线程
用户体验的敌人(桌面浏览器)
confirm,prompt方法也是类似的5/7/2011 8
为什么script标签会阻塞页面解析 ,[object Object]
浏览器会在遇到Script标签的时候进行解析和执行
如果Script是外链的话,还要等待下载
如果页面存在多个外链脚本,下载是串行的
在IE8, Firefox3.5, Safari4和Chrome2开始允许并行下载JavaScript文件,但是依然会阻塞页面的其他资源的下载5/7/2011 9
5/7/2011 Chromium解析流程 10 此图由Tapir(貘)提供,感谢他
YSlow的35条军规 ,[object Object]
http://developer.yahoo.com/performance/rules.html#js_bottom
如果脚本的下载+解析+执行的时间太久,UI队列没有得到执行,页面会出现空白
Yahoo!建议将所有的脚本都放在</body>之前,让UI队列优先执行和显示。
Minimize HTTP Requests
http://developer.yahoo.com/performance/rules.html#num_http
页面脚本过多的情况下,通过combo和compress减少请求数
问题?
在</body>之前存在一个较大的脚本文件需要下载和执行
UI在ready之后,需要较长时间等待脚本的下载和执行,在脚本ready之前,UI是出于无事件响应状态的。5/7/2011 11
无阻塞脚本加载 ,[object Object]
对YSlow规则说No
Put Scripts at the Bottom
为过往的犯错买单,看看标准和浏览器厂商都做了什么方案来补救5/7/2011 12
Defer属性 ,[object Object]
浏览器会延迟(无阻塞)下载脚本,并按<script>脚本顺序执行。
在onload事件前执行
实现/支持情况
IE4.0
Firefox3.55/7/2011 13
Async属性 ,[object Object]
与defer属性相同的是脚本会无阻塞加载
与defer属性不同的是脚本在加载完了立即执行,并非按照<script>标签顺序执行
实现/支持情况
Firefox3.6
Opera10.5
Safari
Chrome
IE9.0(defer的别名?)5/7/2011 14
标准与实现之间的差距 ,[object Object]

More Related Content

What's hot

ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
Allen Lsy
 
利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式
Chui-Wen Chiu
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
Wade Huang
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用
luolonghao
 
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
ArBing Xie
 

What's hot (19)

選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
 
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
twMVC#19 | 微信公眾平台申請與wechat api 開發血淚史
 
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
twMVC#20 | ASP.NET MVC View 開發技巧小錦囊
 
專案分層架構 twMVC#18
專案分層架構 twMVC#18專案分層架構 twMVC#18
專案分層架構 twMVC#18
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
Single-Page Application Design Principles 101
Single-Page Application Design Principles 101Single-Page Application Design Principles 101
Single-Page Application Design Principles 101
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
Asp.Net Mvc 1.0
Asp.Net Mvc 1.0Asp.Net Mvc 1.0
Asp.Net Mvc 1.0
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
 
利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式利用 ASP.NET MVC 提升您的 Web 應用程式
利用 ASP.NET MVC 提升您的 Web 應用程式
 
twMVC#23 | 一個Mobile App開發、維護與改版的愛恨之路
twMVC#23 | 一個Mobile App開發、維護與改版的愛恨之路twMVC#23 | 一個Mobile App開發、維護與改版的愛恨之路
twMVC#23 | 一個Mobile App開發、維護與改版的愛恨之路
 
Asp.net mvc 基礎
Asp.net mvc 基礎Asp.net mvc 基礎
Asp.net mvc 基礎
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用
 
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
 
開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15開發的效能與效率-twMVC#15
開發的效能與效率-twMVC#15
 
JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰JSDC 2015 React-Native 實戰
JSDC 2015 React-Native 實戰
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練12015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1
 
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1與 Asp.net mvc 的第一次親密接觸 - twMVC#1
與 Asp.net mvc 的第一次親密接觸 - twMVC#1
 

Viewers also liked (6)

从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
 
彪叔 [2010]webrebuild
彪叔 [2010]webrebuild彪叔 [2010]webrebuild
彪叔 [2010]webrebuild
 
web标准化交流会bobby分享
web标准化交流会bobby分享web标准化交流会bobby分享
web标准化交流会bobby分享
 
QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示QQ聊天系统后台架构的演化与启示
QQ聊天系统后台架构的演化与启示
 
web标准化交流会上海站bobby分享
web标准化交流会上海站bobby分享web标准化交流会上海站bobby分享
web标准化交流会上海站bobby分享
 

Similar to 从无阻塞并行脚本加载(Lab.js)到浏览器消息模型

GlassFish特性介绍
GlassFish特性介绍GlassFish特性介绍
GlassFish特性介绍
Jim Jiang
 
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
ArBing Xie
 
網頁開發工具 20140630
網頁開發工具 20140630網頁開發工具 20140630
網頁開發工具 20140630
Yeh Yung-Hsin
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
Tony Deng
 
Java Web动态图表编程
Java Web动态图表编程Java Web动态图表编程
Java Web动态图表编程
yiditushe
 
单页面开发遇到的一些问题
单页面开发遇到的一些问题单页面开发遇到的一些问题
单页面开发遇到的一些问题
Zhi Zhong
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
Cat Chen
 
20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日
twMVC
 

Similar to 从无阻塞并行脚本加载(Lab.js)到浏览器消息模型 (20)

Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web Framework
 
J S教材
J S教材J S教材
J S教材
 
GlassFish特性介绍
GlassFish特性介绍GlassFish特性介绍
GlassFish特性介绍
 
常用Js框架比较
常用Js框架比较常用Js框架比较
常用Js框架比较
 
程序组介绍Ver2.0
程序组介绍Ver2.0程序组介绍Ver2.0
程序组介绍Ver2.0
 
美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用美团点评技术沙龙05 - 前后端联调方案探索与应用
美团点评技术沙龙05 - 前后端联调方案探索与应用
 
Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2Asp.net mvc 從無到有 -twMVC#2
Asp.net mvc 從無到有 -twMVC#2
 
twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有twMVC#02 | ASP.NET MVC 從無到有
twMVC#02 | ASP.NET MVC 從無到有
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development Fundamentals
 
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
 
網頁開發工具 20140630
網頁開發工具 20140630網頁開發工具 20140630
網頁開發工具 20140630
 
淘宝网前端应用与发展
淘宝网前端应用与发展淘宝网前端应用与发展
淘宝网前端应用与发展
 
非常靠谱 Html 5
非常靠谱 Html 5 非常靠谱 Html 5
非常靠谱 Html 5
 
Java Web动态图表编程
Java Web动态图表编程Java Web动态图表编程
Java Web动态图表编程
 
单页面开发遇到的一些问题
单页面开发遇到的一些问题单页面开发遇到的一些问题
单页面开发遇到的一些问题
 
程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號程式人雜誌 -- 2015 年1月號
程式人雜誌 -- 2015 年1月號
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVC
 
20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日20130823微軟雲端平台開發者日
20130823微軟雲端平台開發者日
 
Jsp讲义
Jsp讲义Jsp讲义
Jsp讲义
 

More from 裕波 周

More from 裕波 周 (13)

前端架构漫谈
前端架构漫谈前端架构漫谈
前端架构漫谈
 
Scrum敏捷项目管理
Scrum敏捷项目管理Scrum敏捷项目管理
Scrum敏捷项目管理
 
移动设备web重构
移动设备web重构移动设备web重构
移动设备web重构
 
重温网站重构
重温网站重构重温网站重构
重温网站重构
 
从问题开始,前端,架构、框架与库的实战
从问题开始,前端,架构、框架与库的实战从问题开始,前端,架构、框架与库的实战
从问题开始,前端,架构、框架与库的实战
 
从问题开始,谈前端架构
从问题开始,谈前端架构从问题开始,谈前端架构
从问题开始,谈前端架构
 
Ie9 overview
Ie9 overviewIe9 overview
Ie9 overview
 
《一专多长》——Twinsen[梁璟彪]
《一专多长》——Twinsen[梁璟彪]《一专多长》——Twinsen[梁璟彪]
《一专多长》——Twinsen[梁璟彪]
 
浏览器兼容性问题简介 --- 黄昊
浏览器兼容性问题简介 --- 黄昊浏览器兼容性问题简介 --- 黄昊
浏览器兼容性问题简介 --- 黄昊
 
揭秘Html5和Css3 ---- 鲁超伍
揭秘Html5和Css3 ---- 鲁超伍揭秘Html5和Css3 ---- 鲁超伍
揭秘Html5和Css3 ---- 鲁超伍
 
网站重构Whoami ---- 偷米饭
网站重构Whoami ---- 偷米饭网站重构Whoami ---- 偷米饭
网站重构Whoami ---- 偷米饭
 
分层语义化模板实践 ---- 张克军
分层语义化模板实践 ---- 张克军分层语义化模板实践 ---- 张克军
分层语义化模板实践 ---- 张克军
 
javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当javascript的分层概念 --- 阿当
javascript的分层概念 --- 阿当
 

从无阻塞并行脚本加载(Lab.js)到浏览器消息模型