大多数浏览器用js解释器来执行代码。解释器天生就没有编译性代码快。解释性代码要经历把代码转化成计算机指令的过程。
编译器会优化 找最快的机器码来优化,解释器很少这样的优化。解释器很大声读上意味着:代码怎么写,就怎样被执行。
其他语言编译器的优化工作,有js开发者来完成。
chrome的v8是实时编译引擎。firefox Safari也推出了他们的js引擎。这些引擎是编译器层面的,或许有一天我们不必关系js代码的性能。
---
1 运行时间,下载,dom操作,页面生存周期--这些核心是ECMAScript的,肯能随着Js不断进步变得无关紧要 --不懂
2 dom交互,网络延迟 js的阻塞和并发下载。这些要从底层研究js执行时间才能提高。
---
js的阻塞特性。浏览器执行js代码的时候,不能做其他任何事情。
大多浏览器使用单一进程来处理用户界面(ui)更新和js脚本执行。js执行越长时间,浏览器等待响应的时间也越长。
<script>很霸道 每次出现都让页面等待 .无论<script>是内嵌的,还是外链文件(src),页面的下载和渲染都要停下来,等待脚本执行完成。
一个例子:document.write();可能会改变html结构。页面不等待的话 渲染的可能会出问题。
---
js 脚本阻塞:
老式的浏览器 串行加载js文件。两个文件之间会有 前一个文件的执行时间。
新的浏览器chrome 2 ie8,允许并行下载js文件。但是仅是js并行,和图片无法并行。但页面也还是等待所有js下载完成,再执行。 这段时间用户是无法交互的,甚至js放在顶部head中。页面长时间空白。
第一条 尽量把脚本放到<body>底部。
等待html结构 图片下载完成。用户能看到了 再加载脚本。仅是体验上不同,实质没有变化
---
考虑到http的请求。单个100KB的文件将比下载4个25KB的文件更快。,建议合并js文件,减少合并js文件个数。p5有个yahoo的脚本请求很有意思 看看
这条会和新式浏览器并行下载冲突,呵呵,还是要看浏览器的。
---
重要 : 无阻塞脚本
1 defer 。HTML4定义的defer 仅ie4+ firfox3.5+支持,不是通用的。
如果这个脚本块(可以是内联的 可以使外链的),不会改变html结构,可以标志为defer。
解析到这个标签的时候开始下载,但不会执行。defer的脚本下载不会阻止浏览器的其它进程(我想 肯能是其他图片下载 或者ui渲染),可以与其他资源并行下载。
在window.onload触发之前不会执行,这个触发完才会执行。
p6有个执行顺序的例子,看看。
2 最通用的:动态脚本元素 -- 跨浏览器 不阻塞 顺序控制。
document.createElement("script")
.src =
head .appendChild p7建议放到head中 不放到body中,怕body没有完全加载完成。
记载完毕会有回调函数,ie:onreadystatechange,其他:onload。
p8底部搞了一个通用的加载方法。
回调函数中可以加载下一个js文件,确保js的顺序!!!!!!!
!!!!!!!!!!!文件的下载 和执行过程不会阻塞页面其它进程。?????????????????????????为什么呀
普通的js加载:
浏览器中firfox Opera按指定顺序执行。
其他浏览器 是按服务端返回的顺序下载,执行代码。不能保证顺序。
---
3 XMLHttpRequest XHR 脚本注入 --下载但不自动执行 通用,缺点 不能跨域 所以大型web一般不采用XHR脚本注入技术。
下载js内容 不是整个文件。所以可以下载 但不会自动执行。
---
一般推荐第二种
---
YUI3设计核心理念:页面少量的代码 加载丰富的功能组件。

浙公网安备 33010602011771号