<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[某些。[Some]]]></title> 
<link>http://www.flyingpig23.com/index.php</link> 
<description><![CDATA[[?]小猪飞飞FlyingPig。某些。记录...]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[某些。[Some]]]></copyright>
<item>
<link>http://www.flyingpig23.com/linux/</link>
<title><![CDATA[Linux常用命令整理]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Fri, 05 Mar 2010 20:03:56 +0000</pubDate> 
<guid>http://www.flyingpig23.com/linux/</guid> 
<description>
<![CDATA[ 
	别问我为什么命令要这样写,我也不知道,只是这样写,就会有效果!<br/><br/>进入/home/admin文件夹内<br/>cd /home/admin <br/><br/>远程下载<br/>wget http://www.aa.com/aa.zip<br/><br/>远程下载并安装RAR解压软件<br/>wget http://dag.wieers.com/rpm/packages/unrar/unrar-3.6.8-1.el5.rf.i386.rpm;rpm -Uvh unrar-3.6.8-1.el5.rf.i386.rpm; <br/><br/>解压Rar到当前目录<br/>unrar x -o- -y aa.rar<br/><br/>解压Zip到当前目录<br/>unzip aa.zip<br/><br/>ssh解压root权限给予admin<br/>chown -R admin:admin *<br/><br/>批量设置权限777<br/>chmod 777 *<br/><br/>删除包含子目录的文件夹(-r是遍历删除&nbsp;&nbsp;-f是强制删除)<br/>rm -r -f aa.txt<br/><br/><strong>备注(个人经验,不一定安全)</strong><br/>在Kloxo中每添加一个域名都必须重启一下Apache<br/>建立域名文件夹后,先修改文件夹的权限再在文件夹里面进行下载解压等操作.<br/><br/><br/><br/>Tags - <a href="http://www.flyingpig23.com/tags/linux/" rel="tag">linux</a> , <a href="http://www.flyingpig23.com/tags/ssh/" rel="tag">ssh</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/lunarpages-gzip/</link>
<title><![CDATA[lunarpages空间开启Gzip压缩]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Sat, 27 Feb 2010 09:02:54 +0000</pubDate> 
<guid>http://www.flyingpig23.com/lunarpages-gzip/</guid> 
<description>
<![CDATA[ 
	首先给所有的php文件启用gip压缩：<br/>在网站文件夹内的php.ini加入以下代码,如果没有Php.ini则新建.<br/>output_buffering = Off <br/>output_handler =<br/>zlib.output_compression = On<br/><br/>下面为html页面启用gzip压缩：<br/>让apache将html文件当作php文件处理即可。在.htaccess文件中加入下面的语句即可,同样,没有这个文件则新建：<br/>AddHandler x-httpd-php .html .htm<br/>这样就可以为html文件htm文件启用gzip压缩了。<br/><br/>完成压缩.<br/><br/>测试地址 <br/><a href="http://www.pipeboost.com" target="_blank">http://www.pipeboost.com</a><br/><a href="http://tool.chinaz.com/Gzips/" target="_blank">http://tool.chinaz.com/Gzips/</a><br/>Tags - <a href="http://www.flyingpig23.com/tags/lunarpages/" rel="tag">lunarpages</a> , <a href="http://www.flyingpig23.com/tags/gzip/" rel="tag">gzip</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/iis-gzip/</link>
<title><![CDATA[IIS中开启Gzip压缩]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Sat, 27 Feb 2010 08:45:16 +0000</pubDate> 
<guid>http://www.flyingpig23.com/iis-gzip/</guid> 
<description>
<![CDATA[ 
	测试地址 <br/>http://www.pipeboost.com<br/>http://tool.chinaz.com/Gzips/<br/> <br/><br/>【如何配置IIS6中Gzip压缩？】 <br/><strong>步骤一：</strong><br/>打开IIS界面 >&nbsp;&nbsp;选择“网站” > 右键属性 > 选择“服务”> 打钩“临时目录的最大容量”与“临时目录”<br/><span style="color: #FF0000;">特别注意，要给予临时目录 User权限（写入、修改、读取），<strong>如果不会设置权限，请使用默认文件夹</strong></span><br/><br/><br/><strong>步骤二：</strong> <br/>选择“Web服务扩展” > 在右侧空白处右“键新Web服务扩展” > 添加"扩展名"为Gzip和"要求的文件"为C:&#92;WINDOWS&#92;system32&#92;inetsrv&#92;gzip.dll<br/>“设置扩展状态为可选”打钩<br/>“添加文件”很可能由于每个人服务器配置不同，请自行搜索下（或者按照图中打入，看看是否存在） <br/><br/><br/><strong>步骤三：</strong><br/>开始 > 运行中输入 c:&#92;windows&#92;system32&#92;inetsrv > 找到 MeteBase.xml<br/>复制一份到桌面（并更改为 bak_MeteBase.xml），作为备份。<br/>&nbsp;&nbsp;<br/><br/><strong>步骤四：</strong><br/>MetaBase.xml文件，可以用记事本打开，找到IIsCompressionScheme，有三个相同名字的段，分别是deflate,gzip,Parameters，第三段不用管它，前两段有基本相同的参数，<br/>HcFileExtensions加上要压缩的静态扩展名html,htm,css,js等。<br/>HcScriptFileExtensions加上要压缩的动态扩展名asp,php等.<br/>HcDynamicCompressionLevel改成9，（0－10，9是性价比最高的一个）<br/>HcDoStaticCompression="TRUE"<br/>然后请先保存到桌面，名为 MeteBase.xml<br/><br/>具体如下代码（仔细核对下段落）<br/><IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"<br/>&nbsp;&nbsp;HcCompressionDll="%windir%&#92;system32&#92;inetsrv&#92;gzip.dll"<br/>&nbsp;&nbsp;HcCreateFlags="0"<br/>&nbsp;&nbsp;HcDoDynamicCompression="TRUE"<br/>&nbsp;&nbsp;HcDoOnDemandCompression="TRUE"<br/>&nbsp;&nbsp;HcDoStaticCompression="FALSE"<br/>&nbsp;&nbsp;HcDynamicCompressionLevel="0"<br/>&nbsp;&nbsp;HcFileExtensions="htm<br/>&nbsp;&nbsp; html<br/>&nbsp;&nbsp; txt"<br/>&nbsp;&nbsp;HcOnDemandCompLevel="10"<br/>&nbsp;&nbsp;HcPriority="1"<br/>&nbsp;&nbsp;HcScriptFileExtensions="asp<br/>&nbsp;&nbsp; dll<br/>&nbsp;&nbsp; exe"<br/> ><br/></IIsCompressionScheme><br/><IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"<br/>&nbsp;&nbsp;HcCompressionDll="%windir%&#92;system32&#92;inetsrv&#92;gzip.dll"<br/>&nbsp;&nbsp;HcCreateFlags="1"<br/>&nbsp;&nbsp;HcDoDynamicCompression="TRUE"<br/>&nbsp;&nbsp;HcDoOnDemandCompression="TRUE"<br/>&nbsp;&nbsp;HcDoStaticCompression="TRUE"<br/>&nbsp;&nbsp;HcDynamicCompressionLevel="0"<br/>&nbsp;&nbsp;HcFileExtensions="htm<br/>&nbsp;&nbsp; html<br/>&nbsp;&nbsp; txt"<br/>&nbsp;&nbsp;HcOnDemandCompLevel="10"<br/>&nbsp;&nbsp;HcPriority="1"<br/>&nbsp;&nbsp;HcScriptFileExtensions="asp<br/>&nbsp;&nbsp; dll<br/>&nbsp;&nbsp; exe"<br/> ><br/></IIsCompressionScheme><br/><br/>替换成：<br/><br/><IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"<br/>&nbsp;&nbsp;HcCompressionDll="%windir%&#92;system32&#92;inetsrv&#92;gzip.dll"<br/>&nbsp;&nbsp;HcCreateFlags="1"<br/>&nbsp;&nbsp;HcDoDynamicCompression="TRUE"<br/>&nbsp;&nbsp;HcDoOnDemandCompression="TRUE"<br/>&nbsp;&nbsp;HcDoStaticCompression="TRUE"<br/>&nbsp;&nbsp;HcDynamicCompressionLevel="9"<br/>&nbsp;&nbsp;HcFileExtensions="html<br/>&nbsp;&nbsp; css<br/>&nbsp;&nbsp; js<br/>&nbsp;&nbsp; htm<br/>&nbsp;&nbsp; xml<br/>&nbsp;&nbsp; txt"<br/>&nbsp;&nbsp;HcOnDemandCompLevel="9"<br/>&nbsp;&nbsp;HcPriority="1"<br/>&nbsp;&nbsp;HcScriptFileExtensions="php<br/>&nbsp;&nbsp; dll"<br/> ><br/></IIsCompressionScheme><br/><IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"<br/>&nbsp;&nbsp;HcCompressionDll="%windir%&#92;system32&#92;inetsrv&#92;gzip.dll"<br/>&nbsp;&nbsp;HcCreateFlags="2"<br/>&nbsp;&nbsp;HcDoDynamicCompression="TRUE"<br/>&nbsp;&nbsp;HcDoOnDemandCompression="TRUE"<br/>&nbsp;&nbsp;HcDoStaticCompression="TRUE"<br/>&nbsp;&nbsp;HcDynamicCompressionLevel="9"<br/>&nbsp;&nbsp;HcFileExtensions="html<br/>&nbsp;&nbsp; css<br/>&nbsp;&nbsp; js<br/>&nbsp;&nbsp; htm<br/>&nbsp;&nbsp; xml<br/>&nbsp;&nbsp; txt"<br/>&nbsp;&nbsp;HcOnDemandCompLevel="9"<br/>&nbsp;&nbsp;HcPriority="1"<br/>&nbsp;&nbsp;HcScriptFileExtensions="php<br/>&nbsp;&nbsp; dll"<br/> ><br/></IIsCompressionScheme><br/>&nbsp;&nbsp;<br/><br/><strong>步骤五：</strong><br/>我的电脑 > 控制面板 > 管理工具 > 服务<br/>找到 IIS Admin Service > 停止<br/> <br/><br/><strong>步骤六：</strong><br/>回到找到 MeteBase.xml 的目录c:&#92;windows&#92;system32&#92;inetsrv，删除它<br/> <br/><br/><strong>步骤七：</strong><br/>把桌面的MeteBase.xml 剪切到c:&#92;windows&#92;system32&#92;inetsrv。<br/> <br/><br/><strong>步骤八：</strong><br/>在步骤五中，我们停止了 IIS Admin Service 服务，现在，我们点启动它。<br/><br/><br/><strong>步骤九：</strong><br/>回到IIS中，对其进行重启IIS<br/><br/><br/><strong>步骤十一：</strong><br/><strong>完成!</strong><br/><br/><br/>Tags - <a href="http://www.flyingpig23.com/tags/iis/" rel="tag">iis</a> , <a href="http://www.flyingpig23.com/tags/gzip/" rel="tag">gzip</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/dede-collection-filter/</link>
<title><![CDATA[dede常用采集过滤正则]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Tue, 10 Mar 2009 21:42:46 +0000</pubDate> 
<guid>http://www.flyingpig23.com/dede-collection-filter/</guid> 
<description>
<![CDATA[ 
	每次用都在网上搜，麻烦，直接复制一份记录起来！<br/><br/>dede采集过程中最麻烦的莫过于采集的正则过滤函数的编写。说实在的，dede在这点上和很多ASP CMS系统比如说动易等，采集的时候直接选择几个选项就可以了，简单的完成想过滤的东西。不过他们只局限于对文章内容的过滤不是很好。而DEDE却能对所有采集的字段进行过滤，功能上弥补了易用性的缺陷，期待柏拉图在后续版本中加上选择性过滤功能。<br/>下面是在综合论坛上网友的各种正则的一个全集：<br/><br/>{dede:trim}<br/>{/dede:trim}<br/>{dede:trim}&lt;param([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;embed([^&gt;]*)&gt;([^&gt;]*)&lt;/embed&gt;{/dede:trim}<br/>{dede:trim}&lt;embed([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/embed&gt;{/dede:trim}<br/>{dede:trim}&lt;object([^&gt;]*)&gt;([^&gt;]*)&lt;/object&gt;{/dede:trim}<br/>{dede:trim}&lt;object([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/object&gt;{/dede:trim}<br/>{dede:trim}&lt;OBJECT([^&gt;]*)&gt;([^&gt;]*)&lt;/OBJECT&gt;{/dede:trim}<br/>{dede:trim}&lt;OBJECT([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/OBJECT&gt;{/dede:trim}<br/>{dede:trim}&lt;iframe([^&gt;]*)&gt;([^&gt;]*)&lt;/iframe&gt;{/dede:trim}<br/>{dede:trim}&lt;iframe([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/iframe&gt;{/dede:trim}<br/>{dede:trim}&lt;IFRAME([^&gt;]*)&gt;([^&gt;]*)&lt;/IFRAME&gt;{/dede:trim}<br/>{dede:trim}&lt;IFRAME([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/IFRAME&gt;{/dede:trim}<br/>{dede:trim}&lt;font([^&gt;]*)&gt;([^&lt;]*)&lt;/font&gt;{/dede:trim}<br/>{dede:trim}&lt;font([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/font&gt;{/dede:trim}<br/>{dede:trim}&lt;a([^&gt;]*)&gt;([^&lt;]*)&lt;/a&gt;{/dede:trim}<br/>{dede:trim}&lt;a([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/a&gt;{/dede:trim}<br/>{dede:trim}&lt;td([^&gt;]*)&gt;([^&gt;]*)&lt;/td&gt;{/dede:trim}<br/>{dede:trim}&lt;td([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/td&gt;{/dede:trim}<br/>{dede:trim}&lt;tr([^&gt;]*)&gt;([^&gt;]*)&lt;/tr&gt;{/dede:trim}<br/>{dede:trim}&lt;tr([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/tr&gt;{/dede:trim}<br/>{dede:trim}&lt;tbody([^&gt;]*)&gt;([^&gt;]*)&lt;/tbody&gt;{/dede:trim}<br/>{dede:trim}&lt;tbody&gt;{/dede:trim}<br/>{dede:trim}&lt;/tbody&gt;{/dede:trim}<br/>{dede:trim}&lt;table([^&gt;]*)&gt;([^&gt;]*)&lt;/table&gt;{/dede:trim}<br/>{dede:trim}&lt;table([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/table&gt;{/dede:trim}<br/>{dede:trim}&lt;img([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;span([^&gt;]*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/span&gt;{/dede:trim}<br/>{dede:trim} {/dede:trim}<br/>{dede:trim}&lt;strong&gt;{/dede:trim}<br/>{dede:trim}&lt;/strong&gt;{/dede:trim}<br/>{dede:trim}&lt;STRONG&gt;{/dede:trim}<br/>{dede:trim}&lt;/STRONG&gt;{/dede:trim}<br/><br/><br/>应用示例一：标题中空格的过滤<br/>经常在采集文章的时候，标题文字里面有空格，采回来后应用很是麻烦，所以需要在过滤处添加下面正则过滤<br/><br/>{dede:trim} {/dede:trim}<br/><br/><br/>应用示例二：来源作者中连接的过滤<br/>在采集文章的时候，有的系统里面作者或者来源处都有连接，直接采集的话将连接采集回来了，然后由于这两个字段有限制，通常会造成需要采集的内容没有采集回来，所以需要在过滤处添加下面正则过滤<br/><br/>{dede:trim}&lt;a([^&gt;]*)&gt;([^&lt;]*)&lt;/a&gt;{/dede:trim}<br/><br/><br/>应用示例三：文章内容中连接以及其他广告代码的过滤<br/>这个就不用说了，当需要对所有东西过滤的时候，直接用上面所有的代码过滤就可以，但是实际应用中，我们只需要对连接、动画、调用等进行过滤。（这个需要按照对方内容里面具体含有什么代码来具体操作）<br/>一般的只有链接，使用二中的代码进行过滤就可以了，但是实际上一般的网站现在都在内容里面加有广告等，所以采取下面的过滤正则就可以完成过滤：<br/><br/>{dede:trim}&lt;a([^&gt;]*)&gt;([^&lt;]*)&lt;/a&gt;{/dede:trim}<br/>{dede:trim}&lt;IFRAME([^&gt;]*)&gt;([^&gt;]*)&lt;/IFRAME&gt;{/dede:trim}<br/>{dede:trim}&lt;object([^&gt;]*)&gt;([^&gt;]*)&lt;/object&gt;{/dede:trim}<br/>{dede:trim}&lt;script([^&gt;]*)&gt;([^&gt;]*)&lt;/script&gt;{/dede:trim}<br/><br/><br/>应用示例四：过滤GG广告代码<br/>其实这个就是在上面的内容过滤，但是很多论坛里的网友经常问这个，所以单独作为一个应用列出来：<br/><br/>{dede:trim}&lt;script([^&gt;]*)&gt;([^&gt;]*)&lt;/script&gt;{/dede:trim}<br/><br/><br/>好了，上面四种应用基本上涵盖了采集的各种应用，掌握了这个，过滤基本上就不用求人了<br/><br/><br/>另外：<br/><br/>经过自己的研究(DEDECMS官方连个正则表达式标签列表都没有)<br/>真是苦了大家,我也不保证我写的对不对,反正拿出来晒一下,有错的地方希望大家一同修改.<br/>也希望管能尽早出一个DEDECMS&quot;所支持正则表达式标签列表&quot;,要不然我们会用正则表达式的人都不知道什么标签能被支持!!!!!!!!!!!!!!!!!!!!!!!!!<br/><br/>以下是常用的正则表达式标签<br/>{dede:trim}&lt;tbody(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/tbody&gt;{/dede:trim}<br/>{dede:trim}&lt;table(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/table&gt;{/dede:trim}<br/>{dede:trim}&lt;tr(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/tr&gt;{/dede:trim}<br/>{dede:trim}&lt;td(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/td&gt;{/dede:trim}<br/>{dede:trim}&lt;font(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/font&gt;{/dede:trim}<br/>{dede:trim}&lt;a(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/a&gt;{/dede:trim}<br/>{dede:trim}&lt;param(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;embed(.*)&lt;/embed&gt;{/dede:trim}<br/>{dede:trim}&lt;object(.*)&lt;/object&gt;{/dede:trim}<br/>{dede:trim}&lt;iframe(.*)&lt;/iframe&gt;{/dede:trim}<br/>{dede:trim}&lt;form(.*)&lt;/form&gt;{/dede:trim}<br/>{dede:trim}&lt;input(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;script(.*)&lt;/script&gt;{/dede:trim}<br/>{dede:trim}&lt;style(.*)&lt;/style&gt;{/dede:trim}<br/>{dede:trim}&lt;!--(.*)--&gt;{/dede:trim}<br/><br/>以下为不常用的正则表达式标签<br/>{dede:trim}&lt;div(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/div&gt;{/dede:trim}<br/>{dede:trim}&lt;center(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/center&gt;{/dede:trim}<br/>{dede:trim}&lt;p(.*)&gt;{/dede:trim}<br/>{dede:trim}&lt;/p&gt;{/dede:trim}<br/>{dede:trim}&lt;span(.*)&gt;{dede:trim}<br/>{dede:trim}&lt;/span&gt;{dede:trim}<br/>{dede:trim}&lt;img(.*)&gt;{/dede:trim}<br/><br/>/////////////////////////////////////<br/><br/><br/>Tags - <a href="http://www.flyingpig23.com/tags/dede/" rel="tag">dede</a> , <a href="http://www.flyingpig23.com/tags/%25E9%2587%2587%25E9%259B%2586%25E8%25BF%2587%25E6%25BB%25A4/" rel="tag">采集过滤</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/independent_visitors/</link>
<title><![CDATA[什么叫当天独立访客]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Thu, 26 Feb 2009 10:09:01 +0000</pubDate> 
<guid>http://www.flyingpig23.com/independent_visitors/</guid> 
<description>
<![CDATA[ 
	独立访客指的是独立上网的电脑，与唯一IP不同，独立访客高于IP数的时候正常是以下这种状况：例如一个局域网对外是相同的一个IP，但是有10个人同时访问，那么这个时候，独立访客为10，唯一IP仅为1；IP高于独立访客的时候正常是以下这种状况：一个用户，上网的时候频繁掉线，拔号10次均打开了受统计网站，此时，独立访客仅计为1，而IP数则被计为10。本站用的是COOKIE的方式来记录独立访客。这两个值并不会固定谁高于谁。 <br/>Tags - <a href="http://www.flyingpig23.com/tags/%25E7%258B%25AC%25E7%25AB%258B%25E8%25AE%25BF%25E5%25AE%25A2/" rel="tag">独立访客</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/post/38/</link>
<title><![CDATA[Z-Blog优化集锦]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Sat, 27 Dec 2008 11:01:14 +0000</pubDate> 
<guid>http://www.flyingpig23.com/post/38/</guid> 
<description>
<![CDATA[ 
	<strong>五个常用的Z-Blog SEO插件</strong>&nbsp;&nbsp;<br/><br/>Z-Blog是单用户博客系统的佼佼者，整体性能不错，负载能力强，可以用于访问量较大的博客，其本身的SEO也有一定特色，很多专做SEO的也使用Z-Blog程序。不过我发现不少人只是简单的把Z-Blog拿来使用，并没有再优化，至少我认为Z-Blog在SEO优化方面还有更多发挥的空间，参考WordPress的SEO优化技巧，这里我就介绍五个常用的Z-Blog SEO插件。 <br/>　　Google站点地图 - Sitemaps<br/><br/>　　Google Sitemaps是Google的一个和网站管理员相关的工具，只要站点有更新，便会自动“通知”Google，方便Google进行索引。首先在Z-Blog中启用Sitemaps插件，之后访问Google Webmaster Tools站点，提交自己的Sitemaps文件地址即可。<br/><br/>　　Ping中心和引用通告发送器 - PingTool<br/><br/>　　Ping服务，也称更新通知服务，是搜索引擎发现网友博客更新的一种方式。使用Ping服务后，可以使搜索引擎能更快、更全面地收录Z-Blog博客文章，安装启用这个插件后，当在Z-Blog中发布一篇博客文章后，如果选中“发布文章同时通知Ping中心”，系统会自动向搜索引擎的ping地址发送一次通知，搜索引擎在收到Ping后会在最短时间内对相应博客进行抓取。<br/><br/>　　RSS优化 - BetterFeed<br/><br/>　　如果Z-Blog使用全文RSS输出Feed的话，会损失一些Web流量，还可能被人恶意使用，通过Better Feed这样的插件，可以优化自己的RSS Feed输出，在Feed中添加原文链接，使得Google能较容易的找到原创文章地址。<br/><br/>　　标题搜索引擎优化 - TitleSEO<br/><br/>　　Z-blog默认的文章Title的调用方式是“博客名称-文章标题”，这有利于用户浏览，却不利于SEO，使用TitleSEO插件可以在不修改模板的情况下将Title修改为“文章标题-博客名称”，利于文章在搜索引擎中的排名。<br/><br/>　　月光反垃圾留言过滤 - Antispam<br/><br/>　　垃圾留言是文章排名的大忌，大量的垃圾留言会造成文章的搜索引擎排名下降，严重的甚至会被Google删除索引，因此，启用功能强大的月光反垃圾留言过滤插件是博客的必需。<br/><br/>　　好了，以上就是五个常用的Z-Blog的SEO插件，虽然相对WordPress来说插件数量还比较少，但Z-Blog目前依旧是最好的ASP单用户博客程序。<br/><br/><br/>-----------------------------------------------------------------------------<br/><br/><strong>从Z-Blog学SEO基本知识</strong><br/><br/><br/>低噪音<br/>Z-Blog文章页默认为html文件，所以最新更新、最新评论等链接列表都使用javascript脚本动态载入，搜索引擎通常无法抓取这部分内容，或者抓取后忽略这部分内容。这就使页面的内容主题更加集中，极少的干扰信息。这点与传统的SEO策略——页内大量站内链接，正好相反，当然，这里指列表式链接，如最新XX等。而wiki式的文内关键字链接明月星光认为还是值得使用的。<br/><br/><br/><br/>真静态<br/>相对于Wordpress等程序的伪静态URL重写，Z-Blog的真静态更有优势，搜索引擎蜘蛛会喜欢能响应If-modified-Since header和正确返回304（文件未更新）的服务器，而只有html真静态文件能默认做到这一点，搜索引擎可以正确判断文件是否更新及更新时间，并且减少重复抓取的损耗。这点也可以加快客户端载入网页的速度，CSS和JS等文件通常只需传送一次即可。访问多个页面时可有效提高用户体验。<br/><br/><br/><br/>简单目录层次<br/>Z-Blog默认的静态地址为blogurl/post/article.html，简单层次和简单的URL更利于SEO，不过按分类组织不同目录应该更有利于提高可用性，博课将稍后讲解Z-Blog内置目录静态插件的高级使用。<br/><br/><br/><br/>低权重页面的链接<br/>对于分类列表、tags页等非内容页面，URL设计的更复杂可以更突出内容页的权重。当然程序在设计之初并未考虑这些，而且tag页的URL如何设计还需要进一步评估，明月星光认为在内容较少的情况下，tag页可以隐藏起来减少站内信息复制，而不同搜索引擎在处理tag页的重复内容时也有不同方法，有时间我们再详细讨论tag页的问题。<br/><br/>-----------------------------------------------------------------------------<br/><br/><strong>有利于SEO的Z-blog路径设置</strong><br/><br/>　　在同等情况下，一级域名[www.flyingpig23.com]要比二级域名[seo.flyingpig23.com]更具排名优势，二级域名[seo.flyingpig23.com]又比栏目页[www.flyingpig23.com/SEO]更具排名优势，栏目页[www.flyingpig23.com/SEO]又比文章页[www.flyingpig23.com/seo.html]更具排名优势。而目录越深，排名的不利因素越大。那么，Z-blog的路径该如何设置才能更有利于搜索引擎优化、有利于排名呢？<br/><br/>　　先看我博客的路径配置结构，首页用的是一级域名，而网站的分类我用的是[www.flyingpig23.com/SEO/]这样的路径，相应分类下的文章则是以[www.flyingpig23.com/SEO/1.html]这种形式。这样做对栏目页而言页面的权重就相应高点，而文章页则在相应的分类目录下。结构一目了然，维护起来也很方便，更有利于搜索引擎排名。<br/><br/>Z-blog1.8实现这种路径的配置方法如下：<br/><br/>　　首先，在根目录下找到c_option.asp文件打开。<br/><br/>　　第二步，找到以下代码<br/><br/>Const ZC_CUSTOM_DIRECTORY_ENABLE=False<br/>&#039;&#123;%post%&#125;,&#123;%category%&#125;,&#123;%user%&#125;,&#123;%year%&#125;,&#123;%month%&#125;,&#123;%day%&#125;,&#123;%id%&#125;,&#123;%alias%&#125;之间的组合,可以用/分隔<br/>Const ZC_CUSTOM_DIRECTORY_REGEX=&quot;&#123;%post%&#125;&quot;<br/>Const ZC_CUSTOM_DIRECTORY_ANONYMOUS=False<br/><br/>Const ZC_MOONSOFT_PLUGIN_ENABLE=False<br/>Const ZC_MOONSOFT_PLUGIN_REGEX=&quot;&#123;%post%&#125;&quot;<br/>Const ZC_MOONSOFT_PLUGIN_ANONYMOUS=False　　<br/><br/>　　第三步，将其修改为<br/><br/>Const ZC_CUSTOM_DIRECTORY_ENABLE=True<br/>&#039;&#123;%post%&#125;,&#123;%category%&#125;,&#123;%user%&#125;,&#123;%year%&#125;,&#123;%month%&#125;,&#123;%day%&#125;,&#123;%id%&#125;,&#123;%alias%&#125;之间的组合,可以用/分隔<br/>Const ZC_CUSTOM_DIRECTORY_REGEX=&quot;&#123;%category%&#125;&quot;<br/>Const ZC_CUSTOM_DIRECTORY_ANONYMOUS=False<br/><br/>Const ZC_MOONSOFT_PLUGIN_ENABLE=True<br/>Const ZC_MOONSOFT_PLUGIN_REGEX=&quot;&#123;%category%&#125;&quot;<br/>Const ZC_MOONSOFT_PLUGIN_ANONYMOUS=True<br/><br/>　　最后，保存文件，进入后台将文件重建即可。<br/><br/><br/>-----------------------------------------------------------------------------<br/><br/><br/>Z-blog的默认模板对搜索引擎表现非常好，尤其是&lt;h&gt;标签运用非常到位。我们只做一些简单的修改。（本人也看到了一些大侠说&lt;h&gt;标签用的不怎么好，尤其是single.html里的标题标签用的不好。）<br/><br/>标题问题：（这条z-blog提供了插件弥补）<br/><br/>Z-blog的默认模板下，文章标题形式都是博客名_文章名，这样不利于突出关键字，应该采用倒置的方法来强调一下关键字。<br/><br/>在TEMPLATE/single.html修改&lt;title&gt;标签，改成：<br/><br/>&lt;title&gt;&lt;#BlogTitle#&gt;&lt;#ZC_MSG044#&gt;&lt;#ZC_BLOG_TITLE#&gt;&lt;/title&gt;<br/><br/>在TEMPLATE/catalog.html修改为：<br/><br/>&lt;title&gt;&lt;#BlogTitle#&gt;&lt;#ZC_MSG044#&gt;&lt;#ZC_BLOG_TITLE#&gt;&lt;/title&gt;<br/><br/>这样，文章标题就改为了：文章名_博客名<br/><br/>日历问题侧栏Tag问题：（这条想想还是有道理的）<br/><br/>博客的日历的确是挺人性化的功能，可以直接访问每日的所写博文，但是SEO方面造成一些问题：<br/><br/>影响搜索引擎抓取，会分散蜘蛛的注意了，影响对主要内容的抓取。 <br/>会形成一些“无效”页面，相信大家写博客每天不会太多，有的就一篇，这样就存在了日历页面下出现一个文章链接，即使是原创也会被Google看作补充材料，大家自己查一下吧。 <br/>我觉得日历功能并非很重要。 <br/>所以我把日历的功能去掉了。<br/><br/>修改TEMPLATE下的single.html、catalog.html、search.html、tags.html、default.html，把以下代码去掉<br/><br/>&lt;div class=&quot;function&quot; id=&quot;divCalendar&quot;&gt;<br/>&lt;h3&gt;&lt;#ZC_MSG050#&gt;&lt;/h3&gt;<br/>&lt;#CACHE_INCLUDE_CALENDAR#&gt;<br/>&lt;/div&gt;<br/><br/><br/><br/>-----------------------------------------------------------------------------<br/><br/><br/>一、Zblog的结构。<br/><br/>(1)关于模板文件的说明,Zblog的模板文件都放在Template目录下面，但其中比较重要值得优化的有几个<br/><br/>default.html&nbsp;&nbsp;&nbsp;&nbsp;首页的模板<br/><br/>single.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单个文章页面模板<br/><br/>b_article-single.html&nbsp;&nbsp; 单个文章页面之中的文章主体部分，single.html里面的文章内容就是嵌用了这个的格式。<br/><br/>catalog.html&nbsp;&nbsp; 用于首页的翻页，也就是说首页从第二页开始，都是这个负责显示<br/><br/>(2)关于Zblog的几个常用标签<br/><br/>&lt;#ZC_BLOG_HOST#&gt; 代表博客的根网址<br/><br/>&lt;#ZC_BLOG_TITLE#&gt;&nbsp;&nbsp; 代表博客网站名称，在后台可以设置<br/><br/>&lt;#ZC_BLOG_SUBTITLE#&gt; 网站副名称，同样在后台可以找到<br/><br/>&lt;#BlogTitle#&gt;&nbsp;&nbsp;代表单个文章的主标题<br/><br/>&lt;#article/tagtoname#&gt;&nbsp;&nbsp;该文章的标签<br/><br/>&lt;#article/intro#&gt; 该文章的简介部分<br/><br/>&lt;#CACHE_INCLUDE_文件名#&gt; 此标签作用是包含外部文件，很实用。例如&lt;#CACHE_INCLUDE_ABCDEFG#&gt;这个意思就是把“INCLUDE”目录下的“ABCDEFG.ASP&quot;文件内容弄进来，首页模板里面的侧边“网站收藏”“友情链接”“图标集”等都是用这个标签搞的，你可以打开“INCLUDE”目录看看里面文件的内容研究研究。<br/><br/>二、Zblog模板的优化<br/><br/>(1) Zblog 1.7的默认模板里面是没有 keywords，description，generator 这几个meta的 !<br/><br/>首先要把这几个加回去，主要是针对单个文章页面，也就是single.html<br/><br/>至于首页的两个default.html和catalog.html加不加上去，看个人喜欢了，我自己是比较懒的。<br/><br/>Single.html 要添加的Meta可以这样加：（只是样例）<br/><br/>经过第一部分的网站优化过程，聪明的你很快就明白这两行字的意思。其中所用的标签就是上面所提到的标签：关键词和简介。<br/><br/>其中要严重注意的一点，就是上面那个description里面的标记“&lt;#article/intro#&gt;”，这个简介不应该有任何HTML标签，尤其是不能包含有英文的双引号“，因为他们是放在页面的head区的，里面包含Html标签很容易导致显示出问题。本来它只应该是一段纯粹的文字，但在我们平时在写Blog的时候，经常会漏写或者把简介也加上了许多效果，导致文章简介有很多HTML标签存在，这个只能靠你平时的写文章习惯。<br/><br/>有的朋友可能会说，这个简介放在description这里这么危险干脆不要吧，我本人也严重同意，但不要它，没有谁能代替啊，除非你改动程序，改动数据库加上一个新的“文章描述”那我没有意见。为了以后的升级兼容，先将就一下吧。或者你比较狠点，可以干脆点不要这一行description。我这里给出一个折衷点的办法就是，你要加上Html标签也可以，但是平时写文章要记得把简介里面的所有的双引号“替换为单引号‘，至少我现在已经在这样做还没有出现过问题。希望作者能在下个版本中弄个直接用于description的标签。<br/><br/>首页的meta就没有那么复杂了，写上你的网站描述和关键词就ok。<br/><br/>(2)仍然是单个文章页面(Single.html)，它的Title部分也不太理想。原来的Title是这样的<br/><br/>可以看到，它的格式是 &quot;博客名称-文章标题”，而越左边是越重要的，应该改成&quot;文章标题-博客名称”。这个容易解决，把位置调换一下就行了。新的title如下：<br/><br/>(3). 还是单个文章页面(Single.htm)，我并不是对它有偏见，其实首页(default.html和catalog.html)也有这个问题.<br/><br/>就是关于h1和h2的使用，<br/><br/>在标准化里面的意义是表示标题，而并不是用来弄大小。Zblog里面，用h1显示了网站名称，用h2显示副标题。但显然把这个h1留给文章的标题更加合适。于是，你可以在single.html&nbsp;&nbsp;default.html&nbsp;&nbsp;catalog.html三个文件中找到：<br/><br/>&lt;#ZC_BLOG_NAME#&gt;<br/><br/>&lt;#ZC_BLOG_SUB_NAME#&gt;<br/><br/>怎么改好呢？又不能和原来的相差太远。幸好Zblog模板采用Xhtml + CSS来控制显示的，我们可以把h1和h2换成div, 或者改成span。用Div是比较理想的，和原来的h1同样是盒状的block。ID=&quot;BlogTitle&quot;保持不变。<br/><br/>于是代码换成<br/><br/>&lt;#ZC_BLOG_NAME#&gt;<br/><br/>&lt;#ZC_BLOG_SUB_NAME#&gt;<br/><br/>效果仍然和有点区别的，就是div没有附带大小样式，而h1里面的文字是默认比较大的。这点改动已经不太兼容了，因为还要去CSS修改一下文字大小。<br/><br/>为了保持兼容性，我们可以采取另一个折衷点的，就是 h1 换成h2, h2换成h3 呵呵~~ 新的代码是<br/><br/>&lt;#ZC_BLOG_NAME#&gt;<br/><br/>&lt;#ZC_BLOG_SUB_NAME#&gt;<br/><br/>这样子文字大小会比原来小一点，但是仍然能兼容网上大部分的模板样式。<br/><br/>把h1从网站名手里抢过来以后，还要把它还给文章的标题。ZBlog默认模板分给文章标题的是h2，又是把h2它当成大小控制来使用~<br/><br/>&lt;#article/title#&gt;<br/><br/>这个我们简单地把h2 改为h1就行了。当然，文字会比原来的再大一点。<br/><br/>(4)关于怎么在ZBlog里面加Adsense广告。<br/><br/>由于Zblog的模板文件化，只要你懂点HTML代码，放广告是很自由的事，基本上每个地方都可以放。我这里只简单说下如何在单个文章的正文中放一个Adsense Content。我们要利用的主角是上面提到的&lt;#CACHE_INCLUDE_文件名#&gt; 标签。<br/><br/>A. 在INCLUDE目录下面新建一个ASP文件，例如&quot;GGADCONTENT.ASP&quot;。然后把Adsense生成的代码直接粘贴进取，不需要再添加任何文字。然后保存。<br/><br/>B. 打开&quot;Template&quot;目录里面的&quot;b_article-single.html&quot;文件，找到这行：<br/><br/>&lt;#article/content#&gt;<br/><br/>把它换成下面的几行：<br/><br/>&lt;#CACHE_INCLUDE_GGADCONTENT#&gt;<br/><br/>&lt;#article/content#&gt;<br/><br/>&quot;GGADCONENT&quot;就是刚才A步骤建立的“GGADCONTENT.ASP”，只要文件名就可以了。同时，上面的代码还定义了一个名为&quot;ggad-content&quot;的样式类。所以还要到C步骤去搞搞它的样式。<br/><br/>C. 打开&quot;STYLE&quot;目录下的&quot;default.css&quot; (我这里用默认CSS做例子)，实际应用看你选择了什么样的模板，相对应的CSS文件。<br/><br/>在这个CSS文件的最末端加入一下代码，而不需要修改其它的地方。<br/><br/>/* GG Adsense Style Control */<br/><br/>.ggad-content &#123;float:left;&#125;<br/><br/>这句CSS的意思是让装着Adsense广告的那个层流动到左边，它会自动把文章正文的文字挤到右边。你也可以把&quot;left&quot;字母改成&quot;right&quot;,则设为浮动到右边。在后台重新生成索引和重新生成文件。如果你在网上修改，还要记得把INCLUDE里面新建的那个文件ftp到你的网站空间去。<br/><br/>(5). 关于用目录来做文章的访问路径问题，以及自定义文章名称。<br/><br/>官方已经注意到文章访问路径的优化了，并且在后台加入了这两个功能，有兴趣的可以进一步参考ZBlog的官方论坛，我就不再罗嗦了。不过有一点要注意，如果你启用了这个功能后，以前的文章访问路径都会发很大的变化，直接结果就是导致搜索引擎的收录地址和你的新地址对不上号！要过一段痛苦的收录周期才会逐渐恢复收录正常。<br/><br/>-----------------------------------------------------------------------------<br/><br/><strong>网站SEO之Z-Blog的Robots设置技巧</strong><br/><br/>我的个人站是用z-blog建的站，最近我发现很多的z-blog站长都不知道应该怎么设置自己的robots，其实robots设置对网站优化来说还是非常重要的。创建 robots.txt 文件，可以不让搜索蜘蛛抓取你的网站的部分目录或者文件。&nbsp;&nbsp;对于一个网站来说并非抓取的目录和文件越多越好，因为不是所有的文件都需要被搜索引擎抓取。<br/><br/>以下几种情况有足够的理由告诉我们robots设置的重要性：<br/><br/>有些文件根本没有关键词或文本，比如本站的这个页面cmd.asp。 <br/>一般情况下，站内的搜索结果页面用robots设置屏蔽掉更好，比如本站的sreach.asp <br/>网站后台管理页面，不希望被用户搜索到引来不必要的麻烦，也需要用robots设置屏 <br/>网站改版或url重写时原来不符合搜索引擎友好的链接都需要用robots设置屏蔽掉 <br/>相似度太高的页面，不符合搜索引擎的“网站相似度规则”，也可以用robots设置屏蔽掉<br/><br/>以下是我的个人站的robots设置规则,希望能够起到抛砖引玉的作用：<br/><br/>## robots.txt for dikeyao<br/># Version 4.0.0#User-agent: *<br/># Directories<br/>Disallow: /FUNCTION/<br/>Disallow: /CACHE/<br/>Disallow: /XML-RPC/ Disallow: /SCRIPT/<br/>Disallow: /ADMIN/<br/>Disallow: /CSS/<br/>Disallow: /LANGUAGE/<br/>Disallow: /DATA/<br/>Disallow: /THEMES/<br/>Disallow: /INCLUDE/<br/>#Files<br/>Disallow: /wap.asp<br/>Disallow: /cmd.asp<br/>Disallow: /c_option.asp<br/>Disallow: /c_custom.asp<br/>#Sitemap<br/>Sitemap: <br/><br/> # Directories 以下是需要屏蔽的目录<br/>#Files以下是需要屏蔽的文件<br/>#Sitemap　如果网站有sitemap.xml最后还可以加上sitemap语句。<br/>Nrobots设置规则可以参考：google管理员工具robots设置指南<br/>z-blog的用户还可以参考一些行业中比较有名的博客，比如月光博客，方法很简单就是在网址后边有加上robots.txt即可（robots.txt在根目录下），　XXXX.cn/robots.txt&nbsp;&nbsp;，同理查看其它网站robots设置也用此方法。<br/><br/><br/>Tags - <a href="http://www.flyingpig23.com/tags/z-blog/" rel="tag">z-blog</a> , <a href="http://www.flyingpig23.com/tags/%25E4%25BC%2598%25E5%258C%2596/" rel="tag">优化</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/yahoo-site-performance-the-best-experience-of-34-gold-codes/</link>
<title><![CDATA[Yahoo!网站性能最佳体验的34条黄金守则]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Thu, 25 Dec 2008 16:19:28 +0000</pubDate> 
<guid>http://www.flyingpig23.com/yahoo-site-performance-the-best-experience-of-34-gold-codes/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践。他们为此进行了一系列的实验、开发了各种工具、写了大量的文章和博客并在各种会议上参与探讨。最佳实践的核心就是旨在提高网站性能。<br/>Excetional Performance团队总结出了一系列可以提高网站速度的方法。可以分为7大类34条。包括内容、服务器、cookie、CSS、JavaScript、图片、移动应用等七部分。<br/><br/>其中内容部分一共十条建议：<br/><br/>一、内容部分<br/><br/>尽量减少HTTP请求 <br/>减少DNS查找 <br/>避免跳转 <br/>缓存Ajxa <br/>推迟加载 <br/>提前加载 <br/>减少DOM元素数量 <br/>用域名划分页面内容 <br/>使frame数量最少 <br/>避免404错误 <br/><br/>1、尽量减少HTTP请求次数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;终端用户响应的时间中，有80%用于下载各项内容。这部分时间包括下载页面中的图像、样式表、脚本、Flash等。通过减少页面中的元素可以减少HTTP请求的次数。这是提高网页速度的关键步骤。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;减少页面组件的方法其实就是简化页面设计。那么有没有一种方法既能保持页面内容的丰富性又能达到加快响应时间的目的呢？这里有几条减少HTTP请求次数同时又可能保持页面内容丰富的技术。<br/><br/>合并文件是通过把所有的脚本放到一个文件中来减少HTTP请求的方法，如可以简单地把所有的CSS文件都放入一个样式表中。当脚本或者样式表在不同页面中使用时需要做不同的修改，这可能会相对麻烦点，但即便如此也要把这个方法作为改善页面性能的重要一步。<br/><br/>CSS Sprites是减少图像请求的有效方法。把所有的背景图像都放到一个图片文件中，然后通过CSS的background-image和background-position属性来显示图片的不同部分；<br/><br/>图片地图是把多张图片整合到一张图片中。虽然文件的总体大小不会改变，但是可以减少HTTP请求次数。图片地图只有在图片的所有组成部分在页面中是紧挨在一起的时候才能使用，如导航栏。确定图片的坐标和可能会比较繁琐且容易出错，同时使用图片地图导航也不具有可读性，因此不推荐这种方法；<br/><br/>内联图像是使用data:URL scheme的方法把图像数据加载页面中。这可能会增加页面的大小。把内联图像放到样式表（可缓存）中可以减少HTTP请求同时又避免增加页面文件的大小。但是内联图像现在还没有得到主流浏览器的支持。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 减少页面的HTTP请求次数是你首先要做的一步。这是改进首次访问用户等待时间的最重要的方法。如同Tenni Theurer的他的博客Browser Cahe Usage - Exposed!中所说，HTTP请求在无缓存情况下占去了40%到60%的响应时间。让那些初次访问你网站的人获得更加快速的体验吧！<br/><br/>2、减少DNS查找次数<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;域名系统（DNS）提供了域名和IP的对应关系，就像电话本中人名和他们的电话号码的关系一样。当你在浏览器地址栏中输入http://www.flyingpig23.com/时，DNS解析服务器就会返回这个域名对应的IP地址。DNS解析的过程同样也是需要时间的。一般情况下返回给定域名对应的IP地址会花费20到120毫秒的时间。而且在这个过程中浏览器什么都不会做直到DNS查找完毕。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缓存DNS查找可以改善页面性能。这种缓存需要一个特定的缓存服务器，这种服务器一般属于用户的ISP提供商或者本地局域网控制，但是它同样会在用户使用的计算机上产生缓存。DNS信息会保留在操作系统的DNS缓存中（微软Windows系统中DNS Client Service）。大多数浏览器有独立于操作系统以外的自己的缓存。由于浏览器有自己的缓存记录，因此在一次请求中它不会受到操作系统的影响。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Internet Explorer默认情况下对DNS查找记录的缓存时间为30分钟，它在注册表中的键值为DnsCacheTimeout。Firefox对DNS的查找记录缓存时间为1分钟，它在配置文件中的选项为network.dnsCacheExpiration（Fasterfox把这个选项改为了1小时）。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当客户端中的DNS缓存都为空时（浏览器和操作系统都为空），DNS查找的次数和页面中主机名的数量相同。这其中包括页面中URL、图片、脚本文件、样式表、Flash对象等包含的主机名。减少主机名的数量可以减少DNS查找次数。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;减少主机名的数量还可以减少页面中并行下载的数量。减少DNS查找次数可以节省响应时间，但是减少并行下载却会增加响应时间。我的指导原则是把这些页面中的内容分割成至少两部分但不超过四部分。这种结果就是在减少DNS查找次数和保持较高程度并行下载两者之间的权衡了。<br/><br/>3、避免跳转<br/>跳转是使用301和302代码实现的。下面是一个响应代码为301的HTTP头：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP/1.1 301 Moved Permanently<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location: http://flyingpig23.com/newuri<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content-Type: text/html<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览器会把用户指向到Location中指定的URL。头文件中的所有信息在一次跳转中都是必需的，内容部分可以为空。不管他们的名称，301和302响应都不会被缓存除非增加一个额外的头选项，如Expires或者Cache-Control来指定它缓存。&lt;meat /&gt;元素的刷新标签和JavaScript也可以实现URL的跳转，但是如果你必须要跳转的时候，最好的方法就是使用标准的3XXHTTP状态代码，这主要是为了确保“后退”按钮可以正确地使用。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是要记住跳转会降低用户体验。在用户和HTML文档中间增加一个跳转，会拖延页面中所有元素的显示，因为在HTML文件被加载前任何文件（图像、Flash等）都不会被下载。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有一种经常被网页开发者忽略却往往十分浪费响应时间的跳转现象。这种现象发生在当URL本该有斜杠（/）却被忽略掉时。例如，当我们要访问http://astrology.yahoo.com/astrology 时，实际上返回的是一个包含301代码的跳转，它指向的是http://astrology.yahoo.com/astrology/&nbsp;&nbsp;（注意末尾的斜杠）。在Apache服务器中可以使用Alias 或者 mod_rewrite或者the DirectorySlash来避免。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连接新网站和旧网站是跳转功能经常被用到的另一种情况。这种情况下往往要连接网站的不同内容然后根据用户的不同类型（如浏览器类型、用户账号所属类型）来进行跳转。使用跳转来实现两个网站的切换十分简单，需要的代码量也不多。尽管使用这种方法对于开发者来说可以降低复杂程度，但是它同样降低用户体验。一个可替代方法就是如果两者在同一台服务器上时使用Alias和mod_rewrite和实现。如果是因为域名的不同而采用跳转，那么可以通过使用Alias或者mod_rewirte建立CNAME（保存一个域名和另外一个域名之间关系的DNS记录）来替代。<br/><br/>4、可缓存的AJAX<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ajax经常被提及的一个好处就是由于其从后台服务器传输信息的异步性而为用户带来的反馈的即时性。但是，使用Ajax并不能保证用户不会在等待异步的JavaScript和XML响应上花费时间。在很多应用中，用户是否需要等待响应取决于Ajax如何来使用。例如，在一个基于Web的Email客户端中，用户必须等待Ajax返回符合他们条件的邮件查询结果。记住一点，“异步”并不异味着“即时”，这很重要。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了提高性能，优化Ajax响应是很重要的。提高Ajxa性能的措施中最重要的方法就是使响应具有可缓存性，具体的讨论可以查看Add an Expires or a Cache-Control Header。其它的几条规则也同样适用于Ajax：<br/>&nbsp;&nbsp;&nbsp;&nbsp;Gizp压缩文件<br/>&nbsp;&nbsp;&nbsp;&nbsp;减少DNS查找次数<br/>&nbsp;&nbsp;&nbsp;&nbsp;精简JavaScript<br/>&nbsp;&nbsp;&nbsp;&nbsp;避免跳转<br/>&nbsp;&nbsp;&nbsp;&nbsp;配置ETags<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 让我们来看一个例子：一个Web2.0的Email客户端会使用Ajax来自动完成对用户地址薄的下载。如果用户在上次使用过Email web应用程序后没有对地址薄作任何的修改，而且Ajax响应通过Expire或者Cacke-Control头来实现缓存，那么就可以直接从上一次的缓存中读取地址薄了。必须告知浏览器是使用缓存中的地址薄还是发送一个新的请求。这可以通过为读取地址薄的Ajax URL增加一个含有上次编辑时间的时间戳来实现，例如，&amp;t=11900241612等。如果地址薄在上次下载后没有被编辑过，时间戳就不变，则从浏览器的缓存中加载从而减少了一次HTTP请求过程。如果用户修改过地址薄，时间戳就会用来确定新的URL和缓存响应并不匹配，浏览器就会重要请求更新地址薄。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;即使你的Ajxa响应是动态生成的，哪怕它只适用于一个用户，那么它也应该被缓存起来。这样做可以使你的Web2.0应用程序更加快捷。<br/><br/>5、推迟加载内容<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你可以仔细看一下你的网页，问问自己“哪些内容是页面呈现时所必需首先加载的？哪些内容和结构可以稍后再加载？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把整个过程按照onload事件分隔成两部分，JavaScript是一个理想的选择。例如，如果你有用于实现拖放和动画的JavaScript，那么它就以等待稍后加载，因为页面上的拖放元素是在初始化呈现之后才发生的。其它的例如隐藏部分的内容（用户操作之后才显现的内容）和处于折叠部分的图像也可以推迟加载<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工具可以节省你的工作量：YUI Image Loader可以帮你推迟加载折叠部分的图片，YUI Get utility是包含JS和 CSS的便捷方法。比如你可以打开Firebug的Net选项卡看一下Yahoo的首页。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当性能目标和其它网站开发实践一致时就会相得益彰。这种情况下，通过程序提高网站性能的方法告诉我们，在支持JavaScript的情况下，可以先去除用户体验，不过这要保证你的网站在没有JavaScript也可以正常运行。在确定页面运行正常后，再加载脚本来实现如拖放和动画等更加花哨的效果。<br/><br/>6、预加载<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;预加载和后加载看起来似乎恰恰相反，但实际上预加载是为了实现另外一种目标。预加载是在浏览器空闲时请求将来可能会用到的页面内容（如图像、样式表和脚本）。使用这种方法，当用户要访问下一个页面时，页面中的内容大部分已经加载到缓存中了，因此可以大大改善访问速度。<br/><br/>下面提供了几种预加载方法：<br/>无条件加载：触发onload事件时，直接加载额外的页面内容。以Google.com为例，你可以看一下它的spirit image图像是怎样在onload中加载的。这个spirit image图像在google.com主页中是不需要的，但是却可以在搜索结果页面中用到它。<br/>有条件加载：根据用户的操作来有根据地判断用户下面可能去往的页面并相应的预加载页面内容。在search.yahoo.com中你可以看到如何在你输入内容时加载额外的页面内容。<br/>有预期的加载：载入重新设计过的页面时使用预加载。这种情况经常出现在页面经过重新设计后用户抱怨“新的页面看起来很酷，但是却比以前慢”。问题可能出在用户对于你的旧站点建立了完整的缓存，而对于新站点却没有任何缓存内容。因此你可以在访问新站之前就加载一部内容来避免这种结果的出现。在你的旧站中利用浏览器的空余时间加载新站中用到的图像的和脚本来提高访问速度。<br/><br/>7、减少DOM元素数量<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个复杂的页面意味着需要下载更多数据，同时也意味着JavaScript遍历DOM的效率越慢。比如当你增加一个事件句柄时在500和5000个DOM元素中循环效果肯定是不一样的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大量的DOM元素的存在意味着页面中有可以不用移除内容只需要替换元素标签就可以精简的部分。你在页面布局中使用表格了吗？你有没有仅仅为了布局而引入更多的&lt;div&gt;元素呢？也许会存在一个适合或者在语意是更贴切的标签可以供你使用。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YUI CSS utilities可以给你的布局带来巨大帮助：grids.css可以帮你实现整体布局，font.css和reset.css可以帮助你移除浏览器默认格式。它提供了一个重新审视你页面中标签的机会，比如只有在语意上有意义时才使用&lt;div&gt;，而不是因为它具有换行效果才使用它。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOM元素数量很容易计算出来，只需要在Firebug的控制台内输入：<br/>document.getElementsByTagName(&#039;*&#039;).length<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那么多少个DOM元素算是多呢？这可以对照有很好标记使用的类似页面。比如Yahoo!主页是一个内容非常多的页面，但是它只使用了700个元素（HTML标签）。<br/><br/>8、根据域名划分页面内容<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把页面内容划分成若干部分可以使你最大限度地实现平行下载。由于DNS查找带来的影响你首先要确保你使用的域名数量在2个到4个之间。例如，你可以把用到的HTML内容和动态内容放在www.example.org上，而把页面各种组件（图片、脚本、CSS)分别存放在statics1.example.org和statics.example.org上。<br/>你可在Tenni Theurer和Patty Chi合写的文章Maximizing Parallel Downloads in the Carpool Lane找到更多相关信息。<br/><br/>9、使iframe的数量最小<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ifrmae元素可以在父文档中插入一个新的HTML文档。了解iframe的工作理然后才能更加有效地使用它，这一点很重要。<br/>&lt;iframe&gt;优点：<br/><br/>解决加载缓慢的第三方内容如图标和广告等的加载问题 <br/>Security sandbox <br/>并行加载脚本 <br/>&lt;iframe&gt;的缺点：<br/><br/>即时内容为空，加载也需要时间 <br/>会阻止页面加载 <br/>没有语意 <br/><br/>10、不要出现404错误<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP请求时间消耗是很大的，因此使用HTTP请求来获得一个没有用处的响应（例如404没有找到页面）是完全没有必要的，它只会降低用户体验而不会有一点好处。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有些站点把404错误响应页面改为“你是不是要找***”，这虽然改进了用户体验但是同样也会浪费服务器资源（如数据库等）。最糟糕的情况是指向外部JavaScript的链接出现问题并返回404代码。首先，这种加载会破坏并行加载；其次浏览器会把试图在返回的404响应内容中找到可能有用的部分当作JavaScript代码来执行。<br/><br/> <br/><br/>&nbsp;&nbsp;在本系列的第一节中，讲了提高网站性能中网站“内容”有关的10条原则。除了在网站在内容上的改进外，在网站服务器端上也有需要注意和改进的地方，它们包括： <br/><br/>使用内容分发网络 <br/>为文件头指定Expires或Cache-Control <br/>Gzip压缩文件内容 <br/>配置ETag <br/>尽早刷新输出缓冲 <br/>使用GET来完成AJAX请求 <br/><br/>11、使用内容分发网络<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用户与你网站服务器的接近程度会影响响应时间的长短。把你的网站内容分散到多个、处于不同地域位置的服务器上可以加快下载速度。但是首先我们应该做些什么呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;按地域布置网站内容的第一步并不是要尝试重新架构你的网站让他们在分发服务器上正常运行。根据应用的需求来改变网站结构，这可能会包括一些比较复杂的任务，如在服务器间同步Session状态和合并数据库更新等。要想缩短用户和内容服务器的距离，这些架构步骤可能是不可避免的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要记住，在终端用户的响应时间中有80%到90%的响应时间用于下载图像、样式表、脚本、Flash等页面内容。这就是网站性能黄金守则。和重新设计你的应用程序架构这样比较困难的任务相比，首先来分布静态内容会更好一点。这不仅会缩短响应时间，而且对于内容分发网络来说它更容易实现。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内容分发网络（Content Delivery Network，CDN）是由一系列分散到各个不同地理位置上的Web服务器组成的，它提高了网站内容的传输速度。用于向用户传输内容的服务器主要是根据和用户在网络上的靠近程度来指定的。例如，拥有最少网络跳数（network hops）和响应速度最快的服务器会被选定。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一些大型的网络公司拥有自己的CDN，但是使用像Akamai Technologies，Mirror Image Internet， 或者Limelight Networks这样的CDN服务成本却非常高。对于刚刚起步的企业和个人网站来说，可能没有使用CDN的成本预算，但是随着目标用户群的不断扩大和更加全球化，CDN就是实现快速响应所必需的了。以Yahoo来说，他们转移到CDN上的网站程序静态内容节省了终端用户20%以上的响应时间。使用CDN是一个只需要相对简单地修改代码实现显著改善网站访问速度的方法。 <br/><br/>12、为文件头指定Expires或Cache-Control <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这条守则包括两方面的内容：<br/>对于静态内容：设置文件头过期时间Expires的值为“Never expire”（永不过期）<br/>对于动态内容：使用恰当的Cache-Control文件头来帮助浏览器进行有条件的请求<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网页内容设计现在越来越丰富，这就意味着页面中要包含更多的脚本、样式表、图片和Flash。第一次访问你页面的用户就意味着进行多次的HTTP请求，但是通过使用Expires文件头就可以使这样内容具有缓存性。它避免了接下来的页面访问中不必要的HTTP请求。Expires文件头经常用于图像文件，但是应该在所有的内容都使用他，包括脚本、样式表和Flash等。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览器（和代理）使用缓存来减少HTTP请求的大小和次数以加快页面访问速度。Web服务器在HTTP响应中使用Expires文件头来告诉客户端内容需要缓存多长时间。下面这个例子是一个较长时间的Expires文件头，它告诉浏览器这个响应直到2010年4月15日才过期。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expires: Thu, 15 Apr 2010 20:00:00 GMT <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你使用的是Apache服务器，可以使用ExpiresDefault来设定相对当前日期的过期时间。下面这个例子是使用ExpiresDefault来设定请求时间后10年过期的文件头：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExpiresDefault &quot;access plus 10 years&quot; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要切记，如果使用了Expires文件头，当页面内容改变时就必须改变内容的文件名。依Yahoo!来说我们经常使用这样的步骤：在内容的文件名中加上版本号，如yahoo_2.0.6.js。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用Expires文件头只有会在用户已经访问过你的网站后才会起作用。当用户首次访问你的网站时这对减少HTTP请求次数来说是无效的，因为浏览器的缓存是空的。因此这种方法对于你网站性能的改进情况要依据他们“预缓存”存在时对你页面的点击频率（“预缓存”中已经包含了页面中的所有内容）。Yahoo!建立了一套测量方法，我们发现所有的页面浏览量中有75~85%都有“预缓存”。通过使用Expires文件头，增加了缓存在浏览器中内容的数量，并且可以在用户接下来的请求中再次使用这些内容，这甚至都不需要通过用户发送一个字节的请求。 <br/><br/>13、Gzip压缩文件内容<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网络传输中的HTTP请求和应答时间可以通过前端机制得到显著改善。的确，终端用户的带宽、互联网提供者、与对等交换点的靠近程度等都不是网站开发者所能决定的。但是还有其他因素影响着响应时间。通过减小HTTP响应的大小可以节省HTTP响应时间。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从HTTP/1.1开始，web客户端都默认支持HTTP请求中有Accept-Encoding文件头的压缩格式：&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Accept-Encoding: gzip, deflate <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果web服务器在请求的文件头中检测到上面的代码，就会以客户端列出的方式压缩响应内容。Web服务器把压缩方式通过响应文件头中的Content-Encoding来返回给浏览器。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content-Encoding: gzip <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gzip是目前最流行也是最有效的压缩方式。这是由GNU项目开发并通过RFC 1952来标准化的。另外仅有的一个压缩格式是deflate，但是它的使用范围有限效果也稍稍逊色。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gzip大概可以减少70%的响应规模。目前大约有90%通过浏览器传输的互联网交换支持gzip格式。如果你使用的是Apache，gzip模块配置和你的版本有关：Apache 1.3使用mod_zip，而Apache 2.x使用moflate。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;浏览器和代理都会存在这样的问题：浏览器期望收到的和实际接收到的内容会存在不匹配的现象。幸好，这种特殊情况随着旧式浏览器使用量的减少在减少。Apache模块会通过自动添加适当的Vary响应文件头来避免这种状况的出现。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;服务器根据文件类型来选择需要进行gzip压缩的文件，但是这过于限制了可压缩的文件。大多数web服务器会压缩HTML文档。对脚本和样式表进行压缩同样也是值得做的事情，但是很多web服务器都没有这个功能。实际上，压缩任何一个文本类型的响应，包括XML和JSON，都值得的。图像和PDF文件由于已经压缩过了所以不能再进行gzip压缩。如果试图gizp压缩这些文件的话不但会浪费CPU资源还会增加文件的大小。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gzip压缩所有可能的文件类型是减少文件体积增加用户体验的简单方法。 <br/><br/>14、配置ETag <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entity tags（ETags）（实体标签）是web服务器和浏览器用于判断浏览器缓存中的内容和服务器中的原始内容是否匹配的一种机制（“实体”就是所说的“内容”，包括图片、脚本、样式表等）。增加ETag为实体的验证提供了一个比使用“last-modified date（上次编辑时间）”更加灵活的机制。Etag是一个识别内容版本号的唯一字符串。唯一的格式限制就是它必须包含在双引号内。原始服务器通过含有ETag文件头的响应指定页面内容的ETag。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP/1.1 200 OK<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Last-Modified: Tue, 12 Dec 2006 03:03:59 GMT<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ETag: &quot;10c24bc-4ab-457e1c1f&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Content-Length: 12195<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;稍后，如果浏览器要验证一个文件，它会使用If-None-Match文件头来把ETag传回给原始服务器。在这个例子中，如果ETag匹配，就会返回一个304状态码，这就节省了12195字节的响应。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GET /i/yahoo.gif HTTP/1.1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Host: us.yimg.com<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If-Modified-Since: Tue, 12 Dec 2006 03:03:59 GMT<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If-None-Match: &quot;10c24bc-4ab-457e1c1f&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP/1.1 304 Not Modified<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ETag的问题在于，它是根据可以辨别网站所在的服务器的具有唯一性的属性来生成的。当浏览器从一台服务器上获得页面内容后到另外一台服务器上进行验证时ETag就会不匹配，这种情况对于使用服务器组和处理请求的网站来说是非常常见的。默认情况下，Apache和IIS都会把数据嵌入ETag中，这会显著减少多服务器间的文件验证冲突。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Apache 1.3和2.x中的ETag格式为inode-size-timestamp。即使某个文件在不同的服务器上会处于相同的目录下，文件大小、权限、时间戳等都完全相同，但是在不同服务器上他们的内码也是不同的。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IIS 5.0和IIS 6.0处理ETag的机制相似。IIS中的ETag格式为Filetimestamp:ChangeNumber。用ChangeNumber来跟踪IIS配置的改变。网站所用的不同IIS服务器间ChangeNumber也不相同。 不同的服务器上的Apache和IIS即使对于完全相同的内容产生的ETag在也不相同，用户并不会接收到一个小而快的304响应；相反他们会接收一个正常的200响应并下载全部内容。如果你的网站只放在一台服务器上，就不会存在这个问题。但是如果你的网站是架设在多个服务器上，并且使用Apache和IIS产生默认的ETag配置，你的用户获得页面就会相对慢一点，服务器会传输更多的内容，占用更多的带宽，代理也不会有效地缓存你的网站内容。即使你的内容拥有Expires文件头，无论用户什么时候点击“刷新”或者“重载”按钮都会发送相应的GET请求。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你没有使用ETag提供的灵活的验证模式，那么干脆把所有的ETag都去掉会更好。Last-Modified文件头验证是基于内容的时间戳的。去掉ETag文件头会减少响应和下次请求中文件的大小。微软的这篇支持文稿讲述了如何去掉ETag。在Apache中，只需要在配置文件中简单添加下面一行代码就可以了：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileETag none <br/><br/>15、尽早刷新输出缓冲<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当用户请求一个页面时，无论如何都会花费200到500毫秒用于后台组织HTML文件。在这期间，浏览器会一直空闲等待数据返回。在PHP中，你可以使用flush()方法，它允许你把已经编译的好的部分HTML响应文件先发送给浏览器，这时浏览器就会可以下载文件中的内容（脚本等）而后台同时处理剩余的HTML页面。这样做的效果会在后台烦恼或者前台较空闲时更加明显。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出缓冲应用最好的一个地方就是紧跟在&lt;head /&gt;之后，因为HTML的头部分容易生成而且头部往往包含CSS和JavaScript文件，这样浏览器就可以在后台编译剩余HTML的同时并行下载它们。 例子： <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &lt;!-- css, js --&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/head&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php flush(); ?&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;body&nbsp;&nbsp;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &lt;!-- content --&gt;<br/><br/>为了证明使用这项技术的好处，Yahoo!搜索率先研究并完成了用户测试。 <br/><br/>16、使用GET来完成AJAX请求<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yahoo!Mail团队发现，当使用XMLHttpRequest时，浏览器中的POST方法是一个“两步走”的过程：首先发送文件头，然后才发送数据。因此使用GET最为恰当，因为它只需发送一个TCP包（除非你有很多cookie）。IE中URL的最大长度为2K，因此如果你要发送一个超过2K的数据时就不能使用GET了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个有趣的不同就是POST并不像GET那样实际发送数据。根据HTTP规范，GET意味着“获取”数据，因此当你仅仅获取数据时使用GET更加有意义（从语意上讲也是如此），相反，发送并在服务端保存数据时使用POST。<br/><br/><br/><br/> 在第一部分和第二部分中我们分别介绍了改善网站性能中页面内容和服务器的几条守则，除此之外，JavaScript和CSS也是我们页面中经常用到的内容，对它们的优化也提高网站性能的重要方面：<br/>CSS： <br/><br/>把样式表置于顶部 <br/>避免使用CSS表达式（Expression） <br/>使用外部JavaScript和CSS <br/>削减JavaScript和CSS <br/>避免使用滤镜 <br/>JavaScript<br/><br/>把脚本置于页面底部 <br/>使用外部JavaScript和CSS <br/>削减JavaScript和CSS <br/>剔除重复脚本 <br/>减少DOM访问 <br/>开发智能事件处理程序 <br/><br/>17、把样式表置于顶部<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在研究Yahoo!的性能表现时，我们发现把样式表放到文档的&lt;head /&gt;内部似乎会加快页面的下载速度。这是因为把样式表放到&lt;head /&gt;内会使页面有步骤的加载显示。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注重性能的前端服务器往往希望页面有秩序地加载。同时，我们也希望浏览器把已经接收到内容尽可能显示出来。这对于拥有较多内容的页面和网速较慢的用户来说特别重要。向用户返回可视化的反馈，比如进程指针，已经有了较好的研究并形成了正式文档。在我们的研究中HTML页面就是进程指针。当浏览器有序地加载文件头、导航栏、顶部的logo等对于等待页面加载的用户来说都可以作为可视化的反馈。这从整体上改善了用户体验。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把样式表放在文档底部的问题是在包括Internet Explorer在内的很多浏览器中这会中止内容的有序呈现。浏览器中止呈现是为了避免样式改变引起的页面元素重绘。用户不得不面对一个空白页面。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTML规范清楚指出样式表要放包含在页面的&lt;head /&gt;区域内：“和&lt;a /&gt;不同，&lt;link /&gt;只能出现在文档的&lt;head /&gt;区域内，尽管它可以多次使用它”。无论是引起白屏还是出现没有样式化的内容都不值得去尝试。最好的方案就是按照HTML规范在文档&lt;head /&gt;内加载你的样式表。 <br/><br/>18、避免使用CSS表达式（Expression） <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CSS表达式是动态设置CSS属性的强大（但危险）方法。Internet Explorer从第5个版本开始支持CSS表达式。下面的例子中，使用CSS表达式可以实现隔一个小时切换一次背景颜色：<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background-color: expression( (new Date()).getHours()%2 ? &quot;#B8D4FF&quot; : &quot;#F08A00&quot; ); <br/>如上所示，expression中使用了JavaScript表达式。CSS属性根据JavaScript表达式的计算结果来设置。expression方法在其它浏览器中不起作用，因此在跨浏览器的设计中单独针对Internet Explorer设置时会比较有用。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表达式的问题就在于它的计算频率要比我们想象的多。不仅仅是在页面显示和缩放时，就是在页面滚动、乃至移动鼠标时都会要重新计算一次。给CSS表达式增加一个计数器可以跟踪表达式的计算频率。在页面中随便移动鼠标都可以轻松达到10000次以上的计算量。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个减少CSS表达式计算次数的方法就是使用一次性的表达式，它在第一次运行时将结果赋给指定的样式属性，并用这个属性来代替CSS表达式。如果样式属性必须在页面周期内动态地改变，使用事件句柄来代替CSS表达式是一个可行办法。如果必须使用CSS表达式，一定要记住它们要计算成千上万次并且可能会对你页面的性能产生影响。 <br/><br/>19、使用外部JavaScript和CSS <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;很多性能规则都是关于如何处理外部文件的。但是，在你采取这些措施前你可能会问到一个更基本的问题：JavaScript和CSS是应该放在外部文件中呢还是把它们放在页面本身之内呢？<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在实际应用中使用外部文件可以提高页面速度，因为JavaScript和CSS文件都能在浏览器中产生缓存。内置在HTML文档中的JavaScript和CSS则会在每次请求中随HTML文档重新下载。这虽然减少了HTTP请求的次数，却增加了HTML文档的大小。从另一方面来说，如果外部文件中的JavaScript和CSS被浏览器缓存，在没有增加HTTP请求次数的同时可以减少HTML文档的大小。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关键问题是，外部JavaScript和CSS文件缓存的频率和请求HTML文档的次数有关。虽然有一定的难度，但是仍然有一些指标可以一测量它。如果一个会话中用户会浏览你网站中的多个页面，并且这些页面中会重复使用相同的脚本和样式表，缓存外部文件就会带来更大的益处。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;许多网站没有功能建立这些指标。对于这些网站来说，最好的坚决方法就是把JavaScript和CSS作为外部文件引用。比较适合使用内置代码的例外就是网站的主页，如Yahoo!主页和My Yahoo!。主页在一次会话中拥有较少（可能只有一次）的浏览量，你可以发现内置JavaScript和CSS对于终端用户来说会加快响应时 间。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于拥有较大浏览量的首页来说，有一种技术可以平衡内置代码带来的HTTP请求减少与通过使用外部文件进行缓存带来的好处。其中一个就是在首页中内置JavaScript和CSS，但是在页面下载完成后动态下载外部文件，在子页面中使用到这些文件时，它们已经缓存到浏览器了。 <br/><br/>20、削减JavaScript和CSS <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;精简是指从去除代码不必要的字符减少文件大小从而节省下载时间。消减代码时，所有的注释、不需要的空白字符（空格、换行、tab缩进）等都要去掉。在JavaScript中，由于需要下载的文件体积变小了从而节省了响应时间。精简JavaScript中目前用到的最广泛的两个工具是JSMin和YUI Compressor。YUI Compressor还可用于精简CSS。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;混淆是另外一种可用于源代码优化的方法。这种方法要比精简复杂一些并且在混淆的过程更易产生问题。在对美国前10大网站的调查中发现，精简也可以缩小原来代码体积的21%，而混淆可以达到25%。尽管混淆法可以更好地缩减代码，但是对于JavaScript来说精简的风险更小。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除消减外部的脚本和样式表文件外，&lt;script&gt;和&lt;style&gt;代码块也可以并且应该进行消减。即使你用Gzip压缩过脚本和样式表，精简这些文件仍然可以节省5%以上的空间。由于JavaScript和CSS的功能和体积的增加，消减代码将会获得益处。<br/><br/>21、用&lt;link&gt;代替@import<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前面的最佳实现中提到CSS应该放置在顶端以利于有序加载呈现。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在IE中，页面底部@import和使用&lt;link&gt;作用是一样的，因此最好不要使用它。 <br/><br/>22、避免使用滤镜<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE独有属性AlphaImageLoader用于修正7.0以下版本中显示PNG图片的半透明效果。这个滤镜的问题在于浏览器加载图片时它会终止内容的呈现并且冻结浏览器。在每一个元素（不仅仅是图片）它都会运算一次，增加了内存开支，因此它的问题是多方面的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;完全避免使用AlphaImageLoader的最好方法就是使用PNG8格式来代替，这种格式能在IE中很好地工作。如果你确实需要使用AlphaImageLoader，请使用下划线_filter又使之对IE7以上版本的用户无效。 <br/><br/>23、把脚本置于页面底部<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;脚本带来的问题就是它阻止了页面的平行下载。HTTP/1.1 规范建议，浏览器每个主机名的并行下载内容不超过两个。如果你的图片放在多个主机名上，你可以在每个并行下载中同时下载2个以上的文件。但是当下载脚本时，浏览器就不会同时下载其它文件了，即便是主机名不相同。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在某些情况下把脚本移到页面底部可能不太容易。比如说，如果脚本中使用了document.write来插入页面内容，它就不能被往下移动了。这里可能还会有作用域的问题。很多情况下，都会遇到这方面的问题。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个经常用到的替代方法就是使用延迟脚本。DEFER属性表明脚本中没有包含document.write，它告诉浏览器继续显示。不幸的是，Firefox并不支持DEFER属性。在Internet Explorer中，脚本可能会被延迟但效果也不会像我们所期望的那样。如果脚本可以被延迟，那么它就可以移到页面的底部。这会让你的页面加载的快一点。 <br/><br/>24、剔除重复脚本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在同一个页面中重复引用JavaScript文件会影响页面的性能。你可能会认为这种情况并不多见。对于美国前10大网站的调查显示其中有两家存在重复引用脚本的情况。有两种主要因素导致一个脚本被重复引用的奇怪现象发生：团队规模和脚本数量。如果真的存在这种情况，重复脚本会引起不必要的HTTP请求和无用的JavaScript运算，这降低了网站性能。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Internet Explorer中会产生不必要的HTTP请求，而在Firefox却不会。在Internet Explorer中，如果一个脚本被引用两次而且它又不可缓存，它就会在页面加载过程中产生两次HTTP请求。即时脚本可以缓存，当用户重载页面时也会产生额外的HTTP请求。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;除增加额外的HTTP请求外，多次运算脚本也会浪费时间。在Internet Explorer和Firefox中不管脚本是否可缓存，它们都存在重复运算JavaScript的问题。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个避免偶尔发生的两次引用同一脚本的方法是在模板中使用脚本管理模块引用脚本。在HTML页面中使用&lt;script /&gt;标签引用脚本的最常见方法就是： <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script type=&quot;text/javascript&quot; src=&quot;menu_1.0.17.js&quot;&gt;&lt;/script&gt; <br/>在PHP中可以通过创建名为insertScript的方法来替代： <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php insertScript(&quot;menu.js&quot;) ?&gt; <br/>为了防止多次重复引用脚本，这个方法中还应该使用其它机制来处理脚本，如检查所属目录和为脚本文件名中增加版本号以用于Expire文件头等。 <br/><br/>25、减少DOM访问<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用JavaScript访问DOM元素比较慢，因此为了获得更多的应该页面，应该做到：<br/><br/>缓存已经访问过的有关元素 <br/>线下更新完节点之后再将它们添加到文档树中 <br/>避免使用JavaScript来修改页面布局 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有关此方面的更多信息请查看Julien Lecomte在YUI专题中的文章“高性能Ajax应该程序”。<br/><br/>26、开发智能事件处理程序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有时候我们会感觉到页面反应迟钝，这是因为DOM树元素中附加了过多的事件句柄并且些事件句病被频繁地触发。这就是为什么说使用event delegation（事件代理）是一种好方法了。如果你在一个div中有10个按钮，你只需要在div上附加一次事件句柄就可以了，而不用去为每一个按钮增加一个句柄。事件冒泡时你可以捕捉到事件并判断出是哪个事件发出的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你同样也不用为了操作DOM树而等待onload事件的发生。你需要做的就是等待树结构中你要访问的元素出现。你也不用等待所有图像都加载完毕。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你可能会希望用DOMContentLoaded事件来代替onload，但是在所有浏览器都支持它之前你可使用YUI 事件应用程序中的onAvailable方法。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有关此方面的更多信息请查看Julien Lecomte在YUI专题中的文章“高性能Ajax应该程序”。<br/><br/> <br/><br/>我们在前面的几节中分别讲了提高网站性能中内容、服务器、JavaScript和CSS等方面的内容。除此之外，图片和Coockie也是我们网站中几乎不可缺少组成部分，此外随着移动设备的流行，对于移动应用的优化也十分重要。这主要包括：<br/>Coockie: <br/><br/>减小Cookie体积 <br/>对于页面内容使用无coockie域名 <br/>图片：<br/><br/>优化图像 <br/>优化CSS Spirite <br/>不要在HTML中缩放图像 <br/>favicon.ico要小而且可缓存 <br/>移动应用：<br/><br/>保持单个内容小于25K <br/>打包组件成复合文本 <br/><br/>27、减小Cookie体积<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP coockie可以用于权限验证和个性化身份等多种用途。coockie内的有关信息是通过HTTP文件头来在web服务器和浏览器之间进行交流的。因此保持coockie尽可能的小以减少用户的响应时间十分重要。<br/>有关更多信息可以查看Tenni Theurer和Patty Chi的文章“When the Cookie Crumbles”。这们研究中主要包括：<br/><br/>去除不必要的coockie <br/>使coockie体积尽量小以减少对用户响应的影响 <br/>注意在适应级别的域名上设置coockie以便使子域名不受影响 <br/>设置合理的过期时间。较早地Expire时间和不要过早去清除coockie，都会改善用户的响应时间。 <br/>28、对于页面内容使用无coockie域名<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当浏览器在请求中同时请求一张静态的图片和发送coockie时，服务器对于这些coockie不会做任何地使用。因此他们只是因为某些负面因素而创建的网络传输。所有你应该确定对于静态内容的请求是无coockie的请求。创建一个子域名并用他来存放所有静态内容。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你的域名是www.example.org，你可以在static.example.org上存在静态内容。但是，如果你不是在www.example.org上而是在顶级域名example.org设置了coockie，那么所有对于static.example.org的请求都包含coockie。在这种情况下，你可以再重新购买一个新的域名来存在静态内容，并且要保持这个域名是无coockie的。Yahoo!使用的是ymig.com，YouTube使用的是ytimg.com，Amazon使用的是images-anazon.com等等。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用无coockie域名存在静态内容的另外一个好处就是一些代理（服务器）可能会拒绝对coockie的内容请求进行缓存。一个相关的建议就是，如果你想确定应该使用example.org还是www.example.org作为你的一主页，你要考虑到coockie带来的影响。忽略掉www会使你除了把coockie设置到*.example.org（*是泛域名解析，代表了所有子域名）外没有其它选择，因此出于性能方面的考虑最好是使用带有www的子域名并且在它上面设置coockie。<br/><br/>29、优化图像<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设计人员完成对页面的设计之后，不要急于将它们上传到web服务器，这里还需要做几件事：<br/><br/>你可以检查一下你的GIF图片中图像颜色的数量是否和调色板规格一致。 使用imagemagick中下面的命令行很容易检查：<br/>identify -verbose image.gif <br/>如果你发现图片中只用到了4种颜色，而在调色板的中显示的256色的颜色槽，那么这张图片就还有压缩的空间。 <br/>尝试把GIF格式转换成PNG格式，看看是否节省空间。大多数情况下是可以压缩的。由于浏览器支持有限，设计者们往往不太乐意使用PNG格式的图片，不过这都是过去的事情了。现在只有一个问题就是在真彩PNG格式中的alpha通道半透明问题，不过同样的，GIF也不是真彩格式也不支持半透明。因此GIF能做到的，PNG（PNG8）同样也能做到（除了动画）。下面这条简单的命令可以安全地把GIF格式转换为PNG格式：<br/>convert image.gif image.png<br/>“我们要说的是：给PNG一个施展身手的机会吧！” <br/>在所有的PNG图片上运行pngcrush（或者其它PNG优化工具）。例如：<br/>pngcrush image.png -rem alla -reduce -brute result.png <br/>在所有的JPEG图片上运行jpegtran。这个工具可以对图片中的出现的锯齿等做无损操作，同时它还可以用于优化和清除图片中的注释以及其它无用信息（如EXIF信息）：<br/>jpegtran -copy none -optimize -perfect src.jpg dest.jpg <br/>30、优化CSS Spirite<br/><br/>在Spirite中水平排列你的图片，垂直排列会稍稍增加文件大小； <br/>Spirite中把颜色较近的组合在一起可以降低颜色数，理想状况是低于256色以便适用PNG8格式； <br/>便于移动，不要在Spirite的图像中间留有较大空隙。这虽然不大会增加文件大小但对于用户代理来说它需要更少的内存来把图片解压为像素地图。100x100的图片为1万像素，而1000x1000就是100万像素。 <br/><br/>31、不要在HTML中缩放图像<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不要为了在HTML中设置长宽而使用比实际需要大的图片。如果你需要：<br/>&lt;img width=&quot;100&quot; height=&quot;100&quot; src=&quot;mycat.jpg&quot; alt=&quot;My Cat&quot; /&gt;<br/>那么你的图片（mycat.jpg）就应该是100x100像素而不是把一个500x500像素的图片缩小使用。<br/><br/>32、favicon.ico要小而且可缓存<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;favicon.ico是位于服务器根目录下的一个图片文件。它是必定存在的，因为即使你不关心它是否有用，浏览器也会对它发出请求，因此最好不要返回一个404 Not Found的响应。由于是在同一台服务器上，它每被请求一次coockie就会被发送一次。这个图片文件还会影响下载顺序，例如在IE中当你在onload中请求额外的文件时，favicon会在这些额外内容被加载前下载。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因此，为了减少favicon.ico带来的弊端，要做到：<br/><br/>文件尽量地小，最好小于1K <br/>在适当的时候（也就是你不要打算再换favicon.ico的时候，因为更换新文件时不能对它进行重命名）为它设置Expires文件头。你可以很安全地把Expires文件头设置为未来的几个月。你可以通过核对当前favicon.ico的上次编辑时间来作出判断。 <br/>Imagemagick可以帮你创建小巧的favicon。<br/><br/>33、保持单个内容小于25K<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这条限制主要是因为iPhone不能缓存大于25K的文件。注意这里指的是解压缩后的大小。由于单纯gizp压缩可能达不要求，因此精简文件就显得十分重要。<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看更多信息，请参阅Wayne Shea和Tenni Theurer的文件“Performance Research, Part 5: iPhone Cacheability - Making it Stick”。<br/><br/>34、打包组件成复合文本<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把页面内容打包成复合文本就如同带有多附件的Email，它能够使你在一个HTTP请求中取得多个组件（切记：HTTP请求是很奢侈的）。当你使用这条规则时，首先要确定用户代理是否支持（iPhone就不支持）。<br/><br/><br/>Tags - <a href="http://www.flyingpig23.com/tags/%25E7%25BD%2591%25E7%25AB%2599%25E6%2580%25A7%25E8%2583%25BD/" rel="tag">网站性能</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/post/36/</link>
<title><![CDATA[CSS技巧与常识]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Thu, 25 Dec 2008 16:12:37 +0000</pubDate> 
<guid>http://www.flyingpig23.com/post/36/</guid> 
<description>
<![CDATA[ 
	1、不要使用过小的图片做背景平铺。这就是为何很多人都不用 1px 的原因，这才知晓。宽高 1px 的图片平铺出一个宽高 200px 的区域，需要 200*200=40, 000 次，占用资源。 <br/><br/>2、无边框。推荐的写法是 border:none;，哈哈，我一直在用这个。 border:0; 只是定义边框宽度为零，但边框样式、颜色还是会被浏览器解析，占用资源。 <br/><br/>3、慎用 * 通配符。所谓通配符，就是将 CSS 中的所有标签均初始化，不管用的不用的，过时的先进的，一视同仁，这样，大大的占用资源。要有选择的初始化标签。 <br/><br/>4、CSS 的十六进制颜色代码缩写。习惯了缩写及小写，这才知道，原来不是推荐的写法，为的是减少解析所占用的资源。但同时会增加文件体积。孰优孰劣，有待仔细考证。 <br/><br/>5、样式放头上，脚本放脚下。不内嵌，只外链。 <br/>6、坚决不用 CSS 表达式。 <br/>7、使用 引用样式表，而不是通过 @import 导入。 <br/>8、一般来说，PNG 比 GIF 要小，小得多。再者，GIF 中有多少颜色是被浪费的，很值得优化。 <br/>9、千万不要在 HTML 中缩放图片，一者不好看，二者占资源。 <br/>10、正文字体最好用偶数，12px、14px、16px，效果非常好。特例，15px。 <br/>11、block、ul、ol 等上下留出至少一倍行距，左侧至少两倍行距，右侧随意。 <br/>12、段落之间，至少要有一倍行距。 <br/>13、强行指定某些元素的 line-height，正文 1.6 倍于文字大小，标题 1.3 倍。 <br/>14、中文标点用全角。英文夹杂在中文中，左右空格，半角。 <br/>15、中文字体的粗体和斜体，远离较好，利民利己。&nbsp;&nbsp;<br/>Tags - <a href="http://www.flyingpig23.com/tags/css/" rel="tag">css</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/post/35/</link>
<title><![CDATA[网页图片优化建议]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Thu, 25 Dec 2008 16:11:45 +0000</pubDate> 
<guid>http://www.flyingpig23.com/post/35/</guid> 
<description>
<![CDATA[ 
	　　一、对于非动画的GIF更建议使用PNG8因为它同样能做到一样的效果，而且能为你节省10%-30%的文件体积。 <br/>　　二、Photoshop相比起Fireworks，导出同等质量的PNG图片，体积会稍大。而Fireworks虽然做了相应压缩优化，但没有达到最优秀的压缩。 <br/>　　三、我所知的设计软件，对于PNG图片的处理都没做到最优秀的压缩，图片体积还有一定的压缩空间。可以尝试使用下面介绍的”图像优化工具” 做无失真的压缩优化。 <br/>　　四、图片体积及尺寸方面，建议体积保持在100K以内(较为符合国情最佳请求SIZE)，size为800px(最佳尺寸)。(从某权威人事中得知，具体无从考证) <br/><br/>CSS Sprites图片切割术<br/><br/>　　一、CSS Sprites图片顺序合图片由上至下、左至右添加。而background-position一般采用数字组合形式定位，这样能减少维护带来的不必要麻烦。 <br/>　　二、不建议CSS Sprites图片中保持一定的间距，因为文件size增大而增加文件体积。 <br/>　　三、CSS Sprites图片中把颜色较近或相同的组合在一起可以降低颜色数，因为少色数的图片文件体积会相对的小。 <br/>　　四、size相同的CSS Sprites图片中留有较大空隙，某程度上多数情况会增大了体积，所以CSS Sprites的图片不要有空隙。<br/>　　五、在size相同的CSS Sprites图片中，垂直排列的图片会比水平排列的文件体积要大。 <br/>　　六、在CSS Sprites图片中，水平排列的图片会比垂直排列的文件体积要大。<br/>　　七、图片对等合并：应用CSS Sprites图片时，适当地把对等相同的图像合并，以节省空间及减少体积。 <br/>　　八、区分开不需要合并的图像：如当前用户确定只显示一种状态或一个级别时，不必要把其他的级别或状态的图片合并。 <br/>　　九、黄金切割位：在CSS Sprites图片的最右或左边为最灵活动位置最适宜摆放文本前的icon，因此不会受到其它CSS Sprites图片干预，也不需要预留一定的行宽。 <br/><br/>相关的图像优化工具<br/>　　网上流传的优化工具繁多常见的如：<br/>　　ImageMagick、PNGGauntlet、pngcrush、pngrewrite、Optipng、PNGOut等。<br/><br/>Tags - <a href="http://www.flyingpig23.com/tags/%25E5%259B%25BE%25E7%2589%2587%25E4%25BC%2598%25E5%258C%2596/" rel="tag">图片优化</a>
]]>
</description>
</item><item>
<link>http://www.flyingpig23.com/post/34/</link>
<title><![CDATA[去除IE中Img的象素BUG]]></title> 
<author>[?]小猪飞飞 &lt;flyingpig23@sina.com&gt;</author>
<category><![CDATA[某些。资料]]></category>
<pubDate>Mon, 22 Dec 2008 12:30:22 +0000</pubDate> 
<guid>http://www.flyingpig23.com/post/34/</guid> 
<description>
<![CDATA[ 
	速记／／／／／／／／／／／／／／／／／／／<br/>去除IE中Img的象素BUG，给IMG标签加上display:block;<br/>Tags - <a href="http://www.flyingpig23.com/tags/css/" rel="tag">css</a>
]]>
</description>
</item>
</channel>
</rss>