High Performance Web Sites 读书笔记3
续 http://www.hickwu.com/?p=228
尽量避免使用 CSS 表达式
CSS 表达式可以根据条件来动态的设置 css 的属性,IE 5 以及以后版本都支持 css 表达式。表达式部分就是 js 代码。
其他浏览器可能会忽略该功能,但是 IE 浏览器是支持的。利用这个特性可以用来解决一些其他浏览器支持但是 ie 不支持的特性。比如 ie 不支持的 min-width 属性,可以通过这样的表达式在 ie 下实现:
min-width: 600px;
css 一个表达式可能并不怎么消耗资源,但是他们的执行次数往往会比人们预想的多,比如包括拖动滚动条,甚至是移动鼠标都可能导致一个 css 表达式反复执行。虽然写得好可以避免这样的情况,但是到了这个层次很多东西不好把握了,所以一般建议尽量避免使用 css 表达式。
使用外部 js 和 css 样式
其实单纯的就一个页面来说,把 js 和 css 放在一个文件中,和使用外部 js 和 css 文件相比,还是要快的。尽管使用多个文件可以利用到浏览器的并行下载,但是多次请求的开销,导致 js 和 css 放在一个文件中要快。但是一般来说,css 和 js 都是很多页面可以公用的,或者用户习惯是一天或者一个月内多次访问到同一个页面,这些文件一般都是可以直接从浏览器 cache 中取的。因此并不是绝对的说一定使用外部 js 和 css ,而是在可 Cache 的情况下使用。对书中说的”Empty cache vs. primed cache”还不是完全明白,另外提到的 Dynamic Inlining 个人感觉没有必要搞得怎么复杂,可能得不偿失。
DNS 解析
一般来说,操作系统和浏览器把域名解析为 ip 地址以后,都会丢这个解析做 cache ,也就是在一定时间内,该域名会一直被解析为该 ip ,而不管对应的 ip 是否变化或者还绑定了其他 ip 。尽管如此,浏览器通常都会忽略操作系统的 dns cache 。而 Keep-Live 情况下,实际上只有一个连,无论是否 cache 都不会有多次的 dns 解析。
介绍了 TTL: ping 命令可以看到的 TTL 的意思是 Time To Live, 也就是 dns server 告诉请求解析的 client 某域名的解析可以被 cache 的时间。
说明一下,之前我接触该过的清 dns cache 的命令 ipconfig /flushdns 清除的只是操作系统的 dns cache ,对浏览器并不一定有效。浏览器通常是关闭进程以后会自动清楚 dns cache 。

