drupal优化全攻略
下面是drupal优化的一些经验。分四大部分来讲。
第一部分:Drupal系统本身的设置来达到优化
第二部分:针对php代码进行的优化
第三部分:针对MYSQL数据库进行的优化
第四部分:针对网站架构进行的优化
第一部分:Drupal系统本身的设置来达到优化
1、 把javascrip代码和.js文件挪到页面的底部。这个方法对于提高页面的访问速度有一定的作用。把js文件放到页面的底部能够使页面先下载图片和文字等等信息,最后才使js文件运行。解决方法:把page.tpl.php(包括所有的page*.tpl.php文件)里的 代码从标签里挪到代码的上方即可。
2、javascript文件合并。解决方法:下载javascript_aggregator模块(http://drupal.org/project/javascript_aggregator),这个模块能把所有的.js文件合并成一个.js文件,这样下载的速度会提高一些。注意,这个模块安装的时候与一些模块比如TinyMCE、imce、fckeditor有些冲突,因此,安装了TinyMCE模块的话再安装这个模块需要在admin/settings/performance这个路径下设置。
设置方法如下图所示:
在"exclude from js aggregation",填写出不需要集成到整个.js的js文件的路径。
从我的使用经验看,javascript_aggregator模块安装以后,会引起一些奇怪的问题,尤其对在线编辑器不好,个人建议,能不用这个模块还是尽量不用。
3、页面缓存
Drupal拥有各种内置的方式,它能够通过为匿名用户存储和发送压缩了的缓存页面,来减少数据库的负重。通过启用这一缓存,你可以使用一个单独的数据库查询来高效的读取页面,而不是使用许多查询来获取页面(在没有缓存可用时就使用这种方式)。Drupal的缓存默认是禁用的,它可以在"管理? 站点配置 ? 性能"中配置。
4、带宽最优化
这是"管理? 站点配置 ? 性能"页面中的另一个性能优化措施,它能够减少发送给服务器的请求次数。通过启用"合并和压缩CSS文件",Drupal将处理由modules创建的CSS文件,压缩它们,并将它们合并成一个文件。这将减少每个页面的HTTP请求数量,以及下载页面的整体大小。
5、调优Sessions表
Drupal将用户会话保存到它的数据库中而不是文件中。这意味着Drupal能够很容易的应用到多个服务器上,但是为了管理每个用户的会话信息它也增加了数据库的负担。如果一个站点每天有成千上万个用户,那么很容得就会看到这个sessions表将会极速膨胀。(参考:http://www.5iphp.com/zh-hans/tech/354.html)
PHP允许你控制多长时间清除一次旧的会话记录。Drupal将这一配置放到了它的settings.php文件中:
ini_set('session.gc_maxlifetime', 200000); // 55小时(in seconds)
上面的代码表示,PHP的垃圾收集系统运行周期的默认设置为大约两天多。这意味着如果用户两天内没有登录,那么它的会话才会被删除。
如果你的sessions表正在疯长,那么你需要减少PHP的会话存在时间。
ini_set('session.gc_maxlifetime', 86400); // 24 hours (in seconds)
ini_set('session.cache_expire', 1440); // 24 hours (in minutes)
当调整session.gc_maxlifetime时,最好也将session.cache_expire设为相同的值,session.cache_expire用来控制缓存的会话页面的存活周期。注意session.cache_expire的值的单位为分钟。
还有cookie生存周期来也需要相应的减少,系统默认设置是
ini_set('session.cookie_lifetime', 2000000);
// 允许用户保持登录大约3周时间(在此期间会话垃圾收集系统不会将他们的会话记录从sessions表中删除)
改为ini_set('session.cookie_lifetime', 86400); // 24 小时(in seconds)
或者改为ini_set('session.cookie_lifetime', 0);//表示用户关闭浏览器,则用户就会登出。
6、清除错误报告日志
Drupal有一个内部的日志系统,位于"管理 ? 日志 ? 最近的日志项",如果他没有被定期地清除,那么它将会快速的膨胀。这一日志存放在watchdog表中。如果你发现watchdog表的大小引起你的站点运行缓慢,你可以通过在"管理?站点配置 ? 错误报告"里调整相关配置来减小它的大小。注意,对该设置的修改将在cron下次运行时生效。不能定期的运行cron会使得watchdog表越来越大,从而为系统增加加大的负担。
7、运行cron
"管理?日志?状态报告"里有一个"手动运行cron"的选项,你可以手动的运行cron。
如果在一Drupal站点上没有运行cron,那么数据库就会充满日志信息、过期的缓存数据、以及其它的统计数据,这些都是应该从系统中定期清除的。
可以安装poormanscron模块,自动的定期运行cron。
(http://drupal.org/project/poormanscron)
第二部分:针对php代码进行的优化
PHP代码的优化措施
在Drupal中,由于PHP代码执行在处理一个请求中占了一大块,所以我们需要知道采取哪些措施才能加快这一进程。
有两种方式可以减少执行PHP代码所耗费的资源:
第一, 减少代码总量。这个可以通过禁用不必要的Drupal模块和编写高效的代码来实现。
第二, 使用一个PHP操作码(opcode)缓存。
PHP对于每个请求,都会将所有代码解析并编译成一种中间形态,这种形态里包含了一系列的操作代码。添加一个opcode缓存可以让PHP能够重用前面编译过的代码,这样就会跳过解析和编译。
常见的opcode缓存有三种:Alternative PHP Cache (http://pecl.php.net/package/APC), eAccelerator
(http://eaccelerator.net), XCache (http://trac.lighttpd.net/xcache/),。
第三部分:针对MYSQL数据库进行的优化
Drupal需要进行大量的数据库操作,因此有时候数据库可能成为drupal的一个瓶颈。
1、 启用MySQL的查询语句缓存。
MySQL是Drupal最常用的数据库。它具有在内存中缓存常用查询语句的能力,这样一个给定的查询语句再次被调用时,MySQL将立即从缓存中将其返回。
Windows下查看MYSQL目录下的my.ini里的query_cache_size选项。
默认设置是query_cache_size=77M,可以根据情况适当增加。
2、 对于建立的数据库要建立合适的索引,能够提高MYSQL的查询速度。
3、 Devel模块识别耗费资源的sql语句。(devel模块的教程:http://www.5iphp.com/zh-hans/tech/63.html)
4、 MySQL中启用缓慢查询日志。
将超过10秒的查询记录到MySQL数据目录中的日志文件example.com-slow.log中去。你可以修改秒数以及日志的位置,如下面的代码所示,这里我们将缓慢查询的最小值设为5秒:
# The MySQL server
[mysqld]
long_query_time = 5
log-slow-queries = /var/log/mysql/example-slow.log
第四部分:针对网站架构进行的优化
这部分我是完全参考别人写的资料。因为对于网站架构,应该说更多的是运营人员懂的多。作为开发人员,你可能知道,应该怎么架构,但是具体实施可能还是需要运营人员来做。
1、负载均衡
负载均衡器能够将web请求分配到多个web服务器上。在多个web服务器的情况下,当一个web服务器当掉或者维护时,负载均衡器允许web服务继续运行。
2、多媒体服务器
如果有大量的多媒体文件,最好将这些文件存放在一个单独的服务器上。从而减轻你的web服务器的负担使得Drupal能够处理更多的请求。
3、memcache(内存对象缓存)
这个系统将读写操作都放到内存中进行。Memcache将任意数据都保存在随即存取的内存中,而且能够迅速的从中读取数据。使用这种方式比任何使用磁盘的方式在性能上都要好一些。
drupal优化全攻略的更多相关文章
- MyEclipse优化全攻略
(0) 吐槽 Eclipse仅仅是个半成品有木有?什么都须要自己安装插件,新手非常难用有木有? 安装上插件以后了版本号兼容和各种问题烦死人有木有? 都怪碎片和版本号乱公布有木有? IntelliJ I ...
- 【ZZ】MySQL 索引优化全攻略 | 菜鸟教程
MySQL 索引优化全攻略 http://www.runoob.com/w3cnote/mysql-index.html
- MySQL 索引优化全攻略
所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找.而用的最多,并且是mysql默认的就是二叉树算法 BTREE, ...
- Web前端性能优化全攻略
网页制作poluoluo文章简介:Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多网站无情忽视的技术. Web 前端性能优化是个大话题,是个值得运维人员持续跟踪的话题,是被很多 ...
- Web前端性能优化全攻略[转载]
1. 尽量减少 HTTP 请求 (Make Fewer HTTP Requests) 作为第一条,可能也是最重要的一条.根据 Yahoo! 研究团队的数据分析,有很大一部分用户访问会因为这一条而取得最 ...
- 转 【推荐】 RAC 性能优化全攻略与经典案例剖析
https://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650277038&idx=1&sn=05cce57a1d253c ...
- 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法
若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...
- 从小工到专家 ——读《Java程序员职场全攻略》有感
从小工到专家 ——读<Java程序员职场全攻略>有感 <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...
- Moon.Orm3.8技术全攻略
Moon.ORM技术全攻略 一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...
随机推荐
- nginx实现防盗链配置方法介绍
有些朋友觉得防盗链就是防止图片,其实有很多东西要进行防盗链了,下面我来介绍在nginx中实现防盗链配置方法有对图片防盗链与下载资源等. 防盗链配置 假设网站域名是 www.php100.com. 编辑 ...
- centos7 查看启动ntp服务命令
标签(空格分隔): centos7 系统 1. 查看ntp服务命令: [root@node1 ~]# systemctl status ntpd * ntpd.service - Network Ti ...
- Python函数式编程(把函数作为参数传入)
map:接受两个参数(函数,Iterable),map将传入的函数依次作用于Iterable的每个元素,并且返回新的Iterable def f(x): return x*x r = map(f,[1 ...
- SharePoint Project Server List 列表CURD操作使用rest api接口
//#region 界面交互代码 var issuesUtils = issuesUtils || {}; (function () { /** * 点击问题提处理方案按钮事件 */ issuesUt ...
- jsp 路径问题
<script type="text/javascript" src="<%=ApplicationContextUtil.getBasePath(r ...
- 树莓派 Learning 002 装机后的必要操作 --- 04 添加软件源 之 添加公钥 --- 解决“由于没有公钥,无法验证下列签名”问题
树莓派 装机后的必要操作 - 添加软件源 解决 添加公钥 时会遇到的问题 当你添加完Debian的软件源后,在终端中执行sudo apt-get update时,会出现下面的错误:(这里我添加了3个软 ...
- Leetcode:206. Reverse Linked List
这题直接ac掉 class Solution { public ListNode reverseList(ListNode head) { ListNode prev = null; while(he ...
- 15.Nginx 解析漏洞复现
Nginx 解析漏洞复现 Nginx解析漏洞复现. 版本信息: Nginx 1.x 最新版 PHP 7.x最新版 由此可知,该漏洞与Nginx.php版本无关,属于用户配置不当造成的解析漏洞. 使用d ...
- 7.21实习培训日志-JDBC JSP Servlet
JDBC JSP Servlet 总结 今天早上的考试主要考Java的网络,HttpClient的get,post方法,Socket的文件传输和Xml和Json文件的解析,对于HttpCLient很简 ...
- rxjs入门6之合并数据流
一 concat,merge,zip,combineLatest等合并类操作符 以上操作符在版本6中已经只存在静态方法,不能在pipe中使用. import {concat,merge,zip,com ...