dedecms 负载性能优化实例,三招让你的dede快10倍以上

Filed under: PHP研究, dedecms专栏, 数据库技术 | 2 Comments »
Posted on

        助易网测评小组曾在08年4月对国内主流php类cms做了负载测评,参考我们的测评文章http://www.cmshelp.com.cn/cms/cms2008.htm,其中对dedecms表现出来的相对较差的性能也感觉比较迷惑,到底是什么在制约其负载效率?难道真的是某些脑残的dede论坛版主说的是因为mysql不堪重负的原因吗?还是因为一个表的大数据造成性能严重下降?难道我们必须通过分多个表来存储才能解决问题吗?以下我们通过一个实例来解析和优化dedecms的数据管理性能,千万别让mysql当替罪羊,罪莫大焉。

        欢迎转载本文,转载请注明本文出自助易网(http://www.cmshelp.com.cn)。

        测试数据是无意中得到的企业黄页的数据,数据量将近90万,都是完全真实的数据,测试使用的程序是dedecms4.0版本,你问为什么不用dedecms5.1?那是因为我们为了优化,针对dedecms做了很多修改,如果使用dedecms5.1,我们害怕收到法院传票……,补充一句,以下的优化方法均能在dedecms5.1中使用,请在理解其原理的基础上自行完成。

        未优化前我们测试发现主要有三个经常性的操作在dede大数据量的情况下影响管理性能,分别是文档生成、列表页生成和栏目列出所有文章,我们就针对这三个方面进行优化实践。

        欢迎转载本文,转载请注明本文出肥龙龙博客(http://www.blog-dragon.com/)。

        以下是测试数据的基本信息:

optimize-dede1.jpg

文档数量接近90万

阅读全文 »

Tags : , , ,

dedecms5.1升级sp1出现IfTagNull()错误解决方法记录

Filed under: dedecms专栏 | No Comments »
Posted on

最近有报告错误说从dedecms5.1升级sp1出现错误,代码大致如下:
Fatal error: Call to undefined function IfTagNull() in /……/include/pub_dedetag.php(485) : eval()’d code on line 1
分析错误原因,是因为模板中调用了IfTagNull函数而程序中找不到这个函数导致出错,解决的办法很简单,两种,这里记录一下:
1、修改article_article.htm模板,把{dede:tag type=’current’ function=’IfTagNull(@me)’/} 换回原来的{dede:tag type=’current’ /}
2、修改include目录下的inc_functions.php文件,加入代码如下:

//这个函数根据自己需要进行修改
function IfTagNull($tag){
 
//这里直接输出了Tag:自行修改
 
if(!$tag=="")  $tag="Tag:".$tag;
 
return $tag;
}
Tags : , ,

dedecms中实现列表页面调用其它栏目的信息

Filed under: dedecms专栏 | No Comments »
Posted on

群里有人问如何在dedecms中实现列表页面调用不同栏目的文章信息,以下给出解决方法,针对dedecms4.0。

首先,为dedecma增加一个标签的属性,我修改的标签为【List 标记】增加属性addonid,使用方法为:

addonid= ‘调用的栏目编号’,不同的栏目请用半角“,”的分隔,这些栏目必须是最终列表栏目,同时不必在这个栏目编号中增加本栏目的编号。

例子:{dede:list pagesize=’2′ addonid=’1,2′} {/dede:list}

继续修改include/inc_arclist_view.php,这个比较麻烦,不会的话,直接拷贝粘贴。

第一步,新增$addonid变量,如下:

class ListView
{
 var $dsql;
 var $dtp;
 var $dtp2;
 var $TypeID;
 var $TypeLink;
 var $PageNo;
 var $TotalPage;
 var $TotalResult;
 var $PageSize;
 var $ChannelUnit;
 var $ListType;
 var $Fields;
 var $PartView;
 var $StartTime;
 var $addonid; //这里为新增的变量

……

第二步:获得模板中的addonid的值,并且统计文章总数,修改function CountRecord()函数:

原本代码为:

  //——————
  //统计列表里的记录
  //——————
  function CountRecord()
  {
   global $cfg_list_son;
   //统计数据库记录
   $this->TotalResult = -1;
   if(isset($GLOBALS[’TotalResult’])) $this->TotalResult = $GLOBALS[’TotalResult’];
   if(isset($GLOBALS[’PageNo’])) $this->PageNo = $GLOBALS[’PageNo’];
   else $this->PageNo = 1;
   
   if($this->TotalResult==-1)
   {
     $addSql  = ” arcrank > -1 “;
    
     if($cfg_list_son==’否’) $addSql .= ” And (typeid=’”.$this->TypeID.”‘ or typeid2=’”.$this->TypeID.”‘) “;
     else $addSql .= ” And (”.$this->TypeLink->GetSunID($this->TypeID,”#@__archives”,$this->Fields[’channeltype’]).” Or #@__archives.typeid2=’”.$this->TypeID.”‘) “;
    
     if($this->StartTime>0) $addSql .= ” And senddate>’”.$this->StartTime.”‘”;
     $cquery = “Select count(*) as dd From #@__archives where $addSql”;
    $row = $this->dsql->GetOne($cquery);
    if(is_array($row)) $this->TotalResult = $row[’dd’];
    else $this->TotalResult = 0;
   }
   
   //初始化列表模板,并统计页面总数
   $tempfile = $GLOBALS[’cfg_basedir’].$GLOBALS[’cfg_templets_dir’].”/”.$this->TypeLink->TypeInfos[’templist’];
   $tempfile = str_replace(”{tid}”,$this->TypeID,$tempfile);
   $tempfile = str_replace(”{cid}”,$this->ChannelUnit->ChannelInfos[’nid’],$tempfile);
   if(!file_exists($tempfile)){
       $tempfile = $GLOBALS[’cfg_basedir’].$GLOBALS[’cfg_templets_dir’].”/”.$GLOBALS[’cfg_df_style’].”/list_default.htm”;
    }
   if(!file_exists($tempfile)||!is_file($tempfile)){
    echo “模板文件:’”.$tempfile.”‘ 不存在,无法解析文档!”;
    exit();
   }
   $this->dtp->LoadTemplate($tempfile);
   $ctag = $this->dtp->GetTag(”page”);
   if(!is_object($ctag)){ $ctag = $this->dtp->GetTag(”list”); }
   if(!is_object($ctag)) $this->PageSize = 20;
   else{
     if($ctag->GetAtt(”pagesize”)!=”") $this->PageSize = $ctag->GetAtt(”pagesize”);
      else $this->PageSize = 20;
    }
    $this->TotalPage = ceil($this->TotalResult/$this->PageSize);
  }

修改为:

  //——————
  //统计列表里的记录
  //——————
  function CountRecord()
  {
   global $cfg_list_son;
  
   //初始化列表模板,并统计页面总数
   $tempfile = $GLOBALS[’cfg_basedir’].$GLOBALS[’cfg_templets_dir’].”/”.$this->TypeLink->TypeInfos[’templist’];
   $tempfile = str_replace(”{tid}”,$this->TypeID,$tempfile);
   $tempfile = str_replace(”{cid}”,$this->ChannelUnit->ChannelInfos[’nid’],$tempfile);
   if(!file_exists($tempfile)){
       $tempfile = $GLOBALS[’cfg_basedir’].$GLOBALS[’cfg_templets_dir’].”/”.$GLOBALS[’cfg_df_style’].”/list_default.htm”;
    }
   if(!file_exists($tempfile)||!is_file($tempfile)){
    echo “模板文件:’”.$tempfile.”‘ 不存在,无法解析文档!”;
    exit();
   }
   $this->dtp->LoadTemplate($tempfile);
   $ctag = $this->dtp->GetTag(”page”);
   if(!is_object($ctag)){ $ctag = $this->dtp->GetTag(”list”); }  
  if($ctag->GetAtt(”addonid”)!=”") $this->addonid = $ctag->GetAtt(”addonid”);
   if(!is_object($ctag)) $this->PageSize = 20;
   else{
     if($ctag->GetAtt(”pagesize”)!=”") {
     $this->PageSize = $ctag->GetAtt(”pagesize”);
   }
      else $this->PageSize = 20;
    }
 
   //统计数据库记录
   $this->TotalResult = -1;
   if(isset($GLOBALS[’TotalResult’])) $this->TotalResult = $GLOBALS[’TotalResult’];
   if(isset($GLOBALS[’PageNo’])) $this->PageNo = $GLOBALS[’PageNo’];
   else $this->PageNo = 1;
   
   if($this->TotalResult==-1)
   {
     $addSql  = ” arcrank > -1 “;
    
  if($this->addonid!=”") $isaddon = ” Or #@__archives.typeid in (”.$this->addonid.”)”;
  else $isaddon = “”;
    
     if($cfg_list_son==’否’) $addSql .= ” And (typeid=’”.$this->TypeID.”‘ or typeid2=’”.$this->TypeID.”‘ “.$isaddon.”) “;
     else $addSql .= ” And (”.$this->TypeLink->GetSunID($this->TypeID,”#@__archives”,$this->Fields[’channeltype’]).” Or #@__archives.typeid2=’”.$this->TypeID.”‘ “.$isaddon.”) “;

    
     if($this->StartTime>0) $addSql .= ” And senddate>’”.$this->StartTime.”‘”;
     $cquery = “Select count(*) as dd From #@__archives where $addSql”;
    $row = $this->dsql->GetOne($cquery);
    if(is_array($row)) $this->TotalResult = $row[’dd’];
    else $this->TotalResult = 0;
   }
 
    $this->TotalPage = ceil($this->TotalResult/$this->PageSize);
  }

说明,首先把统计数据库记录这部分代码后移,目的是为了利用获得的属性参数addonid,接着通过$this->addonid = $ctag->GetAtt(”addonid”);获得模板中的addonid的值,然后生成新的统计数据库的sql语句。

第三步,修改function GetArcList()函数,显示文档列表。

原文件为(代码片断):

  if($cfg_list_son==’否’) $orwhere .= ” And (arc.typeid=’”.$this->TypeID.”‘ or arc.typeid2=’”.$this->TypeID.”‘) “;
  else $orwhere .= ” And (”.$this->TypeLink->GetSunID($this->TypeID,”arc”,$this->Fields[’channeltype’]).” Or arc.typeid2=’”.$this->TypeID.”‘) “;

修改为:

  if($this->addonid!=”") $isaddon = ” Or arc.typeid in (”.$this->addonid.”)”;
  else $isaddon = “”;
  if($cfg_list_son==’否’) $orwhere .= ” And (arc.typeid=’”.$this->TypeID.”‘ or arc.typeid2=’”.$this->TypeID.”‘ “.$isaddon.”) “;
  else $orwhere .= ” And (”.$this->TypeLink->GetSunID($this->TypeID,”arc”,$this->Fields[’channeltype’]).” Or arc.typeid2=’”.$this->TypeID.”‘ “.$isaddon.”) “;

到此就可以实现列表页面调用其它栏目的信息。有问题的话Q我。

Tags : , ,

国内主流PHP类CMS数据负载测评报告

Filed under: PHP研究, 实践与研究 | 1 Comment »
Posted on

国内免费内容管理系统(PHP类CMS)测评报告之一

国内PHP类CMS数据负载测评报告

本文由助易网CMS评测小组提供。如需转载,请保留所有信息及链接。谢谢合作!

前言

当今时代网络已经进入家庭,很多网民已经不满足于QQ以及一些blog的个性展现而走向了网站建设的站长之路,一些个人网站的崛起也让他们看到了成功的曙光,与此同时,各类网站管理系统(以下简称cms)也犹如雨后春笋般地出现在了大家的眼前,给很多有站长梦的朋友建设网站带来了曙光。

但问题也随之而来,那就是:站长们应该如何选择cms,选择的cms系统是否能够完全满足自己的需要,cms是否能够稳定而持久的方便站长的工作?是否能够满足网站在将来发展的需要?带着同样的疑问,助易网测评小组决定对现在比较流行的PHP平台下的国内主流cms系统作一次深入的评测,参评的国内php类cms包含了当下主流的dedecms、ecms、php168、phpcms、supesite等系统,测评的具体内容则包括cms的服务、质量、功能、数据负载等多个方面,测评小组期望通过测评给广大站长选择适合自己的cms程序提供依据。

本报告的内容为cms的数据负载专项评测结果,目的是在数据负载方面为选择cms系统提供依据。

一、评测对象

经过筛选,最终确定参与本次评测的php类cms如下表:

参评cms

备注:测评小组原本想将cmsware(思维CMS)列入评测范围,但因cmsware始终未能找到好的方法录入50万的数据,因时间所限,所以本次cmsware不参加评比的最终排名,只给出部分功能的介绍。

二、评测环境

为保证公平公正,本次测评我们把全部的cms都统一安装在同一台电脑相同环境中,利用端口区分每个cms,具体的测试环境为:

1、硬件环境

CPU:Intel(R) Core(TM)2 Duo 英特尔酷睿2双核
主频:1.80GHz
物理内存:1GB
硬盘:120GB

2、软件环境

操作系统:Windows Server 2003 Standard Edition Service Pack 2
Web服务器:Apache HTTP Server 2.2.6
PHP:5.2.5
MYSQL:MySQL Server 5.0
ZEND:ZendOptimizer-3.3.0

三、评测方法

本次数据负载评测的方法是向每个cms系统中录入50万条数据,并在此基础上完成三个项目的评测内容,具体的评测方法为:

1、数据获得方法

评测小组试图使用采集的方法获得50万的数据,但由于采集的效率较低,并且数据来源各有差异,不利于做出相对公平的测试结果,因此最后决定使用循环入库的方法直接创造50万的数据。为保证数据入库的有效性,我们使用程序自身的数据入库模块并编写了对应的接口程序,在其基础上建立循环,用最快速的方法直接写入数据库创造数据。

2、数据样本

为保证公平公正,本次测试使用完全一样的数据样本,该样本为一篇普通的新浪的文字稿件,共370个字符,不包含图片、视频、附件等任何其他多余信息,具体样本如下:

标题:  火箭22连胜登上西部榜首 麦蒂哑火街球王枪挑湖人

3、数据量及空间占用情况

由于每个cms的数据录入方法稍有不同,最终cms具体的数据量略有差异,测评小组认为,相比50万的总体数据量来说,这部分微小的数量差异不会对测试的最终结果产生太大的改变和造成决定性的影响。

每个cms具体录入的数据量以及数据空间占用情况见下表:

cms数据

4、评测内容

本次评测的具体内容为(每个大项10分为满分):

(1)大数据量情况下后台的管理效率,本项目重点考察在大量数据的基础上,cms对数据进行列表、增加、删除、修改、查询和移动等常见管理操作的效率和速度,得分占总成绩的50%。

(2)大数据量情况下的页面生成效率,本项目重点考察cms系统静态页面、列表页面等网页的生成效率和速度,考察管理后台提供了哪些方便网页生成的维护和管理工具,得分占总成绩的40%。

(3)大数据量情况下网页的可访问性,本项目重点考察动态数据页面的情况下,各个cms系统的前台页面表现的负载能力和访问效率,得分占总成绩的10%。

四、分类评测结果

1、后台数据管理能力测试

(1)dedecms

dedecms50万数据管理界面

DeDecms——50万数据管理后台

评分:4分

测评之前就听说dedecms的数据负载不是很理想,没想到测试结果比想象的还要糟糕。当后台管理到达5万数据的时候,后台操作开始变得异常困难,打开栏目列出所有文章要花费相当长的时间,当数据到达20万的时候,打开文章管理列表时提示php超时。

我们录入完50万数据,并且延长了php脚本超时的限制,小心翼翼的打开了栏目的文章管理,在硬盘灯一阵狂闪,时间过去了整整2分35秒的之后,终于艰难的打开了文章管理列表。不幸的是每次翻页都会遇到类似的情况,时间都在40秒以上。随后我们耐心尝试了文章的添加、编辑、删除、移动和查询等操作,其中文章的添加、编辑、删除、查询的速度中规中矩,而批量文章移动速度较慢。

结论:当数据大于5万的时候,使用dedecms的后台来管理数据是非常让人郁闷的一件事情,因为每次操作完毕后,你不得不花费至少1分钟的时间等待文章列表的出现,这对于没有耐心的人几乎是不可能完成的任务。

(2)php168

php16850万数据管理界面

Php168——50万数据管理后台

评分:8分

Php168的后台布局有点动易系统的影子,对于5万和10万的数据量,后台管理都显得轻松自如,因此我们没有做更多的测试,直接录入50万数据。

Php168在50万数据时管理同样显得比较轻松,50万数据文章管理列表第一次打开仅花费了13秒,每次翻页也都是2-3秒就能出现,速度比较理想。接着我们测试了文章的添加、编辑、删除、移动和查询等各种操作,速度都非常快,几乎没有任何延迟,操作起来也非常顺手。

结论:对于50万的数据来说,php168的后台应对起来非常轻松自如,各种操作均速度较快。

(3)phpcms

phpcms50万数据管理界面

phpcms——50万数据管理后台

评分:8分

Phpcms后台的管理界面相对比较复杂,但层次清晰,有点类似DZ后台的管理方法,让人感觉比较亲近。对付5万和10万数据,后台管理比较轻松,几乎未见延迟。

Phpcms单个栏目50万数据打开管理列表第一次花费时间为11秒,数据翻页的时间为1-2秒,和php168旗鼓相当,效率亦非常的高。继续测试了文章的添加、编辑、删除、移动和查询等各种操作,速度很快,管理操作都非常方便。

结论:phpcms优秀的数据管理机制能轻松应对较大数据量,后台各种数据管理工具和操作都很顺手。

(4)ecms帝国

ecms帝国50万数据管理界面

ecms帝国——50万数据管理后台

评分:6.5分

Ecms的后台管理布局比较传统,类似风讯等系统后台管理方式。在5-10万数据时,后台管理相对速度较为缓慢,但还能够使用。

单个栏目50万数据时,系统管理显得较为吃力,打开数据列表时间花费为1分20秒,每次翻页用时10-14秒,这个成绩仅略优于dedecms,不过当再次打开数据列表时,速度有明显的提升。继续测试了文章的添加、编辑、删除、移动和查询等各种操作,文章的添加、编辑、删除、查询的速度可以接受,而数据移动则异常的缓慢,这点和dedecms表现相同。

结论:帝国cms数据的承载能力并不强,在大数量的面前,表现只能算及格,建议其单个栏目的数据量最好不超过15万。

(5)HBCMS

hbcms50万数据管理界面

HBCMS——50万数据管理后台

评分:7.5分

HBCMS的后台管理有明显的仿欧美cms的倾向,但是布局较为凌乱,感觉并不舒服。后台管理在数据量为5-10万的情况下表现优异。

出人意料的是,HBCMS单栏目50万数据管理的打开速度达到了令人惊异的6秒!翻页也只需要2-3秒,这让测评小组对其刮目相看。测试文章的添加、编辑、删除、移动和查询等各种操作,速度都较为出色,但是由于后台布局不规整,而且后台在使用上经常出现一些莫名其妙的错误,让人摸不着头脑。

结论:HBCMS在处理大数据方面有着令人称赞的高效机制,但是后台管理夹杂着英文提示以及一些未知的错误,往往会让用户不知所措,数据添加、编辑、移动等操作使用起来提示较多,操作繁琐,最终影响了得分。

(6)supesite

supesite50万数据管理界面

supesite——50万数据管理后台

评分:9.5分

Supesite不愧为大公司的作品,后台管理界面交代非常清楚,各类功能一目了然。后台管理在数据量为5-10万的情况下表现优异。

Supesite后台数据管理的效率相当惊人,50万的栏目数据列表只花费了不到5秒的时间,数据翻页,文章的增、删、改、查和批量移动,这些功能操作起来几乎感觉不到大数据量带来的迟滞,后台所有功能都非常符合中国人的喜好,使用起来方便、舒服、顺手。

结论:supesite表现出来的优异性能在测评小组的预料之中,因此毫不犹豫的给了高分,测评小组一位成员甚至在2亿的数据基础之上测试过supesite的性能,结果依然让人满意,唯一遗憾的地方是supesite不是一套开源的系统,因此我们虽然十分赞叹其性能,但依然保留了一点自己的看法,希望其在未来能完全开源供站长们使用和研究。

(7)verycms

verycms50万数据管理界面

verycms——50万数据管理后台

评分:8.5分

phpwind公司进军cms领域的作品,verycms的功能较为单一,因此后台管理更加简单,清爽。

由于verycms的只提供文章管理功能,因此其管理的效率是令人满意的,50万数据列表打开的速度约为6秒,仅次于supesite,并且由于系统使用了ajax技术,让人感觉不到等待的时间。数据翻页的效率为2-3秒,让人满意,对于文章数据的增加、删除、修改、查询和批量移动,其表现也同样比较出色。

结论:verycms只有文章管理的单一功能,其表现堪称优秀,但由于其功能较为单一,实在是非常遗憾,我们期待有更多的功能加入这个优秀的开源系统中。

小结

国内免费php类cms后台数据管理效率评分表

2、页面发布效率测试

(1)dedecms

Dedecms针对页面生成提供了丰富的选项

Dedecms针对页面生成提供了丰富的选项

dedecms50万数据管理界面

页面生成进度提示

dedecms50万数据管理界面

50万数据时,生成100页的完成时间

dedecms50万数据管理界面

无法忍受的生成速度

评分:6.5分

Dedecms提供的页面生成管理功能是令人称道的,分别提供了主页、栏目页、文章页的生成功能,甚至包括网站地图、RSS、专题以及自定义文档列表等生成功能,除此外,还有许多cms系统中不常见的一键更新和计划任务的功能。在具体的文档生成方面,提供按照指定时间,指定文档编号,指定生成页数等多种页面生成的方法,总体感觉比较实用和方便。同时页面生成时有较为精确的进度提示,增强了用户使用体验。

和生成管理形成强烈反差的是数据生成的低效率,由于没有提供指定范围的列表页面生成功能,测试小组试图完成所有列表页面的生成,由于时间太长结果以失败告终。接下来对文章的生成,同样是一场噩梦,指定ID生成100篇文章花费时间为6分55秒,不指定文章ID生成300篇文章用时17分10秒,按照这个速度对50万的数据进行生成,花费的时间实在是非常可观。

结论:dedecms的后台数据生成和管理方面充分为用户着想,提供诸多的功能,但是过低的页面生成效率让dedecms只能应对数据量生成非常小的站。由于其管理功能丰富,虽然有点花拳绣腿的嫌疑,但测评小组依然给了一个勉强及格的分数。

(2)php168

Php168静态页面生成界面

Php168静态页面生成界面

评分:7.5分

Php168的静态页面生成管理较为简单,仅提供了首页、列表页和内容页等常见的生成功能,文章生成允许指定时间和ID,列表页不能指定生成数量,但系统提供了一个较为贴心的功能,即允许用户在中断生成操作之后,继续未完成的任务。

由于系统不能指定生成列表页的数量,我们针对列表页生成的测试也无法完成。Php168内容页的生成速度还是不错的,在50万文章数据的基础上,100页文章数据的生成时间为约1分12秒。文章生成过程中有完成百分比的提示,时刻提醒用户生成的进度。

结论:php168的静态页面生成和管理功能较为朴实,也相对简单,页面生成效率中规中矩,能够接受。

(3)phpcms

Phpcms页面发布管理界面

Phpcms页面发布管理界面

phpcms页面生成过程

页面生成过程

评分:9.5分

Phpcms提供的页面发布工具比较直观,管理分布比较清晰,功能也相对齐全,有首页、频道页、列表页和内容页等生成选项,内容页也支持按照ID编号的生成方法,所有生成选项在一个界面中就可以完成,操作非常简单,实用。

相比并不花哨的发布管理功能来说,在接下来的静态页面生成的测试中,phpcms终于展露出其恐怖的实力,我们指定ID静态生成100个页面,用时仅为20秒!看到这个令人乍舌的成绩,小组成员几乎不敢相信自己的眼睛,于是接下来我们继续完成了1000个页面的静态生成测试,结果证明phpcms的静态页面生成能力是怪兽级的,1000个页面全部生成时间仅为28秒!而我们同步观察磁盘目录页面的生成情况,phpcms在生成静态页面时并不是一个一个页面完成,而是批量的同时生成。由于phpcms也没有提供按照指定页数的列表页生成机制,因此我们没有完成全部的列表页生成。

结论:无论是管理工具、方法和页面生成的效率,phpcms无疑都是最优秀的,其他的cms难以望其项背。唯一遗憾的是没有提供按照指定页码生成列表页的功能。

(4)ecms

Ecms的页面发布管理页面

Ecms的页面发布管理页面

评分:5分

Ecsm提供了丰富的页面静态发布的管理工具,包括首页、列表页、内容页以及分频道的栏目及内容发布,按照时间和ID的内容生成页面等功能,ecms还提供了一个贴心的功能,即可以选择是否重新生成已经生成过的文件。

Ecms的静态网页内容发布效率非常的低,50万数据基础上,发布100个页面居然花费了近12分钟时间,而且数据生成期间,电脑几乎无法操作,硬盘不停的进行读写操作,这一结果让小组颇感失望。列表页面生成同样没有提供按照页码生成的功能。

结论:ecms的页面生成效率偏低,让人失望。

(5)HBcms

HBcms的文章静态生成管理

HBcms的文章静态生成管理

HBcms的栏目列表静态管理

HBcms的栏目列表静态管理

HBcms的页面生成过程

HBcms的页面生成过程

HBcms的100个页面生成时间

HBcms的100个页面生成时间

评分:8.5分

Hbcms的管理后台布局和样式测评小组一直都不喜欢,但是这不并影响hbcms在数据生成方面的优异表现,hbcms除了提供传统的首页、栏目页和文章页的静态生成功能外,还提供了按照关键字、按照ID生成页面等功能,并且允许按照页码范围生成栏目列表页面,功能看似简单却非常实用。

Hbcms的内容页面生成的效率非常的高,我们测试了100页面生成时间仅为7.93秒,这个成绩甚至超越了phpcms之前创下的记录,但随着页面的增多,其表现却逊色于phpcms,1000个页面生成的花费时间为79秒,这个速度已经让小组成员感到非常意外了。同时hbcms的数据生成过程提供非常友好的提示信息,让人觉得颇为专业。

结论:人不可貌相,海水不可斗量,hbcms虽然在管理界面和操作等方面没给我们留下好的印象,但是其优秀的数据管理效率确实让人刮目相看。

(6)supesite

Supesite的html静态生成管理界面

Supesite的html静态生成管理界面

评分:8分

Supesite的对于静态HTML的管理手段可谓另辟蹊径,它并不主张管理员通过手工的方法批量生成静态HTML页面,而是通过用户访问触发的方式发生成html页面,这种方法不但极大减少了服务器的负担,并且减少了管理的操作步骤,对整站性能的提高亦非常明显。但系统提供的HTML手动生成的效率确实不敢恭维,建议不要通过手动的方式更新页面数据。

结论:supesite给我们提供了另一种提高数据生成效率的方法,这种方法不但更为聪明,而且更加节省资源,因此虽然我们对其本身提供的页面生成工具颇有微词,但依旧赞同supesite的做法。

(7)verycms

Verycms静态生成的操作散布于各个管理界面中

Verycms静态生成的操作散布于各个管理界面中

评分:6分

Verycms的数据静态化管理分散于后台的各个管理界面中,也支持更新首页,频道首页,列表页和内容页等操作,但是相应的选项较少,也许是产品本身只是文章管理系统,即便是在动态的情况下,程序在访问效率上表现依旧不俗,但在静态页面生成效率这部分功能上实在不算优秀,50万数据的基础上,平均每分钟的页面生成速度仅为可怜的10页,系统值得称道的地方在于页面更新的时候,cpu占用率非常低。

结论:使用verycms最好不要统一进行静态页面的更新,因为这不是该系统的长处。

顺便提一下cmsware(思维cms),这个cms的静态发布也非常有特点,支持一键的整站更新,虽然更新的效率不高,但其特点是你可以监控系统更新过程中的每一个步骤。

Cmsware的一键更新和更新监控

Cmsware的一键更新和更新监控

小结

国内免费php类cms页面生成效率评分表

3、网页访问速度测试

由于静态页面访问没有什么可比性,页面访问速度只针对动态列表页的访问和翻页速度进行测试,由于各个cms的默认模板不相同,会造成访问速度的差异,因此这部分测试不作为主要评分依据。

Dedecms 50万数据栏目动态列表

Dedecms 50万数据栏目动态列表

Dedecms:与dedecms后台对大数据量管理非常吃力的情况不同,dedecms前台页面的动态列表效率还是可以忍受的,无论是数据的列表还是翻页,都效率较高。

评分:7分

Php168 50万数据栏目动态列表

Php168 50万数据栏目动态列表

Php168:Php168文章列表的效率多少有点让人失望,看似并不复杂的模板,但打开栏目的列表页却花费了相当长的时间,随后的翻页也显得异常的艰辛。可见php168在前台模板驱动能力上有明显的欠缺。

评分:6分

Phpcms 50万数据动态列表页面

Phpcms 50万数据动态列表页面

Phpcms:继承了后台优秀的数据管理效率,phpcms的前台表现也依旧十分优秀,动态列表的情况下,无论是列表还是数据翻页,速度都在可接受的范围内,响应也很迅速。

评分:8分

Ecms 50万数据栏目动态列表页

Ecms 50万数据栏目动态列表页

Ecms:帝国的情况总是和dedecms类似,其动态数据列表和翻页的效率都比较高,与其后台管理的速度极不相称。

评分:7分

HBcms:宏博cms要求前台的页面都必须生成静态页面,其动态页面的访问会被自动跳转到静态页面上,无法测试其在动态环境的前台表现。

评分:7分

Supesite 50万数据列表页面

Supesite 50万数据列表页面表页

Supesite:边浏览边生成的效率无疑是最高的,supesite的页面执行时间毫无疑问是最短的,完全感觉不出来50万数据带来的任何问题。

评分:9分

Verycms 50万数据动态列表页面

Verycms 50万数据动态列表页面

Verycms:全动态的列表和翻页效率都不错,但对于只有单一的文章管理功能来说, verycms亮点不多,距离一个优秀的cms系统还有差距。

评分:8分

五、综合评定

综合以上三项的得分情况(比例分配为50%,40%,10%),相比之下我们更看重数据的可管理能力,最终给出的国内免费php类cms的数据负载排名如下(排名仅供参考):

国内免费php类cms数据负载测试结果

编辑选择奖:supesite

特别推荐奖:phpcms

总结评语

经过几轮的测试,supesite和phpcms通过其优异的表现赢得了测评小组的青睐,通过三项得分数据看出他们在数据的管理能力上相比其他的cms更胜一筹。supesite取胜之道在于高效的后台管理和取巧的数据生成方法,优秀的品质使其成为最佳数据负载内容管理系统的不二人选,遗憾的是程序不开源;phpcms则各方面更加平均,尤其是数据生成能力非常优秀,加上程序完全开源,因此有很多的追随者,值得我们大力的推荐,但这套cms近来由于收购的原因,似乎停止了开发的脚步,不免让人担心其未来的发展;HBcms的表现完全出乎意料,在数据管理维护和生成方面有着非常明显的特点,效率也很高,但后台管理界面凌乱,希望能做进一步的改进;php168系统是一个中规中矩的内容管理系统,没有明显的弱项,也没有明显的强项,如果前台模板的效率能提高的话,会更有前途;verycms专注于文章管理领域,后台管理简洁,明快,效率也较高,但文章静态化的速度实在不该恭维,使用这个系统应尽可能减少批量生成文章的操作;帝国cms一直是受到个人站长追捧的一套内容管理系统,但是其在较大数据管理方面的表现差强人意,勉强及格;dedecms也是受到众多个人站长关注的网站内容系统,同时也因为其源代码开放而有相当多的研究者,但是其对较大数据的管理能力确实非常的差,数据量较大的网站不推荐使用。

助易网CMS评测小组    

http://www.cmshelp.com.cn    

http://forum.cmshelp.com.cn   

dedecms2007第一时间试用评测及使用感受

Filed under: dedecms专栏 | 2 Comments »
Posted on

2007年12月2日,众多站长期待已久的dedecms2007在经历了近1年的跳票后,终于放出测试版。到底2007版本和4有什么区别,之前已经传得满城风雨,肥龙第一时间下载试用,现将所见分享如下:

1、dede被众多网友病垢的模板做了美化,采用了DIV+CSS的布局,样式无论前后台都比之前的版本好了很多,看来织梦团队在美工上下了不少功夫,但是测试版还没有实现完全的模板更换,还有部分模型和页面使用的是旧的模板

图1 官方主页

图2 栏目内页

图3 文章页

图4 后台管理界面

2、会员新增个人主页、圈子、企业黄页和问答等功能,为会员提供了更多的功能,但是每个部分的功能都是独立的,和dede的核心集成度不高,应该是从其他类似开源的系统修改组装而成,透过这些功能,可以知道dedecms的发展方向从开源走向商业化,期望满足企业建站的需求。

图5 会员后台

图6 个人空间页面

图7 圈子页面

图8 企业黄页

图9 问答

3、频道模型新增作品、产品、和分类信息,用于满足不同的建站的类型需求,这点的改变还是为了dedecms的商业化做准备,同时造成整个dedecms的系统瞬间变得庞大起来,系统安装后建立的表也由4.0时代的50个增加到84个。在关键的表设计上,依旧采用了主表+附加表的模式,原本系统存在的数据量大会产生的问题没有得到解决,反而会更加严重。

图10 分类信息板块

图11 作品板块

图12 产品板块

4、旧的文章、图集、flash、下载和专题等模型,在4.0的基础上没有大的变化,仅仅做了模板和局部功能的调整。

图13 新的图集显示页面

5、新增一个连载栏目,不太明白这个栏目为什么独立于模型之外单独管理和设置,可以用dedecms方便建立小说类型的网站了

图14 连载栏目

dedecms图集缩略功能完美修改

Filed under: dedecms专栏 | 5 Comments »
Posted on

dedecms的图集功能一直是我觉得很鸡肋的功能,无法直观的自定义缩略图大小,无法选择缩略某个具体图片,无法按照指定数量分页等等。既然开源,我有需要,那就拿起鼠标,修改!

先看一下修改完毕之后的效果图:
piclit-1.gif

piclit-2.gif

主要修改的内容:
1、可自定义小图的尺寸;
2、可自定义缩略图的大小;
3、常用缩略图尺寸可任意选择;
4、可以任意指定具体的缩略图;
5、文章来源可选;
6、完美的缩略图,参考此文:DeDecms中实现更漂亮整齐的缩略图
7、重新布局图集添加页面。

特别提醒:此修改仅针对DeDecms4.0RC肥龙修改版SP1(含原版)

使用方法提醒:
1、缩略图为-lit结尾的图片
2、小图为-lp结尾的图片

代码下载:album.rar
对应覆盖以下五个文件。
dede/album_add.php
dede/album_add_action.php
dede/album_edit.php
dede/album_edit_action.php
dede/inc/inc_archives_functions.php

Have fun!

Page 1 of 3123»