一、HTML5 标签的应用
HTML5 的应用不仅仅是标签的应用,但她可以从标签的应用开始。打开你的浏览器,查看源代码,你会发现 <header> <footer> 这些标准已经都用上了。还会发现一段 HTML5 Shiv 的 JS 代码:
标签应用需要着重关注的是其语义的传达。像 <header> <footer> 这种很好理解,但像 <section> 和 <aside>,还有类似于用新语义的 <small> 标签等,都是值得大家去深入研究的。这方面这次新首页的改版我也有着重强调过,不过执行起来并不是很理想。接下来我会做一下这方面相应的研究,如果你有兴趣,可以加入到我的团队中来。
值得一提的是,HTML5 有一个特点是“有容乃大”,标签可以非常灵活地去使用。比如可以用 "block-level" links,写惯了 XHTML 的同学,一定不会习惯下面的代码,甚至会觉得不可理喻,但这就是 HTML5 所允许的。
其实像大家可以体验到的。普遍的感受就是,首页放的东西比上一版多了,但速度竟然快了不少。另外一个很明显的感受是,图片都是最后出来的。是的,这就是为什么这么多请求,还能快起来的原因。
所谓的延迟加载,把所有图片都用相应的标记记录图片地址,然后用 JS 去创建一个 img 再把 src 的值变成已经标记在页面中的那个地址。这样做有两个好处,一是先把文本内容显示出来,再加载图片,这样一个先后的过程会给用户心理给用户安慰,让其感觉页面是正在加载的;一是平行加载图片,从实际上加快页面的速度。
但这样做也有一个风险,当 JS 没有开启的时候,用户就看不到图片。所以,我们需要进一步增强页面的可用性,让其没有 JS 的时候也可以显示出来。当时想到的就是 <noscript> 标签,专为无 JS 而生的标签。现在,禁用你浏览器的 JS 再访问支付宝首页吧。是吧,还是都有显示出来吧,目换达到了。做法是这样的,按 noscript > img 这样的结构,给每一个 <img> 标签外面都包一个 <noscript> 标签,当有 JS 的时候,用 JS 把 <img> 提到 <noscript> 外面。
在技术实现上,有一个比较麻烦的是:从 noscript 中获取的 innerHTML,在 firefox 等高级浏览器中是被转义过的 text 文本,而在 ie 中是未转义过的,最重要的是在 ie7 中用 innerHTML 根本就获取不到。转义是小事,可以写一个 Hack 来实现,但获取不到才是最大的问题。所以,我们要用这样的方式来写一个 img:
其实这次改版,想优化的东西并没有全部优化上去。比如说,静态文件的缓存,其实可以调成 1 年(为什么不是像 yahoo 那样缓存 10 年,其实这是一个规定,只是