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成也钩子败也钩子!钩子滥用会导致速度严重变慢!所以应该尽量避免钩子,但其实这个前提是相关的功能都要定制,否则也绕不开,比如登录注册。
关于登录注册的自定义实现介绍,在本章的后续小节里会介绍下,敬请期待。