优化文章生成速度,DedeCMS负载性能优化实例,让你的织梦文章快30倍以上

2017-05-14 二次开发 浏览 手机预览
文章来源:http://www.imtr.cn/html/n25.html

对于DedeCMS表现出来相对较差的性能感觉比较迷惑,到底是什么在限制其负载效率?难道真的是某些Dede论坛版主说的是因为MySQL不堪重负的原因吗?

        我们通过一个实例来解析和优化DedeCMS的数据管理性能,千万别让MySQL当替罪羊。测试数据是重复添加的文章数据,数据量将近110万条。未优化前我们测试发现主要有两个经常性的操作在Dede大数据量的情况下影响管理性能,分别是“文档生成”“列表生成”,接下来我们就针对这两个方面进行优化实践。


        改进文章生成速度

        1、【问题描述】

        和我们之前的测试结果相同,DedeCMS的文档的生成速度惨不忍睹。使用默认模板article_article.htm,百万级的数据量更新大约30秒才能生成20个页面,按照这个速度生成下去,110万的数据全部生成html能等到头发都白了。

        2、【问题分析】

        先排除表索引的问题,因为dede的数据库已经在数据主表dede_archives为主要字段都建立了索引。

        再排除主要内容的提取效率问题,因为页面生成过程中读取页面中的文章数据,每次需要到主表和附表中select取得id值唯一的数据内容,这个SQL语句的效率我们通过直接在MySQL中运行SQL语句测试,执行时间非常短,因此这也不是最大的瓶颈。

        然后在页面生成过程中,我们发现问题所在,dede程序在生成页面的过程中,执行了多次主表dede_archives查询,并取出符合一组复杂查询条件数据的操作,查询效率非常低,原来是它在影响生成效率!通过调试跟踪,我们定位了问题的关键,元凶就是模板中arclist标签

        arclist标签是很多人很喜欢用的标签,因为它比较灵活,能从数据中取出点击最高、最新发布、相关内容等各种类型的文章列表,但是arclist标签每次都会带着一大推搜索条件去主表中查询,实际上对于一次性生成大量文章来说,如果使用相同的模板,arclist对数据库的查询操作只是简单机械重复罢了,为此而耗费了大量时间绝对是不值得的。接下来我们给出问题解决的建议。

        3、【解决方案】

        方案A:去掉页面模板中的arclist标签,或者尽可能少用。这个方法虽然能极大提高效率,但是得不偿失,对于企图增加访问量的网站来说,不建议使用。

        方案B:建立arclist缓存。将每次arclist生成的数据放到临时目录或者缓存当中,在文档生成过程中判断缓存是否有更新,如果无更新,直接使用缓存数据。这个方法无需改变模板,对于提高生成效率也有一定的效果,但由于对程序改动较大,新手慎重。

        方案C:也是本站建议的解决方案,在尽量不改变程序的基础上,大幅提高效率。具体的方法就是通过自由列表生成功能事先生成热门文章、最新文章、相关文章等内容的列表页面,然后使用DedeCMS提供的include标签直接引入文档页面。标签格式为:{dede:include file='列表页面文件名称' ismake=' no'/}。这个方案优点在于仅仅增加了一步操作步骤,没有改动任何程序,而且性能提高非常明显。利用这个方法优化后,生成速度和之前相比就好像自行车和高铁的区别,仅用时14秒就完成了1000页的文章生成,达成目标优化效果。此方案由于增加了操作步骤,更新文章前必须先更新相关的列表页(如果该列表有变动的话)。


        【相关推荐】

        改进列表生成速度

原文地址:http://www.imtr.cn/html/n25.html
  • 如果你的问题还没有解决,可以点击页面右侧的“ ”,站长收到问题后会尽快回复解决方案到你的邮箱。
  • 创造始于问题,有了问题才会思考,有了思考,才有解决问题的方法,才有找到独立思路的可能。 —— 陶行知