Posts Tagged ‘performance’

最好的wordpress缓存插件:w3 total cache

April 27th, 2010

最近我的bluehost空间经常出现CPU问题,无奈,得考虑用插件了,我这人比较懒,不到必须的时候,我是不会去找解决办法的,但当我认真去找的时候,我必定是想进办法找最好的,特别是性能方面的优化。

1.为什么要找最好的而不找多个结合?WORDPRESS只支持使用单一的CACHE,所以你必须找最好的。

2.先别想插件,你认为最理想的cache应该是什么? 我认为:首先得给匿名用户生成静态页面,然后当此用户发表评论的时候能自动清空该页的静态能重新生成(只是该页),然后其它页面的静态不会影响,仍然是静态的,且静态文件支持gzip或者deflate. 最后就是能给登陆用户做数据库级别的cache . 最后就是不用浪费我时间去修改太多代码就能用.

3.w3 total cache 就是这么好的东西了,装吧,文档详细,功能强大,无敌了.wordpress 遇到性能问题时必装啊

» Read more: 最好的wordpress缓存插件:w3 total cache

Share

.htaccess: performance性能优化,加速网站

April 27th, 2010

最近我的bluehost空间遇到CPU限制了,经常出现throttling,没办法,得做优化提高性能了

记住以上原则:如果不是遇到性能问题,不要浪费时间做优化,一般的优化是有代价的,但使用apache的优化的代价则是非常轻微的,以至于我只发现优点。

在你的站点的.htaccess文件顶增加下面的几行,最好是在最后加吧,不过我实验过,在顶部和底部加没什么区别的。

#下面这一段是告诉浏览器,如果遇到同样的图片或者flash或者html文件,则不要再请求了,取回你本地的缓存吧,别浪费我的服务器资源(so, why not add this line?),事实上如果你可以修改httpd.conf(就是apache的配置文件权)的话,那么直接将这句加在此文件里更好,性能更优(理论上),只是可能相差不大。

<FilesMatch “\.(ico|jpg|jpeg|png|gif|js|css|swf|html|htm|gzip)$”>
ExpiresActive on
ExpiresDefault “access plus 2 hours”
Header set Cache-Control “max-age=1800, public”
FileETag none
</FilesMatch>

#将HTML压缩发送至浏览器(是每次都压缩吗?是的。这样会影响性能吗?会,但速度快了很多。但有一种情况不会,lighthttpd这个服务器的mod_deflate是有cache的,apache没有,很遗憾,如果apache打开了mod_cache的话,那么这个功能就非常好了。但其实增加了速度也是有好处的,速度快了,连接时间就短了,CPU就下降了,所以这个配置不一定适合全部人,要看情况)

#我喜欢我的站一点连接就“闪现”内容的感觉,所以即便浪费些CPU,何况这个浪费简单可以忽略,我喜欢用
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/xml text/css text/plain
AddOutputFilterByType DEFLATE image/svg+xml application/xhtml+xml application/xml
AddOutputFilterByType DEFLATE application/rdf+xml application/rss+xml application/atom+xml
AddOutputFilterByType DEFLATE text/javascript application/javascript application/x-javascript
AddOutputFilterByType DEFLATE application/x-font-ttf application/x-font-otf
AddOutputFilterByType DEFLATE font/truetype font/opentype
</IfModule>

Share

drupal performance:kill taxonomy_get_term and reduce a lot selects

April 25th, 2010

P: The ideas is exactly same of killing drupal_lookup_path and the function is just a little change , so if you want to have a clear explaination , go to http://www.trackself.com/archives/447.html

1.locate modules/taxonomy/taxonomy.module  ,  function  taxonomy_get_term

2.change it to :http://www.trackself.com/code/taxonomy_get_term.txt

there is a Chinese version of this post and should give you a more clear view , sorry for my poor english.

Share

drupal performance:进一步减少数据库查询,减少taxonomy_get_term

April 24th, 2010

上次写drupal_lookup_path,减少drupal数据库查询的时候,说过可以用同样的办法处理高查询的taxonomy_get_term

这个函数在views调用term时经常出现,特别当分类多的时候,这是一个痛苦的重复消耗

详细的说明可以看drupal_lookup_path,减少drupal数据库查询他们的代码几乎是一样的。

1.到modules/taxonomy/taxonomy.module  , 找到function  taxonomy_get_term

2.将整个函数换为http://www.trackself.com/code/taxonomy_get_term.txt

OK, 再次发现,同样的方法hack core后,drupal的性能又快了。从一开始的43次查询降至现在的23次查询,这还是我不想继续下去的原因。

两个方法一起用就是77到23的提升了。

Share

drupal performance:减少drupal_lookup_path,减少drupal数据库查询

April 24th, 2010

0.如果你不需要path模块和pathauto模块,则千万不要安装他们,按我看,以中文标题为主的站压根没必要用pathauto。另外至drupal 6.13为止,核心模块特别是path是安装后不能非常直接的卸载的(有点技巧),虽然在模块管理页面上显示已经删除成功了。所以如果曾经使用过pathauto模块,必然在打开页面的时候出现一堆的drupal_lookup_path的查询,少则30-40个,多则200个。即便 每个的查询只需要小于1ms的时间,但并发数太大了,会直接影响使用的

2.使用drupal内置cache再加上cacherouter模块能在一定程度减少查询,但不能减少drupal_lookup_path。

hack core的原因:

1.减少drupal_lookup_path除了完全卸载path相关的模块外

2.还可以hack core,很多人不喜欢hack core 甚至drupal.org上也不建议这样做,但是于我来说,drupal只是个工具,我想让工具按我的想法去做,而不是我按工具的设计思路去做,所以我喜欢hack core

3.另外则是,drupal升级一个小版本,至少是两个月的事,甚至越到后面越慢,为什么不hack core呢。

4.hack core只需要几行代码,而要达到同样的不hack core的效果,要GOOGLE半天也不一定有解决办法。

我的站http://feedme.trackself.com使用了cck+views+panels,非注册用户我直接使用静态的,但注册用户登陆后居然每个页面都至少进行73次数据库查询!其中有30个是drupal_lookup_path

下面结束废话,开始我的解决办法:

___________________________________________

1.粗略查看一下这个函数:http://api.drupal.org/api/function/drupal_lookup_path/6

2.GOOGLE一下有没有别人做过类似的事,居然还真有.这里有个hack core 的技巧,在drupal上,hack core都叫patch , 所以:google drupal_lookup_path  patch ,第一个记录就是解决办法:http://drupal.org/node/192448 ,但这个方法仍然不是很好,它只是用了static的方法,减少重复而已,而且每次页面重新打开的时候,又重新做同样的事了,效率不高。

3.粗略参考一下高手是怎么为drupal 写cache的:http://www.lullabot.com/articles/a_beginners_guide_to_caching_data , 很简单麻,就是static基础上增加cache_set存入数据库。所以我的思路也是这样了(一开始我自己想的是用文件存起来,结果发现读一行的数据库要比打开一个文件快100倍,而且编程更简单)

4.直接打开include/path.inc文件,找到这行

$alias = db_result(db_query(.....", $path, $path_language));

换为:
http://www.trackself.com/code/drupal_get_path.txt
OK, 结果就是从73个查询一下子变为43个了,而且消耗的内存居然少了(不明原因)。

同样的做法,发现了taxonomy_get_term这个家伙也是特别耗查询,居然也有30来个(我的站有好几十个分类),你不用path总不能不用分类吧。

http://api.drupal.org/api/function/taxonomy_get_term/6

于是我用类似的方法也改了taxonomy_get_term,结果现在的查询只余下23个了,还能继续减下去的,只是好像已经没必要了。

Share
1 2 »