日期:2014-05-17  浏览次数:20618 次

HTML的优化杂记

在Perfection kills 上看到他去年写的一篇文章,关于HTML优化的,讲的很详细,姑且记录之,尽管里面有些东西并不能在目前的环境里应用。在当前WEB应用逐渐前端化的潮流下,对客户端的优化越来越受到关注,如何减少代码,如何让应用快速的展示给用户,如何减少用户等待时间等等,如雅虎的34条优化黄金法则 里面提出了详尽的优化方案。
网页优化的最基础的部分应该就是HTML的优化,具体来说首先就是标记的清理,清理标记不仅仅能缩减文档的大小,而且能够让文档更易于维护提高搜索引擎的可见度(Clean markup means better accessibility, easier maintenance, and good search engine visibility),但是即便是那些号称高度优化过的网页,如果仔细查看代码,依旧可以发现很多可以删减或者已经过时的标记用法:
1.script里的注释符<!-- -->

DaimaRen.cn ? 2009-2010 by Tomie Zhang
1
2
3
4
5
<
SCRIPT language=
javascript>

<!--
 Begin
alert
(
"daimaren.cn"
)
;

//  End -->

</
script>

除非是像95 Netscape 1.0这类几乎绝迹的浏览器需要这样的处理,在大部分主流浏览器里,往脚本块里添加HTML注释是完全不需要的。
2.<![CDATA[ … ]>

DaimaRen.cn ? 2009-2010 by Tomie Zhang
1
2
3
4
5
<
script type=
"text/javascript"
>

    //<![CDATA[

      ...
    //]]>

  </
script>

这是另外一个经常在js代码块里添加的错误预防措施,他是在处理真正的XHTML文档(“application/xhtml+xml” content-type)时为了防止代码将形如<号解析为标签开始,所有在CDATA内包含的内容,都会被当成文本处理。但是实际情况是,目前几乎所有的网页的content-type都是text/html,也就是说它们不是严格意义上的xml文档,而是只是text文本,所以这个错误预防处理措施是完全没有必要的,即使你确定要支持xml的文档,也要视情况合理的运用CDATA。
3.onclick=”…”, onmouseover=”“等等。
将事件属性写在HTML标签内是一种很不明智的做法,降低了代码的可维护性,同时污染了标签,如果将事件属性通过JS动态添加,不仅可以灵活控制,还可以利用JS客户端缓存的优势,让这些事件属性不必每次跟随文档请求。
4.onclick=”javascript:…”
这是一个有趣的javascript混乱,伪协议和内在的事件处理程序可以组成高达10W多种多余的组合,事实是事件属性内部的内容在解析后成为body的一个fucution,这个function然后会作为事件处理程序,所以javascript:在此成为一个无用的多余标签。
5.href=”javascript:void(0)”
继续javascript:伪协议,有一个臭名昭著的就是javascript:void(0),他是用来避免默认的锚点动作的,它在JS无法正常解析或者出错时(disabled/not available/errors)会使得锚点完全不可用,理想的解决方案是在href里填写正确的URL,然后用JS去动态改写,这样即使在JS未执行的情况下也不会出现锚点不可用的状况。HREF =“#”是一个精简和更快的替代方案。
6. style=”…”
没有什么本质性的错误,只是后期维护麻烦,另外移到外联的CSS文件中可以缓存起来提高页面执行效率。
7. <script language=”Javascript” … >
最容易误解的属性之一,觉得这个是脚本的“语言”,这个属性是如此古老,在1999年就已经不推荐被使用了。
8. <script charset=”…” … >

DaimaRen.cn ? 2009-2010 by Tomie Zhang
1
2
3
  <
script type=
"text/javascript"
 charset=
"UTF-8"
>

    ...
  </
script>

script标签的另一个容易被误解的属性,charset在HTML4.01里的描述:请注意,charset属性是指字符的 src属性所指定的脚本编码,它不涉及的脚本元素的内容。(Note that the charset attribute refers to the character e