JavaScript ASP VBPHP .NET HTML
返回首页
当前位置: 主页 > 技术资料 > 编程文档 > PHP >

动态?伪静态?还是静态

时间:2009-12-23 16:25来源:未知 作者:admin 点击:
由于项目需要, 明晨网络 Mingchennet.com对LAMP下的动态、伪静态和静态页面做了分析比较,最终决定采用 定时过期的缓存机制来实现 静态化 。在这种方案中,绝大部分页面是静态,少部分是伪静

    由于项目需要,明晨网络Mingchennet.com对LAMP下的动态、伪静态和静态页面做了分析比较,最终决定采用 “定时过期的缓存机制”来实现静态化。在这种方案中,绝大部分页面是静态,少部分是伪静态,极少部分是动态。

   为什么要静态化?1、SEO友好!2、减小服务器开销。  

    哪些页面应该伪静态?tag页面。由于信息每天都在频繁更新,将tag页面全部静态化,开销不小,动态的话,则URL对搜索引擎不够友好,所以将tag.php?kw=php&page=1伪静态成为了tag/php/1.html。

   哪些页面应该保持动态?搜索页面。比如s.php?kw=php。这种搜索页面没有必须静态化。

   好了,现在该谈静态化了。

   刚开始,明晨网络在项目中,是采用缓存来降低服务器压力的。页面第一次被请求时,先从数据库中读取信息,序列化后保存在文件缓存中,以后该页面再被请求,直接从缓存读取并输出到模板,基本做到毫秒级响应,与静态页面差不多了。但是后来通过抓包分析发现,虽然通过URL路由设置(详见《ThinkPHP的Router路由使用体会》http://www.mingchennet.com/plus/view.php?aid=55),可以表现出与静态页面一样的URL,但是并不能真正模拟静态页面

    在哪里与静态页面不同?http header。请求Apache下的静态文件,Response Head中会包含文件的最后修改时间和ETAG,这好说,我们通过PHP脚本同样可以返回这两个head信息。但是,如果客户端第二次请求这个文件,会增加两个HEAD信息If-None-Match和If-Modified-Since,Apache根据这些判断是返回请求的文件信息,还是返回304告诉客户端文件没有更新直接用缓存中的就行了。是的,就是这个304,省去了服务器的CPU、内存和内存开销。并且这几个head应该也是被搜索引擎的蜘蛛广泛使用的。

    那这些信息PHP可以动态处理么?LMAP默认是不可以获取head中的If-None-Match和If-Modified-Since信息,通过配置htaccess可以才得到$_Server['HTTP_IF_NONE_MATCH'],规则如下

RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]

这样可以根据客户请求返回304状态,完美伪装成静态页面,流量是节省下来了,不过还是要牺牲一部分CPU和内存。当然如果有个WEB前端代理服务器,可以将这个页面cache下来,则牺牲这点CPU和内存是值得的。如果没有代理服务器,则最好还是静态化吧,不然访问量一大,服务器性能几何级下降。

    明晨网络在项目中实现静态化,是按访问生成的。比如,客户端访问http://www.a.com/news_123.html,而此时,id为123的新闻系统还没有生成静态页面,所以请求被根据htaccess的规则转交到php文件上,php判断当前url,生成这个静态页。这里给出几个表格概括的对比下静态、伪静态、动态页面的区别。优化的动态/伪静态页主要指使用文件缓存和智能发送304状态。注:数据主要为显示区别,未经严格测试。

  

访问次数 静态页面 按需生成静态页 优化的动态/伪静态页 未优化的动态/伪静态页
第一次请求,http状态码  200  200 200 200
第二次请求,http状态码  304  200 304 200
第三次请求,http状态码  304  304 304 200

访问次数 静态页面 按需生成静态页 优化后的动态/伪静态页 未优化的动态/伪静态页
第一次请求,CPU占用  1  10 10 20
第二次请求,CPU占用  1  1 10 20
第三次请求,CPU占用  1  1 10 20

访问次数 静态页面 按需生成静态页 优化后的动态/伪静态页 未优化的动态/伪静态页
第一次请求,带宽占用  1915  1915 1915 1915
第二次请求,带宽占用  1  1915 1 1915
第三次请求,带宽占用  1  1 1 1915
      

(责任编辑:admin)
顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
推荐内容