April 13, 2010
[译]Efficient, maintainable CSS
"\u003ch4 id=\"翻译自-russ-weakley-的-efficient-maintainable-css\"\u003e翻译自 \u003ca href=\"http://www.maxdesign.com.au/\"\u003eRuss Weakley\u003c/a\u003e 的 \u003ca href=\"http://www.slideshare.net/maxdesign/efficient-maintainable-css-presentation\"\u003eEfficient, maintainable CSS\u003c/a\u003e\u003c/h4\u003e\n\u003cp\u003e翻译自Russ大师的一篇关于如何书写高效、可维护、组件化的CSS的演示文档。Enjoy~\u003c/p\u003e"
April 13, 2010
深入 CSS 行高
"\u003cp\u003e翻译自 \u003ca href=\"http://www.maxdesign.com.au/\"\u003eRuss Weakley\u003c/a\u003e 的\u003ca href=\"http://www.slideshare.net/maxdesign/line-height\"\u003eLine Height\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e一个简单的, step-by-step 关于 CSS 行高的演示文档, 涵盖行间距, 如何应用各种类型的行高值, 当然还有 inline box 模型介绍, 希望能满足您\n(但实战应用在中文字体或中英文字体混合,以及IE678,XP win7里,行高规则又有所不同,泪流满面)\u003c/p\u003e"
April 13, 2010
mysql中的表分区
"\u003cp\u003e表分区为海量数据的存储提供了一种更有效率的储存方式,可通过分区将表的数据分开存储在不同的磁盘上,提高数据检索和操作的效率。\u003c/p\u003e\n\u003cp\u003e在SQL Server中进行表分区操作,包括三个步骤:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e创建分区函数\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCREATE PARTITION FUNCTION \u003ca href=\"datetime\"\u003eFN_Partition\u003c/a\u003e AS RANGE LEFT FOR VALUES (N’2008-01-01T23:59:59′, N’2009-01-01T23:59:59′, N’2010-01-01T23:59:59′)\u003c/p\u003e\n\u003cp\u003e此分区函数采用时间进行分区,共有4个分区,边界值为括号里的时间值\u003c/p\u003e\n\u003cp\u003e第一个分区为: 时间 第二个分区为: N’2008-01-01T23:59:59′\u0026lt; 时间 第三个分区为: N’2009-01-01T23:59:59′\u0026lt; 时间 第四个分区为: 时间\u0026gt;N’2010-01-01T23:59:59′\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e创建分区方案\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCREATE PARTITION SCHEME [SE_Partition] AS PARTITION [FN_Partition] TO ([xmsddgroup1], …\u003c/p\u003e"
April 13, 2010
web组件分离
"\u003cp\u003e这里Web组件指Web服务器提供的所有基于URL访问的资源,比如动态内容,图片,Javascript脚本,CSS样式表\u003c/p\u003e\n\u003cp\u003e我们可以从以下几个方面来看这些Web组件的差异\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e文件大小\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e文件数量\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e内容更新频率\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e预计并发用户数\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e是否需要脚本解释器\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e是否涉及大量CPU计算\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e是否访问数据库\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e访问数据库的操作主要是读还是写\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e是否包含远程调用(RPC)\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e值得一提的是,即便是同一Web组件,显然也存在特点的差异,比如负责呈现内容的动态网页和负责用户注册的动态网页,可以\u003c/p\u003e\n\u003cp\u003e视为不用的用户组件,再比如由用户上传的大尺寸照片和站点网页的小尺寸修饰图片也存在以上方面的差异,也可以将它们区分对待。\u003c/p\u003e\n\u003cp\u003eweb组件分离的目的是便于采用针对性的方法,使得各种Web组件能够充分利用服务器资源。如何实现web组件分离呢?\u003c/p\u003e\n\u003cp\u003e最常见的做法是拥有不同的域名:\u003c/p\u003e\n\u003cp\u003e如:img.run21.cn\u003c/p\u003e\n\u003cp\u003e存放网页中的图片,指向服务器A\u003c/p\u003e\n\u003cp\u003eupload.run21.cn\u003c/p\u003e\n\u003cp\u003e存放用户上传的照片,指向服务器B\u003c/p\u003e\n\u003cp\u003estatic.run21.cn\u003c/p\u003e\n\u003cp\u003e存放静态化的网页,指向服务器C\u003c/p\u003e\n\u003cp\u003ejs.run21.cn\u003c/p\u003e\n\u003cp\u003e存放javascript …\u003c/p\u003e"
April 13, 2010
如何构建高性能Web站点
"\u003cp\u003e人们评估一个web站点的性能如何,通常先置身于用户的角度,访问该站点的一系列页面,体验等待时间\u003c/p\u003e\n\u003cp\u003e在等待的时间里,大概经历了以下几部分的时间\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e数据在网络上的传输时间\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e站点服务器处理请求并生成回应数据的时间\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e浏览器本地计算和渲染的时间\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e作为web开发人员, 大部份情况下只要从”站点服务器处理请求并生成回应数据的时间”这点去考虑和设计, 尽量的减少在这一过程的时间,针对提高站点性能上的优化大概总结有如下方案.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1. 增加宽带\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2. 减少网页的http请求\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e在不影响美观和功能的情况下,尽量减少图片和脚本\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e将多个图片合并为一个文件,利用CSS背景图片和偏移技术呈现在网页中,避免多个图片的下载\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e合并Javascript或者CSS\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用浏览器端的Cache策略,减少重复下载\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e3.加快服务器脚本运算速度\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e脚本语言编写的程序文件需要通过相应的脚本解释器进行解释后生成中间代码,脚本加速就是在这一过程中减少生成中间代码的时间。对于一些拥有较强商业 支持的脚本语言 ,比如Java和ASP.NET,均有内置的优化方案,如解释器对某个脚本程序第一次解释的时候,将中间代码缓存起 …\u003c/p\u003e"
April 13, 2010
smarty缓存使用技巧
"\u003cp\u003e\u003cstrong\u003e一、使用缓存\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e要开启smarty的缓存,只需将caching设为true,并指定cache_dir即可.\u003c/p\u003e\n\u003cp\u003e使用cache_lefetime指定 缓存生存时间,单位为秒\u003c/p\u003e\n\u003cp\u003e要对相同页面生成多个不同的缓存,在display或fetch中加入第二参数cache_id, 如$smarty-\u0026gt;display(‘index.tpl’,$my_cache_id);此特性可用于对不同的$_GET进行不同的缓存\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e二、清除缓存\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eclear_all_cache();//清除所有缓存\u003c/p\u003e\n\u003cp\u003eclear_cache(‘index.tpl’);// 清除index.tpl的缓存\u003c/p\u003e\n\u003cp\u003eclear_cache(‘index.tpl’,cache_id);//清除指定id的缓存\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e三、使用自定义缓存方式\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e设置cache_handler_func使用自定义的函数处理缓存\u003c/p\u003e\n\u003cp\u003e如:\u003c/p\u003e\n\u003cp\u003e$smarty-\u0026gt;cache_handler_func = “myCache”;\u003c/p\u003e\n\u003cp\u003efunction myCache($action, \u0026amp;$smarty_obj, \u0026amp;$cache_content, $tpl_file=null, …\u003c/p\u003e"
April 12, 2010
mysql 中的触发器语法简介
"\u003cp\u003e\u003cstrong\u003e1. 语法:命名规则\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eCREATE TRIGGER \u0026lt;触发器名称\u0026gt; \u0026lt;–\n{ BEFORE | AFTER }\n{ INSERT | UPDATE | DELETE }\nON \u0026lt;表名称\u0026gt;\nFOR EACH ROW\n\u0026lt;触发器SQL语句\u0026gt;\u003c/p\u003e\n\u003cp\u003e触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.\u003c/p\u003e\n\u003cp\u003e这里我有个习惯:就是用表的名字+’_’+触发器类型的缩写.因此如果是表t26,触发器是在事件UPDATE(参考下面的点(2)和(3))之前 (BEFORE)的,那么它的名字就是t26_bu。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e2. 语法:触发时间\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eCREATE TRIGGER \u0026lt;触发器名称\u0026gt;\n{ BEFORE | AFTER } \u0026lt;–\n{ INSERT | UPDATE | DELETE }\nON \u0026lt;表名称\u0026gt;\nFOR EACH ROW\n\u0026lt;触发的SQL语句\u0026gt;\u003c/p\u003e\n\u003cp\u003e触发器有执行的时间设置:可以设置为事件发生前或后 BEFORE | AFTER 。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e3. 语法:事件\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eCREATE TRIGGER \u0026lt;触发器名 …\u003c/p\u003e"
April 12, 2010
mysql中的存储过程-语法
"\u003cp\u003e\u003cstrong\u003e简介:\u003c/strong\u003e 一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。\u003c/p\u003e\n\u003cp\u003e一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。\u003c/p\u003e\n\u003cp\u003e创建存储 过程:\u003c/p\u003e\n\u003cp\u003e语法:\u003c/p\u003e\n\u003cp\u003eCREATE PROCEDURE p()\u003c/p\u003e\n\u003cp\u003eBEGIN\u003c/p\u003e\n\u003cp\u003e/\u003cem\u003e此存储过程的正文\u003c/em\u003e/\u003c/p\u003e\n\u003cp\u003eEND\u003c/p\u003e\n\u003cp\u003eCREATE PROCEDURE productpricing()\u003c/p\u003e\n\u003cp\u003eBEGIN\u003c/p\u003e\n\u003cp\u003eSELECT Avg(pro_price) AS priceaverage\u003c/p\u003e\n\u003cp\u003eFROMproducts;\u003c/p\u003e\n\u003cp\u003eEND;\u003c/p\u003e\n\u003ch1 id=\"beginend之间是存储过程的主体定义\"\u003ebegin…end之间是存储过程的主体定义\u003c/h1\u003e\n\u003ch1 id=\"mysql的分界符是分号\"\u003emysql的分界符是分号(;)\u003c/h1\u003e\n\u003cp\u003e调用存储 过程的方法是:\u003c/p\u003e\n\u003ch1 id=\"call加上过程名以及一个括号\"\u003eCALL加上过程名以及一个括号\u003c/h1\u003e\n\u003ch1 id=\"例-如调用上面定义的存储过程\"\u003e例 如调用上面定义的存储过程\u003c/h1\u003e\n\u003cp\u003eCALL productpricing();\u003c/p\u003e\n\u003ch1 id=\"哪-怕是不用传递参数存储过程名字后面的括号也是必须的\"\u003e哪 怕是不用传递参数,存储过程名字后面的括号“()”也是必须的\u003c/h1\u003e\n\u003cp\u003e删除存储 过程的方法是:\u003c/p\u003e\n\u003cp\u003eDROP PROCUDURE productpricing;\u003c/p\u003e\n\u003cp\u003e创建带参 数的存储过程:\u003c/p\u003e\n\u003cp\u003eCREATE PROCUDURE productpricing(\u003c/p\u003e\n\u003cp\u003eOUT p1 DECIMAL(8,2),\u003c/p\u003e\n\u003cp\u003eOUT ph DECIMAL(8,2), …\u003c/p\u003e"
April 12, 2010
让虚拟机实现开机自动后台运行
"\u003cp\u003e1.从http://code.google.com/p/apploader/下载AppLoader并安装。\n2.运行AppLoader Configure。\n\u003ca href=\"http://images.cnblogs.com/cnblogs_com/rapidhorse/172985/o_2009-1-16%209-09-35.png\"\u003e\u003cimg src=\"http://images.cnblogs.com/cnblogs_com/rapidhorse/172985/o_2009-1-16%209-09-35.png\" alt=\"点击在新窗口中浏览此图片\"\u003e\u003c/a\u003e\n3.在Application File Name选择C:\\Program Files\\VMware\\VMware Workstation\\vmware.exe。\n4.在Args输入 -x “D:\\VM backup\\Windows XP Professional\\Windows XP Professional.vmx”。(引号内是虚拟文件名,自行修改)。\u003c/p\u003e\n\u003cp\u003e5.保存。\n6.在services中重启RapidHorse Apploader的服务进行测试,以后关机重启时都将启动vmware。其他应用程序也如此处理。\n\u003ca href=\"http://images.cnblogs.com/cnblogs_com/rapidhorse/172985/o_2009-1-16%209-18-01.png\"\u003e\u003cimg src=\"http://images.cnblogs.com/cnblogs_com/rapidhorse/172985/o_2009-1-16%209-18-01.png\" alt=\"点击在新窗口中浏览此图片\"\u003e\u003c/a\u003e\n7.注:vmware启动时会询问一些问题,一般都选择“下次不再出现”,另外为了防止启动时出现更新提示,preferences中的check for updates设置为never。\u003c/p\u003e\n\u003cp\u003e方法2\n第一步\u003c/p\u003e\n\u003cp\u003e首先 打开虚拟机的主窗口 编辑 参数\n同时勾上以下两个选项\n在关闭后在后台运行电源已打开的虚拟机\n虚拟机电源打开时显示托盘图 …\u003c/p\u003e"
April 12, 2010
vmware 后台运行 如何 切换到前台
"\u003cp\u003e来到新公司以后开始使用VMWare Workstation V6。这个新版本允许在有运行中的虚拟机时切换到后台运行,VMWare不再占用任务栏空间,这个平时不会使用的程序窗口也不会被切换出来。如果在菜单 “编辑”-\u0026gt;“参数”-\u0026gt;标签页“工作区间”中选择了“虚拟机电源打开时显示托盘图标”,被切换到后台的VMWare就会在系统托盘里留下一 个图标,可以用它再将VMWare切换到前台。不过我没有看到过这个图标,想来是我的VMWare并没有安装,而是从一个可执行程序中直接运行的。\u003c/p\u003e"
April 7, 2010
为Apache配置mod_deflat压缩输出[已测试]
"\u003cp\u003e1、如果未安装Apache。编译时,加上–enable-deflate,例如:(仅针对Linux版,Windows版无须此步骤)\n./configure –prefix=/usr/local/apache –enable-rewrite –enable-so –enable-deflate\u003c/p\u003e\n\u003cp\u003e2、如果已安装Apache。添加mod_deflate模块,例如:(仅针对Linux版,Windows版无须此步骤)\n/usr/local/apache/bin/apxs -i -a -c /home/zhangyan/software/httpd-2.0.59/modules/filters/mod_deflate.c\n注:/home/zhangyan/software/httpd-2.0.59/为Apache源码路径。\u003c/p\u003e\n\u003cp\u003e3、进行以上步骤后,会在httpd.conf中自动加入一行:(Windows版请将下行最前面的#号去掉)\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eLoadModule deflate_module modules/mod_deflate.so\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e4、 编辑httpd.conf,增加:\nLinux版: …\u003c/p\u003e"
April 7, 2010
YSlow 使用指南_最新2.0使用指南中文版
"\u003cp\u003eYSlow分析网页,并提出如何提高其性能的基础上一套规则,高性能的网页。我搜索一下”Yslow使用说明“,发现都是旧版本Yslow的使用介 绍。于是翻译了一下yahoo官方关于新版Yslow的的使用帮助,希望给初次使用Yslow的朋友一些帮助。\u003c/p\u003e\n\u003cp\u003e注:英文不是很好,对着翻译软件翻译的,有不对的地方,大家指正。\u003c/p\u003e\n\u003ch4 id=\"安装-yslow\"\u003e安装 YSlow\u003c/h4\u003e\n\u003cp\u003e先安装 Firebug \u003ca href=\"https://addons.mozilla.org/en-US/firefox/addon/1843\"\u003ehttps://addons.mozilla.org/en-US/firefox/addon/1843\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFirebug 帮助文档 \u003ca href=\"http://www.getfirebug.com/docs.html\"\u003ehttp://www.getfirebug.com/docs.html\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003e再下载安装 \u003ca href=\"http://developer.yahoo.com/yslow\"\u003ehttp://developer.yahoo.com/yslow\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e使用Yslow\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eYslow是运行在Firebug窗口下,所有要运行Yslow,必须安装Firebug。\u003c/p\u003e\n\u003cp\u003e有两种方法启动Yslow\u003c/p\u003e\n\u003cp\u003e1、打开Firebug窗口,选择Yslow选项。\u003c/p\u003e\n\u003cp\u003e2、直接点击浏览器右下角的Yslow启动按钮。\u003c/p\u003e\n\u003cp\u003e你第一次打开Yslow时,以下图像作为Firebug的一部分被显示在的浏览器窗口。\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/wp-content/uploads/2010/04/yslow_1.png\" title=\"/wp-content/uploads/2010/04/yslow_1.png\"\u003e\u003cimg src=\"/wp-content/uploads/2010/04/yslow_1.png\" alt=\"\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e点击 \u003cstrong\u003eRun Test\u003c/strong\u003e 运行Yslow, …\u003c/p\u003e"
April 7, 2010
Apache 网站访问速度提升优化
"\u003cp\u003e在 [Yahoo][1] \u003cstrong\u003e开 发者\u003c/strong\u003e网站上,Yahoo 提出了 \u003ca href=\"http://developer.yahoo.com/performance/rules.html\"\u003e优 化网站性能的N条规则(Best Practices for Speeding Up Your Web Site)\u003c/a\u003e。这些规则是:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e尽可能的减少 HTTP 的请求数(Minimize HTTP Requests) —— Tag: content\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用 CDN(Use a Content Delivery Network) —— Tag: server\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e添加 Expires 头(或者 Cache-control ) (Add an Expires or a Cache-Control Header) —— Tag: server\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eGzip 组件(Gzip Components) —— Tag: server\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e将 CSS 样式放在页面的上方 (Put Stylesheets at the Top) —— Tag: css\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e将脚本移动到底部(包括内联的)(Put Scripts at the Bottom) —— Tag: javascript\u003c/p\u003e"
April 7, 2010
Apache Cache Last-Modified、Expires和Etag相关工作原理
"\u003cp\u003e\u003ca href=\"http://blog.prosight.me/index.php/2009/08/313\"\u003e使用ETag和Expires调优web 服务器性能\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e正确使用Etag和Expires标识处理,可以使得页面更加有效被Cache。\u003c/p\u003e\n\u003cp\u003e在客户端通过浏览器发出第一次请求某一个URL时,根据 HTTP 协议的规定,浏览器会向服务器传送报头(Http Request Header),服务器端响应同时记录相关属性标记(Http Reponse Header),服务器端的返回状态会是200,格式类似如下:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eHTTP/1.1 200 OK\u003c/p\u003e\n\u003cp\u003eDate: Tue, 03 Mar 2009 04:58:40 GMT\u003c/p\u003e\n\u003cp\u003eContent-Type: image/jpeg\u003c/p\u003e\n\u003cp\u003eContent-Length: 83185\u003c/p\u003e\n\u003cp\u003eLast-Modified: Tue, 24 Feb 2009 08:01:04 GMT\u003c/p\u003e\n\u003cp\u003eCache-Control: max-age=2592000\u003c/p\u003e\n\u003cp\u003eExpires: Thu, 02 Apr 2009 05:14:08 GMT\u003c/p\u003e\n\u003cp\u003eEtag: “5d8c72a5edda8d6a:3239″\u003c/p\u003e\n\u003cp\u003e客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送报头(Http Request …\u003c/p\u003e"
April 7, 2010
apache中对设置网页的Expires头-seo篇
"\u003cp\u003e平时我用一般用Yslow这个ff下的插件来检查网页的好坏,其中有一项为添加文件过期头.\u003c/p\u003e\n\u003cp\u003e实施这一方法将节省你难以置信数额的带宽,极大地加快你的网站为你的网站访客。基本上,对于图片,CSS , JavaScript以及其他文件可以通过优化更快的下载,告诉你的网站访问者快取记忆体,为他们在某一段时间内。默认的行为是每一次请求检查文件的 last-modified 和/或者 Etag headers。\n所以一个用户去/home/index.html,及浏览器缓存所有图象和文件。然后用户离开网站稍后回来,与浏览器发送If-Modified- Since 有条件的GET 请求为每一个缓存的项目时,基本上看,如果文件已被改变和他们必须更新他们的缓存。\u003c/p\u003e\n\u003cp\u003e当你执行在这篇文章中所述的缓存方法,你可以指定某文件或扩展名被缓存为某一特定数额的时间。这些文件然后缓存在你的网站访客和他们不发送If- Modified-Since头直到设置的缓存时间已经到了。\n#================================================= …\u003c/p\u003e"