为了达到高性能web的访问的效果 ,最有效的方法就是网站的静态化了,生成html访问。比如,做一个cms,有一些地方大家是怎么解决的呀?
+ 分类列表页生成机制?
是后台定成生成,还是有新文章的时候,就生成分类列表页?还是不生成?
+ 文章页面
文章页面,有几个动态的问题,比如,阅读次数,评论,对于这些静态中常变的部分,采用什么机制呢?
为了达到高性能web的访问的效果 ,最有效的方法就是网站的静态化了,生成html访问。比如,做一个cms,有一些地方大家是怎么解决的呀?
+ 分类列表页生成机制?
是后台定成生成,还是有新文章的时候,就生成分类列表页?还是不生成?
+ 文章页面
文章页面,有几个动态的问题,比如,阅读次数,评论,对于这些静态中常变的部分,采用什么机制呢?
10 回答11.1k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
我个人认为,网站静态化,并不一定非要靠写代码实现整站 HTML 的生成,有些工具能提供非常好的缓存机制。在 Web 开发中,最关键的瓶颈往往在于数据库,减少数据库的读写压力,就是缓存的主要作用。
在可以提供缓存功能的工具中,应用层的可以用
Memcache
和Redis
,前端缓存可以用Varnish
和Nginx
的提供的缓存功能,当然还要合理利用 304 状态码。以
Memcache
和Redis
为例,它们的作用是让你能够把数据库的数据保存在内存或者是磁盘文件上,这样每次请求过来你仍然可以通过程序来控制业务逻辑,但是极大地减少了数据库的访问,性能自然提升。而对于
Varnish
和Nginx
这样具有反向代理功能的工具来说,它们的作用就是将第一次动态请求的页面缓存起来,在过期时间内,接下来的请求返回的都是缓存里的数据,不再向后端服务器发起请求。而对于你后面的问题,阅读次数,评论这些静态中常变的部分,使用不同工具的情况下也有不同的解决方法。
文章的阅读次数 —— 使用应用层缓存的情况下,可以先把阅读次数写入到缓存中,在后台写个脚本定期从缓存中读出来写入到数据库里。使用前端缓存的情况,可以用 Ajax 异步调用把阅读次数写入到数据库中,如果写压力大的话,就像使用应用层缓存一样,先写入缓存,再写脚本定期读。
评论 —— 同学你知道有两个东西叫
Disqus
和多问
吗?如果你要手动管理评论的话,使用应用层缓存的情况下,就像平常一样读写即可,只需要做好缓存管理;如果用前端缓存的话,以Varnish
为例,读的时候可以用 ESI Tag 这个特性,就像 Apache 的 SSI 一样,写评论的话,还是要用 Ajax 来异步写入,当然,你得在Varnish
里设置不缓存 POST 提交。欢迎深入讨论。