You are here

从细节看drupal6性能的提升

g089h515r806 的头像
Submitted by g089h515r806 on 星期二, 2008-11-18 14:29

我要实现的功能是,将论坛的创建表单放到一个区块中,而不是显示在整个页面中.我需要的是node/add/forum这个页面中的表单,也就是把这个页面中的表单放到区块中,或者放到某个节点下面,而不是单独的呈现。

具体一点说,就是希望在一个节点下面增加评论功能,所不同的是,这里的评论不是使用comment,而是使用的forum,也就是要把对节点的评论和论坛整合起来。我遇到一些人,他们都希望实现类似的功能,我的台湾的客户也一样,他希望2者整合到一块,而不是使用系统默认的评论。

       我按照自己的习惯,列出来几个步骤,来实现这个功能。实现nodeapi钩子,在里面写功能代码。很自然的我就想到了使用drupal_get_form();

    把模块写好以后,就报错了.我看了看代码,没有错误啊, drupal_get_form(‘form_id’),没错阿,有错误,很快发现,后面少了一个参数。加上。

“warning: Missing argument 2 for node_form()”

这个错误信息消失了。但是错误还存在。还是报错,好象和前面没有关系。

错误信息如下:

warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback

 

我搜了一下,没有找到有用的信息。是不是这里不能使用drupal_get_form。我换成了drupal_render(),又换成了node_add(),还是不行。同时不断的搜索google.最终发现了答案,其实最开始我就看到了类似的解答。

 

需要加上这样的一句代码:

include_once(drupal_get_path('module', 'node') . '/node.pages.inc');

加上以后果然可以调用了,无论是drupal_get_form,还是node_add,还是drupal_render都不再报错。

我的印象,在drupal5中,是不需要加这样的代码的。直接就可以调用。而且我看到,在drupal.org上,有人遇到了同样的问题。他们也说,在drupal5中,是不报错的,但是在6中为什么需要加上这样的代码呢?

 

这就让我想到了性能,在drupal5中,一下子把所有的东西都加载了,所以可以直接调用。但是在drupal6中,只有在需要的时候才加载相应的代码。也就是说,我这里用到了node.pages.inc中的函数,就需要把这个文件加载进来。这样性能就会有所提高,具体提高多少我不知道。而且,这一趋势,只加载当前需要的文件,将在以后的版本中继续加强。那些抱怨drupal性能的人,可以休息休息了,drupal在功能越来越强的同时,性能也越来越快。

当然,坏处就是给模块开发人员增加了一点点负担,但是熟悉了以后,这点负担也就不算什么了。

相关链接: http://zhupou.cn

论坛:

g089h515r806 的头像

再接再厉,又发了了一篇drupal教程