Posts Tagged ‘taxonomy_get_term’

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