织梦dedecms内容生成静态路径的速度优化, 加快html生成的速度 织梦网站的HTML的静态效果,是有助于网站SEO的,但是dedecms在生成HTML的时候,特别是数据量较大的时候就需要生成很长的时间,其实有几个解决方案的。下面来分析第一个,但是这个方法,是需要服务器支持才可以!织梦MVC开发框架是一个精简、迷你的web开发框架,用这个开发框架可以编写基于织梦内容管理系统的扩展功能、模块(插件),甚至可以将其分离出来开发博客、BBS、SNS等。 目录结构说明: |_app |___control 控制器(C) |___model 模型(M) |___templates 视图模板(V) |___libraries 类库 |___data 配置 |___data\helper 小助手 |___static 样式,js,图片文件夹 |___index.php 统一入口文件 统一入口解析地址 http://你的网址/app/index.php?ct=index&ac=save ct=index:控制器入口,对应到目录control中的index.php 如果RunApp()指定了第三个参数,例如问答中RunApp($ct, $ac , 'admin'),说明ct=index:控制器入口,对应到目录control/admin中的index.php ac=save:操作,对应文件index.php中的class index中function ac_save() 控制器中将相关功能操作都存放至一个文件中,例如留言板,可以使用: ?ct=guestbook&ac={do}统一完成,这样也便于静态化部署. 1.控制器开发说明(control): 基本代码结构: class yourctname extends Control { public function ac_save() { } } 控制器可以选择继承一个基类:Control,这个类对应的文件名是/include/control.class.php,这里面含有基类的相关操作说明,这里有几个常用方法: $control->Model(); //载入一个模型。例如问答模块中index.php中的 $this->question = $this->Model('mquestion'),就是在载入了mquestion这个模型。然后我们就可以通过$this->question来调用模型相应操作。实现数据的插入,更新等等操作。调用类的名字可以随便定义,但要保证没有冲突。模型的文件放在model目录中。 $control->Libraries(); //载入一个类。有时开发我们需要一个系统中不存在的类时,我们可以通过这个方法来载入一个自己的类。具体的方法和模型一样。类放在libraries目录中。 $control->helper(); //载入一个小助手。引入小助手是为了更好的帮助我们存放和管理需要用到的Function。 具体的方法和模型一样。小助手放在data\helper目录中。 $control->SetTemplate(); $control->SetTemplet(); // 设定当前操作需要指定的模板; $control->SetVar($k, $v); // 设定模板需要解析的变量,在模板中使用{dede:var.name /}进行调用. GLOBALS['k'] = $k; // 设定模板需要的变量,在模板中可以直接用<?php echo $k;?>方式输出(问答模块基本上都是采用这样的方式输出),这种方式比较适合处理一些复杂的数据,例如数组。 $control->GetVar($k); // 获取设定的模板变量 $control->Display(); // 显示模板解析后的内容 $control->SaveTo(); // 将内容保存到文件 控制器中关于模板的使用操作可以参看DedeTemplate模板引擎,具体可以参看公司内部开发文档中模板说明相关章节. 模型开发说明(Model): class mtype extends Model { public function get_one() { } } 控制器可以选择继承一个基类:Model,这个类对应的文件名是/include/model.class.php,这里面含有数据库类的相关操作说明,这里只有一个方法: $model->dsql(); //实例化数据库操作类。模型中关于数据库类的使用操作可以参看数据库类使用说明(http://help.dedecms.com/v53/archives/functi*****/db/) 模板标签调用说明: 如果在控制器中通过$control->SetVar($k, $v); 这种方式设定的参数,我们通过标签 {dede:var.name /}的方式进行调用。 如果在控制器中通过GLOBALS['k'] = $k;这种方式设定的参数,我们通过标签 {dede:global.name/}的方式进行调用或者直接采用php的方式进行输出。 更多的关于模板标签的使用可以到http://help.dedecms.com/v53/ 上进行查询。 第二种方法: 大家都知道,网上找的关于dedecms生成速度化的办法,多数就是以下2个: 1.关闭副栏目 2.关闭关键字替换 但是经过我实际测试后,这两个办法所产生的效果几乎没有,速度还是20几秒生成20页. 现在来具体的分析下问题: 先排除表索引的问题,因为dede的数据库已经在数据主表(dede_archives)为主要字段都建立了索引。再排除主要内容的提取效率问题,因为页面 生成过程中读取页面中的文章数据,每次需要到主表和附表中select取得id值唯一的数据内容,这个SQL语句的效率我们通过直接在mysql中运行 SQL语句测试,执行时间非常短,因此这也不是最大的瓶颈。 终于在页面生成过程中,我们发现程序执行了数次主表 (dede_archives)查询,并取出符合一组复杂查询条件数据的操作,查询效率非常低,原来是它在影响效率!通过调试跟踪,我们定位了问题的关 键,元凶就是模板中arclist标签。Arclist标签是很多人很喜欢用的标签,因为它比较灵活,能从数据中取出热门、最新、相关等各种类型的文章列 表,但是arclist标签每次都会带着一大推搜索条件去主表中查询,实际上对于一次性生成大量文章来说,如果使用相同的模板,arclist对数据库的 查询操作只是简单机械重复罢了,为此而耗费了大量时间绝对是不值得的。接下来我们给出问题解决的建议。 (责任编辑:laiquliu) |