国外设计欣赏网站 - DOOOOR.com

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,微信登陆

搜索

[Drupal优化/SEO/环境] Drupal网站优化方法教程

[复制链接]
发表于 2-3-2012 04:46 | 显示全部楼层 |阅读模式
下面是drupal优化的一些经验。分四大部分来讲。2 h+ s8 E9 P( g8 i  Z

; U- d; r& Y9 L7 f第一部分:Drupal系统本身的设置来达到优化! d  ]- x: N  I+ Y& [
第二部分:针对php代码进行的优化
; i, s5 L$ V% k# g8 b+ o第三部分:针对MYSQL数据库进行的优化
+ W8 x# @# n# @/ H第四部分:针对网站架构进行的优化' i  M- S2 a4 c; \( N

# z3 s% k% n& j; o; v1 V% j; L9 c7 b7 v, `; }( \
6 ~9 x4 B% R2 D2 O
第一部分:Drupal系统本身的设置来达到优化) o" c1 ^2 d+ K* E
, X* e& s9 L$ D. ]0 t- I; t+ g2 [
1、 把javascrip代码和.js文件挪到页面的底部。这个方法对于提高页面的访问速度有一定的作用。把js文件放到页面的底部能够使页面先下载图片和文字等等信息,最后才使js文件运行。解决方法:把page.tpl.php(包括所有的page*.tpl.php文件)里的 代码从标签里挪到代码的上方即可。  V1 ~4 q; x2 J% n% A
% A* ]7 H/ \  L0 e
2、javascript文件合并。解决方法:下载javascript_aggregator模块(http://drupal.org/project/javascript_aggregator),这个模块能把所有的.js文件合并成一个.js文件,这样下载的速度会提高一些。注意,这个模块安装的时候与一些模块比如TinyMCE、imce、fckeditor有些冲突,因此,安装了TinyMCE模块的话再安装这个模块需要在admin/settings/performance这个路径下设置。
0 q# f: d. }, Q4 _设置方法如下图所示:6 F, o3 ?; B4 }3 p+ R3 g

( t+ e) i6 B0 f; H5 ~在"exclude from js aggregation",填写出不需要集成到整个.js的js文件的路径。
- J5 V  L0 I& @* q# X从我的使用经验看,javascript_aggregator模块安装以后,会引起一些奇怪的问题,尤其对在线编辑器不好,个人建议,能不用这个模块还是尽量不用。
( c% b: n8 @# s! ]0 ^0 |$ x* `; q' [" |) G
0 O! C5 c$ m' _- P1 |# Z  y
3、页面缓存6 p* U( z, A& `1 K0 b) Z# v: T
Drupal拥有各种内置的方式,它能够通过为匿名用户存储和发送压缩了的缓存页面,来减少数据库的负重。通过启用这一缓存,你可以使用一个单独的数据库查询来高效的读取页面,而不是使用许多查询来获取页面(在没有缓存可用时就使用这种方式)。Drupal的缓存默认是禁用的,它可以在"管理? 站点配置 ? 性能"中配置。
- \  [5 }! i$ E) N
  O2 z% G, f& U/ D3 @4、带宽最优化
) a' _4 @! F, Q( C  ]这是"管理? 站点配置 ? 性能"页面中的另一个性能优化措施,它能够减少发送给服务器的请求次数。通过启用"合并和压缩CSS文件",Drupal将处理由modules创建的CSS文件,压缩它们,并将它们合并成一个文件。这将减少每个页面的HTTP请求数量,以及下载页面的整体大小。
5 A3 e# q! D7 [- u6 n& w
0 Q" P. J/ j" j% O; Z0 `5、调优Sessions表
, D% ~) e: M( sDrupal将用户会话保存到它的数据库中而不是文件中。这意味着Drupal能够很容易的应用到多个服务器上,但是为了管理每个用户的会话信息它也增加了数据库的负担。如果一个站点每天有成千上万个用户,那么很容得就会看到这个sessions表将会极速膨胀。(参考:http://www.5iphp.com/zh-hans/tech/354.html
: C- v4 }5 D4 A& M. @
9 q1 j- G* F# zPHP允许你控制多长时间清除一次旧的会话记录。Drupal将这一配置放到了它的settings.php文件中:
" f3 p% h+ v( T( ]
0 j/ s7 y4 v: u# Xini_set('session.gc_maxlifetime', 200000); // 55小时(in seconds)
% @! p( S; d+ V' T+ q2 P# \+ ^! i  _" Q4 P$ B8 d% Z0 N' I, N
上面的代码表示,PHP的垃圾收集系统运行周期的默认设置为大约两天多。这意味着如果用户两天内没有登录,那么它的会话才会被删除。9 d' j- K6 Z: t; @
如果你的sessions表正在疯长,那么你需要减少PHP的会话存在时间。
8 M- C4 L& S* w/ gini_set('session.gc_maxlifetime', 86400); // 24 hours (in seconds)
  y. P! o  `1 w5 Q( a' i9 Rini_set('session.cache_expire', 1440); // 24 hours (in minutes)8 ?6 L6 P! s) o0 x' e( D& n

/ B/ L# a2 M  b4 s当调整session.gc_maxlifetime时,最好也将session.cache_expire设为相同的值,session.cache_expire用来控制缓存的会话页面的存活周期。注意session.cache_expire的值的单位为分钟。, ~) V8 I# K- w7 d! p- x
1 g3 y4 n- S, B
还有cookie生存周期来也需要相应的减少,系统默认设置是
/ X* [* ^: J! V6 ^9 }5 m) X# J) t. S+ Oini_set('session.cookie_lifetime', 2000000);4 ~; g; B$ d9 j6 u9 r/ N- O; @
// 允许用户保持登录大约3周时间(在此期间会话垃圾收集系统不会将他们的会话记录从sessions表中删除)4 N$ `) i; K2 {3 i

  F/ A3 x, _/ n% K* v* c7 ]7 d改为ini_set('session.cookie_lifetime', 86400); // 24 小时(in seconds)6 V- C4 q$ c, M+ p4 Q+ D6 @
或者改为ini_set('session.cookie_lifetime', 0);//表示用户关闭浏览器,则用户就会登出。
7 U% |3 O- B! S. |8 E) q) S1 c/ W
7 P% v( e6 ?, X" l6、清除错误报告日志" b: v; M6 s: r9 M5 a# ~
Drupal有一个内部的日志系统,位于"管理 ? 日志 ? 最近的日志项",如果他没有被定期地清除,那么它将会快速的膨胀。这一日志存放在watchdog表中。如果你发现watchdog表的大小引起你的站点运行缓慢,你可以通过在"管理?站点配置 ? 错误报告"里调整相关配置来减小它的大小。注意,对该设置的修改将在cron下次运行时生效。不能定期的运行cron会使得watchdog表越来越大,从而为系统增加加大的负担。+ D, L. q* R9 n' q

; L5 S; V9 a/ i5 V( B7、运行cron, Z5 X1 q: B% y" N3 W/ A) P
"管理?日志?状态报告"里有一个"手动运行cron"的选项,你可以手动的运行cron。6 E2 b8 A/ n/ d, j; G( m
如果在一Drupal站点上没有运行cron,那么数据库就会充满日志信息、过期的缓存数据、以及其它的统计数据,这些都是应该从系统中定期清除的。
1 F; K8 |. \# ^0 c* b9 X4 b可以安装poormanscron模块,自动的定期运行cron。
  G3 B( w; V2 s5 Thttp://drupal.org/project/poormanscron
5 ]# d5 [: {. r+ g3 A) b% ~/ x, A; C' G7 C
& T5 w- d* V) f2 D
, @6 ~# \0 b, q- O

9 _+ m( }2 x7 F2 l6 J# Q第二部分:针对php代码进行的优化) l# P/ v0 v% Y1 N$ G9 s; i
0 Y" @3 K  A) f& }. j8 i. M  h
  d1 r" n7 N: r7 h6 e  [
PHP代码的优化措施. T) j# _1 e" @/ C& h$ K
在Drupal中,由于PHP代码执行在处理一个请求中占了一大块,所以我们需要知道采取哪些措施才能加快这一进程。
2 N5 H9 E$ I9 j' e0 x8 B' t4 i有两种方式可以减少执行PHP代码所耗费的资源:
2 l8 K0 e- ^% N0 N$ `第一, 减少代码总量。这个可以通过禁用不必要的Drupal模块和编写高效的代码来实现。
) q1 }: n+ j4 v" P9 X第二, 使用一个PHP操作码(opcode)缓存。; r, b: y( w; p
PHP对于每个请求,都会将所有代码解析并编译成一种中间形态,这种形态里包含了一系列的操作代码。添加一个opcode缓存可以让PHP能够重用前面编译过的代码,这样就会跳过解析和编译。
+ e9 ?. F% F3 F) {3 U  Q! o常见的opcode缓存有三种:Alternative PHP Cache (http://pecl.php.net/package/APC), eAccelerator (http://eaccelerator.net), XCache (http://trac.lighttpd.net/xcache/),。* a7 @6 o. A$ p* B" e
4 D9 S: L6 k2 W& z

- k5 t% i4 k% r3 i' z1 e: l2 C" X9 F: O; S  o
" W5 K5 v* E1 f9 `: I
, o3 J8 @- u. V0 Z0 h1 ~9 [
第三部分:针对MYSQL数据库进行的优化
$ P# i( R( `$ i2 m8 ?1 H) P2 f9 v+ H; u1 J6 V: o

: d, `! M: B( iDrupal需要进行大量的数据库操作,因此有时候数据库可能成为drupal的一个瓶颈。5 ]/ u* r$ t1 x  j

; |7 v* K6 q4 `' t1 a
7 `. q1 B$ d4 M4 ^9 n9 I# t1、 启用MySQL的查询语句缓存。7 j. h* v; L( \. W/ M
MySQL是Drupal最常用的数据库。它具有在内存中缓存常用查询语句的能力,这样一个给定的查询语句再次被调用时,MySQL将立即从缓存中将其返回。5 e- l+ T3 E6 T2 y
Windows下查看MYSQL目录下的my.ini里的query_cache_size选项。- g- ]/ s& a1 Q6 T
默认设置是query_cache_size=77M,可以根据情况适当增加。
5 g8 o# o) l- F3 |5 [
# H3 K0 k# ]% y' n. r( T
( C; X) |+ I) M2、 对于建立的数据库要建立合适的索引,能够提高MYSQL的查询速度。" j) o. g. w& Q- t

8 a/ c  D  w* N- B1 s: m. v" @7 {5 e: A/ ^  r' u
3、 Devel模块识别耗费资源的sql语句。(devel模块的教程:http://www.5iphp.com/zh-hans/tech/63.html. Z4 T8 d  W! N6 Y, g7 l3 w

1 [% G2 [9 C8 L# t8 W% W$ o. h9 k0 G5 K3 v1 m" W
4、 MySQL中启用缓慢查询日志。' c. c5 L9 U1 @/ I! Y' T+ O. E6 q
将超过10秒的查询记录到MySQL数据目录中的日志文件example.com-slow.log中去。你可以修改秒数以及日志的位置,如下面的代码所示,这里我们将缓慢查询的最小值设为5秒:0 T7 m  N$ E8 e6 d$ B" [1 M1 A- v
# The MySQL server3 i; X: `- |( f
[mysqld]
2 C* a. S, P0 [8 h! k# h7 c% ]; Slong_query_time = 5
' `* N/ c- ?+ D1 Hlog-slow-queries = /var/log/mysql/example-slow.log
9 F( l5 n  P1 C, @) }, L: q5 S
, @! F+ G" i9 [# M# N
9 k. ~, B9 E7 \* L5 B# I8 {% d7 ~/ ~: D* s9 D% \" Y. u
9 B( z! I* E0 ~" l. b; V
第四部分:针对网站架构进行的优化
0 V- W( ~6 O2 O& x9 c& x* c
  s& i# G( v/ J7 K5 M6 O, S. K: ^- i% h
. o: _: N" c2 m9 T9 L$ R这部分我是完全参考别人写的资料。因为对于网站架构,应该说更多的是运营人员懂的多。作为开发人员,你可能知道,应该怎么架构,但是具体实施可能还是需要运营人员来做。, @5 f6 {9 @. V/ w+ Q% ~2 R" V

8 w, `3 h: J2 f1、负载均衡
% ]& O8 A- d7 b  {负载均衡器能够将web请求分配到多个web服务器上。在多个web服务器的情况下,当一个web服务器当掉或者维护时,负载均衡器允许web服务继续运行。
% k/ l% F. j7 v. ]' C7 R3 s- d# \4 C- f* k) y; G
2、多媒体服务器
7 M$ B; J5 I, e* W如果有大量的多媒体文件,最好将这些文件存放在一个单独的服务器上。从而减轻你的web服务器的负担使得Drupal能够处理更多的请求。
2 T$ r2 w; ^( \/ _. q- k
! U3 K; ^  Q1 C2 G  c9 S& d4 X0 ]8 x% h! N
3、memcache(内存对象缓存)$ a6 C+ O- G% b- E
这个系统将读写操作都放到内存中进行。Memcache将任意数据都保存在随即存取的内存中,而且能够迅速的从中读取数据。使用这种方式比任何使用磁盘的方式在性能上都要好一些。7 X" u0 }/ S5 l/ r$ u% L6 e

, q( T8 k/ S5 S& F" n
9 `2 ~2 Q3 o4 @/ g+ B# U  s( [0 n2 p0 c, r& A
5 m$ x: C. _$ S6 E

; j4 b8 j7 @9 R5 D8 H1 A转载学习自 http://yanpinquan.blog.163.com/b ... 289201081651347499/7 d) @  T* i3 O9 O
" X6 Z4 Z2 |  `& {
4 c) D/ Q3 J0 r/ ?
8 G/ L% e2 o- S7 P7 v

|2011-2026-版权声明|平台(网站)公约|手机版|手机版|DOOOOR 设计网 ( 吉ICP备2022003869号 )

GMT+8, 11-12-2025 06:49 , Processed in 0.175736 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表