日期:2014-05-16  浏览次数:20305 次

ControlJS介绍

Steve Souders 最近做了这么一个东西—— ControllJs。 主要为了是解决网页加载中Js文件的性能问题。这里做一个简单的转述。

?

众所周知,资源文件在浏览器加载直至用户可用是有两个阶段的:加载,执行。JavaScript的加载会阻滞其他资源的加载,而由于浏览器渲染是单线程的,JS执行的同时浏览器实际是假死状态的,页面渲染会停止,浏览器也不会下载新的文件。这样也会造成很大的性能问题, 所以Steve提出了三个方法:异步加载;延迟执行;覆写document.write。

?

1. 异步加载

?

核心思想还是很简单:让页面中的js片段对浏览器不可识别。jquery的template也是用了类似的方法。

?

外链脚本:由

?<script type="text/javascript" src="main.js"><script>?

改写成

<script type="text/cjs" src="main.js"><script>?

?

内联脚本:由

<script type="text/javascript">sth...<script>?

?改写成

<script type="text/cjs">sth...<script>?

?

这样子的type声明,浏览器是识别不了的,也不会去加载,更不会执行非ie浏览器不会加载,ie浏览器会加载这个文件,但所有都不会执行内部脚本

?

接下来,对于外链的脚本,取出所有的src属性,通过Image或Object元素加载进页面(可参考css,javascript的预加载)。 这样加载的文件不会执行,节省了js的执行时间。

Gmail团队使用了另外一种方法,内联的js全部都放在/*...*/的注释中。也是可以参考的一种方法。