2. Drupal性能

本篇会列举一下与drupal性能相关的提升技巧。

1.遵守代码规范,提高代码质量

放到第一个提醒,因为这个说易行难... 尤其是团队开发时,若没有做code review的研发经理,那最后的结果会很糟糕!代码冗余,代码量越来越多, 执行效率越来越慢...

2.不用区块和区域做内容和布局

3.不用views做前台内容

4.不用form api做前台表单

这三点在之前的文章 Drupal如何实现前后端彻底分离? 涉及到了。

而且这不是只有理论说说而已,qingfan.com 就是这么做的。

5.合理使用内容类型和字段

首先你可能疑惑:什么样的业务数据用内容类型来实现算合理呢?

如果是需要后台管理的内容,比如新闻,页面,商品。像我们的产品里是:机构,项目,任务。这些都是需要内容运营去维护管理的。 那肯定是直接利用内容类型和字段最快速方便了,有views帮我们做管理页面,做查询,批量操作,数据导出等功能,省了N多事!

但是这样做的话,后期肯定还要考虑优化措施,毕竟前台查询节点字段这些数据也不快,尤其是当app接口需要查询的时候,问题就来了!我们采用的过渡方案是:在自定义相应的数据表分别存放这些数据类型,然后用节点的CRUD钩子来同步数据,读取数据时就直接读取自定义的数据表即可。

那反过来说什么业务数据是不适合用的呢?比如:订单。像我们的产品里是:报告,评阅,提问等。这些都是代码自动生成的或者是由前台用户去创建的,当符合这两个特点时,就要考虑自定义数据机构了,因为你根本用不到内容类型的优势嘛!

说完内容类型,再说说其它实体类型,比如分类和用户,尤其是用户,别往里加字段!我建议自己定义一个user_profile来存放额外的用户信息,当然这是针对用户编辑操作页面是定制设计的项目。

6.使用静态变量避免重复查询

请参考官方文档或者看理查的迷你书:Drupal最佳实践:有效地使用静态变量

7.使用缓存api缓存非实时性热点数据

这个感觉不用赘述了,API是:cache_get, cache_set

8.使用cdn

我们用的是cdn模块,然后用的服务商是七牛,配置很简单方便

9.少用第三方模块

舍弃模块流吧!参考这篇文章:

10.少用重API

有些api很重,尽量少用,比如node_load,特别是要加载数个节点时...

哪些api很重:

  • taxonomy_vocabulary_load
  • taxonomy_vocabulary_machine_name_load
  • taxonomy_term_load
  • file_load
  • user_load
  • user_save
  • node_load
  • node_save

尽量按需查询!比如你只要知道节点标题,那就查node表,只需要某个字段信息,那就查那个字段表。

11.少用钩子

钩子的慢,大家都知道,有人说drupal成也钩子败也钩子!钩子滥用会导致速度严重变慢!所以应该尽量避免钩子,但其实这个前提是相关的功能都要定制,否则也绕不开,比如登录注册。

关于登录注册的自定义实现介绍,在本章的后续小节里会介绍下,敬请期待。

本书共8小节。


评论 (0)