之前,接到一个其它公司用DRUPAL开源程序制作的吉它网站,网页加载速度超慢,性能有待优化。自接到这个网站后,首先大体上看了一下这个吉它网站,可以说,就是一个简单型的企业网站设计,重中之重是产品介绍,之后是一些公司介绍,博客内容,视频分享和音乐播放等,没有多大的难度。可是,就是这样的一个网站,被那个设计者用DRUPAL设计的如此繁杂,感觉不到有丝毫逻辑。就拿菜单栏来说,DRUPAL就自带了一个菜单模块,可人家偏偏置之不用,而用几个复杂的结构去生成菜单,先在TAXONOMY里创建了不同的产品类别,厂商,和产品状态等,第二步就是创建了一个VIEW,而且是产生一个PAGE显示,之后就是在BLOCK里用views_embed_view这个API去读取该VIEW的内容,最后是在THEME里显示出来。
before improve(menu from views):
Page execution time was 1140.78 ms. Executed 1220 queries in 154.77 milliseconds.
Memory usage: Memory used at: devel_init()=5.61 MB, devel_shutdown()=67.72 MB.
可以看到,加载页面时有1220多个查询,多时甚至达到2500多!就是在BLOCK里嵌入了这个API函数。
<?php views_embed_view($name, $display_id = 'default'); ?>
first improve(menu from block with some drupal apis):
Page execution time was 501.73 ms. Executed 276 queries in 34.27 milliseconds.
Memory usage: Memory used at: devel_init()=5.6 MB, devel_shutdown()=56.66 MB.
第一次优化测试,删除了之前用的views_embed_view这个API函数,可以看到查询次数立即减少了6至10倍。
second improve(menu from block with module function):
Page execution time was 453.3 ms. Executed 124 queries in 21.08 milliseconds.
Memory usage: Memory used at: devel_init()=5.6 MB, devel_shutdown()=54.98 MB.
第二次优化测试,删除了另一个API函数url,这次又少了一半的查询次数。
<?php url($path = NULL, $query = NULL, $fragment = NULL, $absolute = FALSE); ?>
third improve(menu from static block):
Page execution time was 374.81 ms. Executed 124 queries in 18.78 milliseconds.
Memory usage: Memory used at: devel_init()=5.6 MB, devel_shutdown()=54.79 MB.
而这一次,是将所有的BLOCK内容全部换成静态的数据,删除了之前生成搜索的代码。
<div id="search-box"><?php $block = module_invoke('search', 'block', 'view', 0); print $block['content'];?> </div>
最后一次优化的结果测试:
Page execution time was 330.22 ms. Executed 120 queries in 17.53 milliseconds.
Memory usage: Memory used at: devel_init()=5.61 MB, devel_shutdown()=54.77 MB.
然后进行了其它页面的测试,结果也还算平均,基本上达到了性能优化的目的。
通过这一例,个人感觉最好不要在BLOCK里嵌入API函数为妙。