18 预先加载组件 (Preload Components)
tag:content
预加载看起来和后加载原则是个矛盾,但它其实是为了另外一个目的。预加载组件让你可以利用浏览器的空闲时间来加载之后需要的组件(比如图片,样式表和脚本)。这样当用户浏览下一个页面的时候,大部分组件都已经在缓存里了而页面会加载的更快。
有几种预加载的类型:
- 无条件预加载-当原本内容加载完成时,立刻开始获取一些额外的组件。比如到google.com看下一个sprite图片怎样被在onload事件后请求的。在google.com的首页里并没有用到sprite图片,但被用在接下来的结果页面里。
- 有条件的预加载-根据用户的行为来猜测用户什么时候到达下个页面然后据此预加载。在search.yahoo.com上,你可以看到额外的组件在你在输入框中输入时是怎样被加载的。
- 有预期的加载-当登录重新设计的网站时进行加载。你通常会在重新设计网站后听到:“新网站很酷,但它比以前的要慢”。这个问题的部分原因是用户访问旧网站时有所有的缓存,而对于新的来说,缓存是空的。你可以通过在登录重新设计的网站前预加载一些组件来缓解这方面的影响。你的旧网站可以用浏览器空闲的时间来请求新网站中用到的脚本和图片。
19 减小DOM元素的数量 (Reduce the Number of DOM Elements)
tag:DOM
复杂的页面意味着更多的字节需要被下载而且也意味着在JavaScript中遍历DOM更慢。比如你在页面中添加一个事件,让它在500或者5000个DOM元素中循环,它们的效率是不同的。
更多的DOM元素表明有些标签需要被改良而并不一定需要移除实际内容。你是否为了布局而使用繁琐的网一样的表格?你是否只是为了弥补一些布局的问题而使用了更多的div标签?也许还有更好和更符合语义的标签可以使用。
YUI CSS utilities可以很好的帮助进行布局:grid.css 可以帮助你进行所有的布局,front.css 和 reset.css 可以帮助你去除浏览器默认的格式。这是你开始重新审视你的标签的机会,比如只在语义符合时使用div标签,而不是用它来另起一行。
DOM元素的数量很好检测,只要在Firebug的控制台里输入:
document.getElementsByTagName('*').length
那么多少DOM元素算多呢?查看下类似的使用较好的标签的页面。比如Yahoo! Home Page是一个很丰富的页面但只有700以下的DOM元素(HTML标签)。