关于网站生成静态文件有利有弊,通常来讲交互性的站点不太适合静态化,如社交网站,论坛之类的站点等等。如果以资讯内容展示为主,生成静态文件能够很好的提高服务器吞吐量。下面提供两种生成静态文件的方案,分析下其中的利和弊。
1、后台增加生成静态页面功能
优点
这种方案在技术实现上比较简单,就是在后台增加生成静态的功能,例如生成首页、生成列表页、生成内容页面等。很多cms都提供静态文件生成的功能,例如织梦、帝国cms。
用户访问的都是静态页面,服务器负载非常低。
缺点
当网站内容比较少的时候,生成静态页面非常快速。可是当内容成千上万的时候,如果要进行全站更新,就力不从心了。这个是最大的弊端。
必须由管理员去点击生成功能,增加了人工成本。
生成的很多页面都没人访问,浪费磁盘空间。例如文章列表页,一般前几页访问比较多,再后面的几乎都没有人访问。
2、由用户触发生成
这种方案大概是这样:例如有一个文章内容页面/article/1.html,当用户还没有访问的时候这个静态文件是不存在的,只有当用户访问后该静态文件才会生成。这种方案需要使用重写功能,先检测文件是否存在,如果不存在则转发到一个动态的页面,在动态的页面生成该文件。很多框架都提供了这样的功能,如ThinkPHP、zend framework。以下是流程图:
静态文件生成流程图
优点
生成静态页面是由用户触发的,减少了管理员操作。
只生成用户访问的页面,大大减少了硬盘空间的占用。
缺点
涉及到了重写功能、正则表达式,技术实现要求更高。
因为用户第一次访问的时候,是访问动态的文件,所以对动态功能的性能有一定要求。
因为静态文件的生成由用户访问触发,所以静态文件如何更新是个大问题了。比较常见的做法就是定期删除静态文件。
这里附上这种方案的示例代码,运行环境采用apache,放在www根目录下,在浏览器里访问http://localhost/article/1.html就可以看到效果了。点击下载:静态文件生成方案示例代码。
小结
如果技术实力雄厚,建议采用第二种,一劳永逸的办法。如果说站点内容不多,那么采用第一种方案可以节省开发时间,也是一种选择。以后站点发展好了,有了更多资金再考虑换成第二种。
现在随着硬件越来越强悍,内存越来越便宜,几十G都很普遍了,也可以把页面缓存到内存,连磁盘读写都省了。笔者用过64G内存的服务器,缓存的很舒服。