花褪残红青杏小。燕子飞时,绿水人家绕。

小议缓存和静态化暨关于Nobird_Cache缓存插件的一点说明

ZBLOG教程 十五楼的鸟儿 50834浏览 1评论

近期鸟儿博客发布了基于ZBLOGPHP版本的全站缓存插件,可以实现静态化功能。由于有些站长还是新手,甚至是有些人从来没接触过网站,自然要问,缓存是什么? 静态化又是什么? 有何优势?Nobird_Cache插件相比其他缓存插件或静态化插件的优势又在哪里?本文将对此进行一一解答。

一、先来说说规范化的页面地址与SEO

注意区别“规范化的页面地址”与“静态化”。

很多人喜欢拿静态化和SEO说事儿,经常看到网上能够提出“静态化有利于SEO,有利于搜索引擎收录”这样的观点。

这样的观点本身有些“问题”,这些问题想必不是第一个提出人的本意,但是后来却被以讹传讹了。这些问题的主要关键点在于伪静态产生的规范化页面地址,算不算静态化地址?

在早期的搜索引擎当中,由于对于动态页面传值处理的不好,比如 www.abc123.com/index.php?id=1&page=2&act=info 这样的地址中,早期的搜索引擎是无法处理其中的1、2、info传入的参数的,甚至直接抛弃了问号?以后的部分,所以为了投其所好,广大SEOer开始提出了规范化页面地址的需求,将上面的地址规范成类似这样子:www.abc123.com/id_1/page_2/act_info.html。

不可否认,规范化的地址对于搜索引擎的蜘蛛智商要求更低,更容易被抓取。Google曾经发文声明,不建议使用伪静态的地址,建议使用原生的动态地址,这样更有利于Google的蜘蛛理解页面展示的含义(由于众所周知的原因Google无法访问,有兴趣可以自行翻墙查找原文)。但是Google的声明也只能代表其自己的搜索引擎技术水平,不能够代表国内搜索引擎的技术水平。

另一方面,需要知道的是,规范化后的页面地址很多情况下确实变短了,这对于浏览的访客是有利的,毕竟长的地址不好记,复制出去也不好看。


二、伪静态、真静态

在还没有伪静态技术出现之前,更多的程序使用的是静态化文件,比如Z-Blog 1.8 及之前的版本都是一些典型的例子,然而早期的静态化文件不能很好的实时更新信息,静态后的文件存放在主机上不会自动刷新,需要网站管理员定期手动进行批量刷新,也就是很多程序里的所谓“文件重建”的功能,如果不刷新静态化文件,如果对网站的模板进行了修改,文章进行了变更,都会无法实时的更新到页面上给浏览者进行查看,批量重建一次全站的静态化文件是非常耗时的行为,用PHP或者其他页面语言去处理静态化,由于没有真正意义上的多线程,平均速度非常慢,在服务器上一分钟能创建500个静态化文件都是奢望,更何况早期很多站长使用的是虚拟主机,基本上一个稍大的站点,点上重建按钮,站长就可以去睡觉了,第二天早上起来能重建完一个分类就不错。

一切技术,其实都是为了省钱省时间而出现的。

在伪静态技术出现之后,更多的程序采取了伪静态的方式进行规范化页面地址的工作,这样有两个好处,一方面可以节省服务器磁盘空间,大量的静态化文件占用磁盘也是非常惊人的,另一方面减少了站长的工作量,节省了非常多的刷新静态化文件的工作。

然而,随着伪静态技术的搭载,由于不是直接读取静态化文件,而是经过读取数据库,经过PHP处理,再发送页面给用户,导致服务器资源的耗费(CPU、内存)增加,当网站用户访问量比较大的时候,CPU反而成为了瓶颈,这时候,人们又想到了静态化技术,因为静态化后的实体html文件,在用户访问时,仅需要经过web服务器的一次判断,然后把页面内容输出给用户就行了,不需要经过PHP和MySQL的处理,大大的节省了服务器CPU和内存的耗费,节省开支。

三、缓存

缓存其实有非常多的形式,也有非常多的层面,远不止Nobird_Cache插件目前的文件存储缓存这么简单。

通常用户访问一个PHP MySQL类型的网站时,程序处理的“简化”过程是这样的:

用户浏览器 ->PHP->MYSQL 然后 MYSQL->PHP->用户浏览器

为了方便用户理解,将更多更复杂的底层的进行简化,仅保普通用户留看得见摸得着的一些过程,在上述这些过程中,任意一个箭头中的处理结果,进行保存,用于下一次同类型访问不经过深入处理而直接展示给用户的过程,称之为“缓存”。

缓存的目的:

1、将低速存储器上的内容,转入到高速存储器,下一次访问时直接从高速存储器获取。

2、将上一次数据库查询的结果进行存储,下一次不需要查询直接访问。

3、将上一次用户访问的页面进行存储,下一次不需要任何解析,直接给用户(这也是Nobird_Cache缓存插件主要做的事情)。

4、将上一次PHP编译的结果进行存储,下一次不经过编译直接执行。

……更多缓存类型,有兴趣请百度

四、孰优孰劣?

这恐怕不是一句话两句话,哪怕再来一篇本文的篇幅也是无法论证明白的,不同的网站架构,不同的处理形式,不同的服务器配置等都会影响每种技术方案的处理结果。

简单举两个例子:

1、当你服务CPU和内存资源都不是问题的时候,如果有大量的静态化资源并且访问量也非常大的话,这时候你的服务器瓶颈在于硬盘的I/O速度,也就是说假设你硬盘读取速度100MB/s,每个页面有1M大小,100个页面,每秒都有不止一个人去完全刷新,这时候你的硬盘供应不起这么高的读取速度,就会导致服务器性能下降,这时候你需要考虑的是更换更快的固态硬盘SSD,或者采取更快的缓存方式如内存缓存:将缓存的某个中间体存入内存,下一次同类型访问直接从内存读取。

2、如果你的CPU和内存资源中规中矩,服务器优化水平也一般般,这时候稍微大的访问量对你来说可能就CPU爆棚,或者内存占满,这件事儿在很多小型的程序上普遍存在,甚至有些程序你对着单一页面按住F5不放,服务器CPU就可以彪到100%----不是危言耸听,试试自己的?

这时候你需要的是文件缓存,它可以让用户刷新的不再是动态页面,而是静态页面,不经过PHP和MySQL进行处理,大幅度减少CPU和内存的占用

至于更大的访问量,更复杂的服务器关系,需要更复杂的技术,比如:数据库分库,分表,动静分离,CDN,多个服务器均衡负载是大型网站常用的技术,这并不罕见,ZBLOG也有很多CDN类型的插件,比如云存储,这类插件在节省小型网站带宽的同时也节省了服务I/O的开支,只是你的最初目的不在于此罢了。

五、关于Nobird_Cache插件

看了上这一大堆,终于说到这个插件了。

这个插件使用的是文件缓存的形式,配合服务器的mod_rewrite模块等可以实现静态化展示。

刚刚我们也说了,静态文件后主要缺点有几个,一是无法实时进行更新,但是Nobird_Cache插件设计的时候考虑了这一点,可以在很多触发条件下更新对应的文件。

小议缓存和静态化暨关于Nobird Cache缓存插件的一点说明  ZBLOG教程  第1张

当用户选择了合适的触发条件,并且条件被触发时,旧的静态化文件会被删除,以实现实时更新的效果。

在交互性比较强的网站中,静态化的另一个问题是,当用户评论、留言、登录之后,静态化的文件不能实时的展示结果,在Nobird_Cache插件中,提供了两个开关,可以对已经留言或者已经登录的用户直接展示动态页面,毕竟这部分用户在Blog程序中是小部分,影响比较小。

小议缓存和静态化暨关于Nobird Cache缓存插件的一点说明  ZBLOG教程  第2张

在ZBlog中,有些用户使用的不是自适应主题,或者拥有手机站和PC站点两个主题的用户,在Nobird_Cache插件中,针对这部分用户设计了一个功能开关,当打开这个开关后,插件会根据访客身份提供两种不同的缓存文件。

小议缓存和静态化暨关于Nobird Cache缓存插件的一点说明  ZBLOG教程  第3张

有些人使用缓存插件或者静态化插件时,担心不能实时更新,对搜索引擎造成影响,或者有些页面由于访客非常少不需要建立缓存,或者单纯的需要实时输出动态结果,Nobird_Cache设置了两个排除功能开关,可以针对指定访客UA和指定路径不展示缓存或者不缓存。

小议缓存和静态化暨关于Nobird Cache缓存插件的一点说明  ZBLOG教程  第4张




在Nobird_Cache中“静态化模式”与普通缓存的区别在于:

1、静态化模式储存的文件在cache目录中的结构对应正常的页面结构进行存储,文件名统一index.html。缓存模式使用页面URI的MD5值进行存储,扩展名dat(PC端缓存)或者mdat(手机端缓存)

2、静态化模式应对用户访问时通过服务器的mod_rewrite模块,直接将html文件推送给用户。缓存模式应对用户访问时,通过PHP处理页面URI的MD5值,然后经过PHP读取dat或者mdat格式的文件,再传输给用户。

简单的说,Nobird_Cache插件中静态化模式不需要经过PHP处理,而缓存模式需要经过PHP处理。当缓存完成后,二者都不需要查询数据库。

转载请注明:鸟儿博客 » 小议缓存和静态化暨关于Nobird_Cache缓存插件的一点说明

游客
发表我的评论 换个身份
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 访客
    只能献上我的膝盖了....
    天兴工作室 9年前 (2015-09-14)回复