chunchunlike

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
前言

大多数浏览器用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的脚本请求很有意思 看看

这条会和新式浏览器并行下载冲突,呵呵,还是要看浏览器的。

---

重要 : 无阻塞脚本

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设计核心理念:页面少量的代码 加载丰富的功能组件。

 

 

 

 

 

 

posted on 2011-07-28 22:52  chunchunlike  阅读(238)  评论(4)    收藏  举报