欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

DRUPAL 慢的原因

shiping1 的头像

DRUPAL 慢的原因

主标签

更多2

不止一次听人抱怨DRUPAL 慢,在本地开发环境尤为常见,较为常见的原因有:~

本地环境造成慢的原因,最常见的是由update manager  造成的,如果你发现你开的DRUPAL 页面 一直在等待响应,一般都是它造成的,其实根源在于国内网络因为你知我知的原因,访问国外网站常不稳定,而update manager不断在后台检查更新,遇到网络问题的时候就卡住,影响网页本身的加载速度。在模块列表那里禁用update manager 即可。

第二个慢的原因是,toolbar ,就是管理工具条,有时候这个东西的ajax 加载很慢导致网页变慢。在模块列表那里禁用即可。

第三个慢的原因是,php.ini 中的memory_limit  设置太少,一般默认设置大小为32M。当你装很多模块的时候,就会慢,特别是在后台的时候尤为常见(比如区块列表页,模块列表页),且最常见的症状就是白屏。建议这个最少放200M。

说实在的,如果不用PHP 缓存的话,DRUPAL 还是很慢的,不太强的服务器,(用iwebtool 测试)4-6秒的执行时间都可能,但是一般独立服务器或者VPS装了php 缓存 插件,比如apc,xcache 之类都能得到极显著的提升。如果配合fastcgi 就更爽了(一般内存少的VPS 就不要装fastcgi了,国外的共享空间则默认开fastcgi的。笔者的服务器nginx+fastcgi+apc+drupal 自带的缓存,一般的文章页面用iwebtool 测试都不超过0.5秒)。所以自己装的环境还是要装个php 缓存插件,推荐apc,简单高效且DRUPAL 社区有APC 模块可以实现更细的优化。( 一般国外买的共享空间都已经装有相应的php 缓存插件了的)。

在线测量网站执行速度的工具 :http://www.iwebtool.com/speed_test

Drupal 版本: 

最近Drupal中国群里也经常会说Drupal很慢的问题,月亮的这篇分享很实用,希望能有更多的文章分享给大家!谢谢

我的vps内存不到200M,开的lnmp + zend optimizer,跑的速度不错。

好文章!

收藏

drupal7

其实,一点也没有讲到drupal慢的核心问题,现在的启动,加上apc,xcache 之类能达到0.2左右,前提是不装什么模。它启动的时间就挺长的。真正提速应分析里面的函数,从那里进行优化。

言域有研究更深入一些的吗,不妨分享一下!
来自 http://drupalchina.cn/node/1860



让drupal飞起来的性能总结——开发完博济站后的小总结

January 21st, 2011 by 黎 浩江Leave a reply »

drupal的确很强大,不过新手总是因为drupal慢而找不到很好的解决办法而却步了。

这里写下一些你不能在网上找到的,特别是数据库优化部分——数据库结构建立才能从根本上让你的drupal站快起来。

下面适合drupal5~7.

http://www.bojistudio.org是一个内网的电影站,大约有30000部电影+电视等,还有100000条新闻,字段大约有几十个,还有些计数统计什么的,主要的数据分布在8个表中。访问量大约是100~2000个用户每分(IP是内网的,没说出来的价值),它的页面有点像www.verycd.com,事实上,开发的时候美工就是按verycd来做的

访问量大约是http://bbs.bojistudio.org(外网的论坛)的10倍吧。

 

1.最优的架构是:linux+apache(或ngnix)+MYSQL+PHP+EACC(加速器):一开始我用的是WINDOWS的架构,结果发现装了加速器后双CPU四核的机器很快CPU就爆了。改用linux后load ava一般在2以下。如果你想用drupal做大访问量的站,别考虑太多了,不要用windows,用linux吧。经验之谈:linux不用加速器也比win下用加速器要快,无论是win+iis还是win+apache(或ngnix)。你也许会不信,然后在网上浪费一堆时间看一些对比linux和windows的文章(我也这么干过)。

2.我的站是使用了boost这个模块的,静态生成,太必须了。不过我只用了此模块帮我静态生成,我取消了此模块中使用cron去清空静态页面的功能,而是自己另外写了几行代码,按需清空内容。列表页是天天都要清空重建的,不多,只有几十个,但文章页有几十万,总不能浪费性能天天重新生成,所以我自己写了几个清空的条件。当然,如果你的站没用boost静态生成,那这点略过。

3.VIEWS,如果你用views的时候,并没有使用过hook_views_data自己去改写几行代码,别想了,views一定慢,而且会慢死,凡是调用views的页面都会不同程序的慢。原因在于views查询数据库的时候,使用的是left join。如果你用了CCK字段,则要查出文章的内容,则drupal至少要left join两次……所以,我在设计CCK字段的时候,往往是宁愿数据冗余也尽量将字段安排在一个表上的。这样就会使views left join更少,速度更快。而且我会用hook_nodeapi复制title 和 body为CCK的字段,然后再用hook_views_data去写几行代码,使得views查询的时候,只在一个表上查,这样views就快多了。这很dirty,但站点速度会很快。不过,现在我很少用这种办法了,因为我越来越少用views了。此法能令大量用views的站快很多.

4.创建MYSQL临时表,这才是我想推荐用的的办法。

例子:我的列表页生成的时候,需要从node表中取得标题、修改时间,从node_revisions表里取得body,从分类表中取得分类名字,从content_type_news里取得几个字段的信息,从downloadlinks表中取得下载连接的个数,从统计表里取得这周此文章被浏览的此数。一共六个表(事实上我看了下我的代码,查了9个表),如果用views做,也能做到。但你要考虑一种情况,你的列表页的访问频率是大得惊人的,即便用上了drupal的cache,boost,cache router模块,这里的查询也是很吓人的,特别是参数特别多,没法全部静态生成的时候。大约你做完一次查询要0.1s,这是很吓人的的,一般来说,在一个表中取得数据,只需要0.001s。

我的解决办法就是将这几个表,用一个代码合并在一个临时表中,这个临时表每4小时(按需要)更新一次,这样就能使每次查询N个表变为每次查询1个表。

当然,说得简单,做的时候就要用到MYSQL的语句:

CREATE  TABLE  ”.$tempname.”  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci   as    ( SELECT …………………………)

当然了,用到这个优化方法,你得有些准备知识:会建模块,会用hook,会drupal的database layer就是db_fetch_object等几个API了。

我现在特别喜欢这个方法,有了这个方法后,还配合hook_views_data,既能使网站飞起来,又能用到views的优点,所付出的代价也就是建个新模块写那么几行SQL而已。

5.用drupal做站,如果你的打算是像用国内CMS一样零代码的话,别想了,是不可能的,出来混,总是要写模块写代码的。所以就要用到cache api

6.明白:drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL)  与 drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE) 的差别吧,区体不说了,DRUPAL_BOOTSTRAP_DATABASE是好东西,如果不明白,赶紧查GOOGLE

上面的几个办法总结盟在我的博客中的其它文章上应该有详细的文章总结(偶尔还是喜欢写写总结),http://www.trackself.com,欢迎交流。
来自 http://www.trackself.com/archives/1340.html



Drupal是否适合你?——学习成本

  国内选择Drupal的人越来越多,选择的理由也各不相同,时间、开销、安全性、稳定性、扩展性、持续性、名气等等是大家考虑的常见因素。

  确定选择Drupal很容易,几乎认真了解过Drupal的团队都愿意在项目中使用它,但使用Drupal却又不象想像得那么轻松。(安装Drupal->启用模块->完成,这只是一个美丽而动人的传说:D

Drupal学习曲线

  在真正使用Drupal之前还是需要投入大量的学习和实践,以便掌握必备的知识、技能和积累必要的经验。这是使用任何新事物前都必须经历的阶段,没有例外。

  对于Drupal而言,在学习和使用的过程中主要将要面对以下学习成本

 

成本1:语言

  语言更多应该算作是一种能力,而非实在的成本。但如果说Drupal的使用者在英文资料、文档的阅读上存在不足,那学习英文这个过程就会成为一项实际的成本了。

  目前绝大部分的Drupal资源、资料都是英文,虽然我们也有在做各种翻译、原创的工作,但对于真正的Drupal使用者而言,不能阅读英文文档将严重制约今后的学习和发展高度

 

成本2:模块知识

  Drupal不是拿来就可以使用的产品软件,熟练使用第三方模块是作为Drupal工程师的一项重要技能

  模块化设计是Drupal成功和壮大的一项重要原因,目前社区有近20000个模块,几乎能够想到的通用功能都能够找得到,需要什么功能,到社区一找,可能早就有人实现了,而你只需要下载这个模块,安装并配置就可以轻松实现这样或那样的功能。

  这是很迷人的特性,但同时也让人眼花缭乱。

  选择多也不见得都是好事,你需要去了解哪些模块能够实现什么、需要学习如何使用(配置)这些模块、需要知道怎么与让模块与模块配合使用。获取这些知识需要不断去了解和试用各种第三方模块,在找到最合适的一个模块之前,这会花费你和你的团队大量的时间。

  另一方面,一旦熟悉了大量的模块,借助它们在很短的时间内实现很复杂的功能自然也不在话下。对于新人团队,这也是实实在在的成本。

 

成本3:开发知识

  为了让Drupal获得无所不能的可扩展性,Drupal在各个层面上都尽可能的提供抽象层,如数据库抽象层、Entity抽象层、字段抽象层、表单抽象层、模块抽象层等等。如果开发人员希望借助Drupal的各种特性和优势,开发适用自身项目的功能模块,学习Drupal API和大量的抽象层是不可避免的学习内容。

 

Drupal是否适合你?

  看到这里,不少朋友心里已经开始打起了退堂鼓,觉得使用Drupal太麻烦,做出一个项目要学的东西还很多。但事实上,使用Drupal提供的成熟框架和大量可复用的功能模块,可以节省传统项目中80%~100%的开发工作量(且不说其它因使用Drupal而节省的成本和带来的优势)。

  如果看中Drupal的各项优势,自身没有合适的技术团队,或者是不希望自身投入过多的时间去学习Drupal,可以将项目外包给专业的Drupal团队。而如果有自己的工程师,自我学习或者是通过Drupal培训来提升Drupal团队的知识面和能力都是可行的办法。

  以上对成本的说明主要是希望大家对Drupal有更清楚的认识,走出装上第三方模块就能完成项目的误区,根据实际情况在使用Drupal前确定正确的实施方向(外包、自学、培训等)。

  前期的成本投入是个战略问题,是否投入、是否认为值得投入以及如何投入,还得由各位看官自己掂量 :D

内容分类: 

评论

类似的文章,你比我写得好多了
--------
关于第二点,模块,除非专门负责 Drupal 建站的,否则我不认为需要了解太多的模块,时间成本太大了,关键是知道怎么找到所需功能的模块(英语+搜索能力)

由于模块存在功能细化问题,当需要某个功能的时候,其实并不一定要找对应那一个功能的模块,而可以用一些常用的模块来实现,如 views、panels、rules、context、flag等
-------
关于最后一点

关于Drupal的使用人群,我认为目前主要研究他的还是负责开发网站的技术员,而不是负责运营网站的管理员。这点不像国内流行的 WordPress、DiscuzX、DedeCMS 等,使用那些源码的很多不太懂技术,而只是专注于运营。所以国内Drupal圈子就只是技术员自个儿丫丫,缺少商人介入。

不知你怎么看?

  非常同意搜索能力对 Drupal 从业人员的重要性 :D

  关于模块知识,Views 等常用模块能处理很多简单甚至是复杂的需求,但毕竟更多的场景不是这些模块的处理范围。所以在用到其它常用模块时,对于同类型模块的差异理解就显得非常重要,比如以下这些场景,专业的架构师与 Drupal 新人所选择的方案和理由就不尽相同了:

  • 可视化编辑使用“wysiwyg模块 + TinyMCE” 还是使用 “CKEditor 模块”?
  • 幻灯片使用是Views Slideshow 模块还是 DDBlock 模块?
  • 相册的弹出层效果是使用 LightBox2 还是 ShodowBox?

  

  模块知识的不足可能会对站点在兼容性、性能、可扩展性等不同方面产生不同的影响。(这里我们主要也是关于一些长期的可持续性的项目的探讨,对于一次性建设完成一辈子不用再搭理的项目,那随便怎么样都好了 :D)

  同样,即使是常用模块,比如说在进行页面布局时,使用 Drupal 核心的模版机制?还是使用 Panels模块?还是使用 Context 模块?这些都不只是工具的问题,而在于使用者的经验决定使用何种工具。

  关于 Drupal 的使用人群,它以前是、现在是,我相信将来依然也还是面向开发人员,它是平台型的软件,需要有足够专业知识的人来使用它。而 WP, DZ, Dede 这些是面向站长的产品型软件——国内使用者正是因为缺乏对 Drupal 定位的认识,将其当作产品型软件来使用,才会得出各种“不好用”的结论。如果要找到对等的解决方案,应该拿 Drupal 的各种发行版(Drupal Commons, Open Atrium, Open Enterprise等等)来与 WP, DZ, Dede 来做比较,那就是面向使用者(站长)的软件了。

  关于这一点,相信还需要做很多普及。不只是使用人群,对于开发人员的思考方式和用法等,国内也有太多先入为主的经验。要让 Drupal 在中国流行,还有很多工作要做 :D

高手就是不一样,文字间显示的对待事情的态度明显和常人不同。

Drupal的使用确实跟个人理解不同而存在差异,毕竟不只是拿来就使用,而是相当于创造了,就像使用同样的食材,不同的厨师烹饪的菜肴也是不一样的。

Drupal 的各种发行版我测试过不少,感觉不太符合国内用户的使用习惯,面向国内用户的话看来还得定制。

最后,你提到“开发人员的思考方式和用法等”,就我个人在不同时期使用 Drupal 的情况来看,思维方式的确会在很大程度上影响对于Drupal的使用,尤其是不能用使用常规建站源码的思维来使用Drupal。我接触的建站源码种类也不少,Drupal 和它们有很大的不同,其中之一就是:Drupal在信息架构层面来看,它没有固定的结构形态。仅从这点看,我想你把它定义面向开发者的平台型软件是合理的,我不该把Drupal和其他面向站长的产品型软件作比较。

感谢你的回复!

  正如你的反馈,思考方式很大程度上会影响如何使用 Drupal。相信包括你我在内的每一个Drupal从业者都曾因为不熟悉、不理解Drupal的流程、方式而对Drupal有所诟病——然而如果能够转念想,如果果真如此,这样的产品是不可能在世界范围内如此流行的。如果能够意识到可能是用法、思路的问题,进而去研究、学习正确的 Drupal 之道,以往的种种“难用”、“不好用”似乎都被另外一些华丽而优雅的方式,更为轻松地改进或实现了。

  如果说到发行版,确实国内外文化习惯和用户体验的差异较大,国外的发行版很难让国内的项目拿来就用。如有熟悉国内互联网环境和用户体验的团队,有时间和精力投入制作针对国内站长的发行版,即装即用其实是非常简单且有意义的事情。

  非常感谢能够与你进行这样的交流,相信这样的对话不只对我们自己思考的问题有所帮助,也对广大的Drupal爱好者们有所启发。

 

博主写得太好了,我刚学Drupal不久,一方面感觉“太强了,这么简单就搞定!”,一方面感觉“太慢了,这么多钩子服务器承受得了吗?”。我是OOP的死忠,drupal给我的感觉就是面向过程的,可能以后还是用Yii或者ThinkPHP或者直接动手实现一个CMS。另外博主退学的经历引起了我的共鸣!

关于“太慢了”的理解与你对Drupal的熟悉程度有关,Drupal 除了钩子回调外,还有很多缓存机制,一般的中小型站点无需为性能担忧。大型站点好好利用缓存机制以及第三方模块或第三方应用能够对性能进行优化和提升。

这些话之前已经说过很多次了,希望对你理解Drupal有所帮助:“钩子回调是为了让Drupal获得最大的灵活性和开发的便利性,这一点对性能的损耗是肯定的。但同时 Drupal 有很多其它如缓存、异步调用等手段来弥补性能的损耗甚至是增强性能,从而使 Drupal 在扩展性、灵活性与性能方面取得非常好的平衡”

另外 D8 开始将 Symphony 引入内核并进行重构,对于习惯 OOP 的你来说可能会是一个好消息 :D (当然,这里不是向你推销 Drupal,Drupal 并不适合所有人,如果有兴趣,这个信息对你来讲还是有价值的,呵呵)

非常喜欢读lugir袁的大作,谢谢您为Drupal在中国的普及所做的贡献!希望博客能更新快点,让我们不要久等一点!



我的drupal好慢

hi,

请问有没有什么模组~可以知道我的drupal是慢在哪呢? 
比如说query了哪些花了几秒?

因为真的好慢耶................ 
我都不敢丢网址上来,因为太鸟了... http://alpha.facepet.com.tw/

(还是丢了...可以帮我看看吗?) 
(应该一下子就会拿掉>"<)

Oscar0410's 的头像

Re:

server架在哪?

我刚上去看.好像只有第一次读取首页.会比较慢... 
再来其实都ok ㄝ ...

不过.是否可以列出你使用的模组? 
从他读取的判定来看..觉得好像是某个模组在做判定.或是分析db所产生的延迟...

ps.管理->日志->最近日志项目...可以显示系统的一些资料.你可以查看一下....删除cookie后.再开启你的首页.看看日志里面会出现哪些讯息判定错误的讯息

dionysian's 的头像

Re: 我的drupal好慢

开启firefox的firebug功能套件,点选网路选项把网路Support for Network monitoring勾选,然后再次重新载入网站, 
他会分析有几道请求以及所发费的时间,在你的网站上好像都是图档的请求显示304以及404的错误.

dionysian's 的头像

Re:

http://drupal.org/project/devel
这个可以看db query

用Firebug还可以配合: http://drupal.org/project/drupalforfirebug

YSlow亦是好帮手: http://developer.yahoo.com/yslow

你的问题应该是图片路径错误(图d3)

正式使用后要开启CACHE : 
/admin/settings/performance

(一年前, 我亦想做这样的网站, 域名都注了, 但最后没做下来, 哈哈, 可能是自己不是热爱小动物!)

hanamizuki's 的头像

Re: 我的drupal好慢

感谢各位的建议,我装太多模组了,真不晓得那些图示为何会被读到。
不过各位给我这个方向真的很棒,待我研究过后,再跟大家回报!:D

dionysian's 的头像

Re: 我的drupal好慢

tip_balloon.js 要修改路径

config. BalloonImgPath = "../scripts/tip_balloon/" // Path to images (border, corners, stem), in quotes. Path must be relative to your HTML file.

不过你好像没有用tip_balloon.js. 所以可以移除载入这个JS

dionysian's 的头像

Re: 我的drupal好慢

大大
你设计的网站不错哦
厉害

hanamizuki's 的头像

Re:

To Oscar0410:

Server是朋友残念不听我劝说之下,在KMD买的。http://www.kmd.com.tw/web_hosting.php?osCsid=c6tnh7ohnhsk26fm3pb9puvha4

最便宜的那个方案。

状态报告撷图如下:

其中Hierarchical Select Views Taxonomy这个错误,说是叫我更新Views,但我用的Views的确是最新版,
手动Patch之后也没用,所以暂不管,因为实际上没有发现问题。

好!开始解决tip_balloon.js

dionysian's 的头像

Re: 我的drupal好慢

还有一个方法可以加快
管理=>效能=>整合并压缩CSS档案=>启用
就会很快了
试试看

jimmy's 的头像

Re: 我的drupal好慢

cache是否有开、css cache / js aggregator有没有开起来
对效能帮助差很多!
试试看

-- from open mind to open source~

-- from open mind to open source~

dionysian's 的头像

Re: 我的drupal好慢

jimmy您好,
可以说明一下,如何开启吗? 
步骤或路径
谢谢您了

dionysian's 的头像

Re:

就是你上面说的,中英文用词分别
Drupal 5没有JavaScript的选项

D5 http://drupal.org/project/javascript_aggregator

dionysian's 的头像

Re: 我的drupal好慢

还好啊,挺快的啊!

--------------------------------------- 在牛逼的萧邦,也弹不出老子的悲伤!

--------------------------------------- 如皋商业门户 -------- ------------------------------- 8698studio.com

 

dionysian's 的头像

Re: 我的drupal好慢

是不是改善过了,挺快的,只有第一次进入时比较慢


普通分类: