web内容缓存

1.把内容缓存到磁盘上

1).某些框架模板的页面缓存功能,例如smarty,zend framework 缓存等等
这些的缺点是你必须用到这些框架或是模板,这也会带来一些性能的开销。其实也可以自己写个简单的缓存方法。
2)直接将变化不是很频繁的内容静态化,定期更新,静态文件的请求速度和消耗资源都远小于动态。

2 将内容缓存到内存中,缓存到磁盘上,每次读取缓存都会存在磁盘io的开销,所以放在内存中缓存的访问会更快

1)借助php的apc模块,我们可以将任何数据或对象缓存到内存中。与apc类似Xcache也是php的一个缓存扩展。
2)使用apc 或是Xcache是将内容缓存到本机的内存中,因为本机可能还会运行其他程序,所以可能面临内存不足,况且这么做不易扩展
,所以更好的办法是使用专门的缓存服务器例如memcache,就速度而言,这么做没有本机内存快。

2.opcode 缓存
php运行时,php解释器会将源码翻译成中间代码(opcode),利用一些opcode缓存扩展例如apc,Xcache等可将opcode缓存到共享内存中
例如只要 在php.ini中打开opcode cache的开关:
apc.cache_by_default = on opcode可以减少动态内容的处理时间,减少一定的cpu和内存开销,但是系统的性能瓶颈如果不在cpu和内存上
,比如在数据库,这么做的性能提升非常有限。

3.客户端(浏览器)缓存
一般来说web服务器对于静态文件都会在返回的响应头部加上Last_Modified 即最后修改时间,当客户端再次请求时就会在
请求头部加上If-Modified-Since 将这个最后修改时间传送给web服务器,服务器会对比时间如果文件没有被修改,就会直接返回304
标记(不会返回静态文件的内容)告诉浏览器使用客户端缓存。
HTTP/1.1还支持另外一种缓存协商方法,那就是Etag,它采用了一串编码来编辑内容,web服务器可以自由定义Etag的格式。
例如web服务器会在响应头部添加
Etag: "467ae-e44feac344"
浏览器在获得这个标记后在下次的http请求中就会包含
If-None-Match: "467ae-e44feac344"
服务器重新计算这个编码 如果相同就返回304,如果采用最后修改时间来协商有可能导致即使文件内容没有变化也会重新获取,另外一个
如果是负载均衡的情况下,相同内容的文件在不同的服务器上最后修改时间也会不同,Etag就可以避免这个问题。
补充:Apache默认开启Etag,可以使用FileEtag来设置
FileETag none|INode|MTime|Size|All

对于动态内容,web服务器不会在响应头中加上Last_Modified,和Etag 等标记,这个就需要应用程序自己来输出了
例如:
header("Last-Modified: ".gmdate("D,d M Y H:i:s")." GMT");
同时判断是否过期也要程序来判断
if(strtotime($_SERVER["HTTP_IF_MODIFIED_SINECE"]) + 3600 > time()){
   header("HTTP/1.1 304");
   exit;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值