探索Typecho --2-- Sae memcache
SAE memcache
SAE的memcache基本继承了php本身的memcached,基于memcached有所优化
Typecho Mostcache 插件
Mostcache插件提供了MySQL的cache和SAE的memcache两种方案,因为路上部署在SAE上面,所以直接使用memcache方案。
使用memcache后,chrome浏览器的函数调用从53000+降低到了5300左右,也就是说只有原来的十分之一,而IE11和firefox则更加明显,直接降低到700-800,即只有原来的1.4%左右。换而言之,使用memcache后,性能提升明显。
使用cache后IE/firefox的函数调用图
究其原因,因为Typecho在设计之初,对数据库进行了充分(过分)的抽象,导致加载页面的时候,会产生过多(复杂)的数据库查询。这就降低了整个网站的效率。
从第一个图片可以看出,在数据库查询是,对mysql_query的查询Inc:104.455ms,Excl:104.455ms,产生了62次调用;对Tyecho_Db_Query::filterColumn的查询Inc:101.316ms,Excl:87.362ms,产生了234次调用,而其对ctype_alnum则有15736次调用。两个大的数据库查询函数调用占到了接近50%(25%+24%)的总执行时间(416.407ms)。从第三个图,也就是采用了cache之后IE访问的函数调用图可以看到:总的执行时间为46.084ms,而且关于数据库查询的时间占用也下降到了<20%。
这再次说明cache是多么的重要!
意外发现
- chrome 对后台的调用比IE和firefox多了7倍(5300/750),而且还调用了两次
- 采用了gzip压缩网站之后,经常会出现ERR_CONTENT_DECODING_FAILED的错误,导致网站加载失败。。