跳转到主要内容
supertree 提交于 25 August 2015

首先,我并不是一个小白用户,互联网从业四年,当然,也还没达到一个超级开发人员的水平,只是用php+mysql做商城(纯手写的,没有用框架,当然,三四线城市的需求,没有那么强大),做过企业站,熟练掌握jqurey与dedecms,及其二次开发,最近突然蒙发其想,想转投drupal,只是研究了半个月时间,有几个问题让我百思不得其解:

1,为什么一个内容类型,加个字段,数据库里就得加一张表?这样子有什么好处?与dede的自定义模型,加个字段,就是在一个自定义的模型表里,真的加一个字段而已,drupal的这种作法,如果要做一个复杂点的医院网站的话,那数据库不就得加到个两三百张的吗?这也太繁杂了,难道分开这么多表,会有利于性能的提升?

2,drupal后台运行迟缓,即使刚刚安装下来的,也完全没有dede的后台快,无论在本地wamp环境中,还是在服务器上lamp环境中,都运行缓慢,叫人着急。

3,前台未登录用户的访问速度还可以,但一旦登录了之后,就开始迟缓了起来,这是为什么?这样的情况,真的适合来做一个社区或者是论坛型的网站吗?

4,drupal搭出来的站点,如果做医院网站的专题页,该如何进行,只能直接使用静态页面吗?

5,drupal的前端表现页,为什么这么复杂差劲,为什么它不能像dede一下,用个htm模板,数据内容直接在htm模板中,用标签进行调用,这么直观地表现出来呢?

6,dede,对一个前端人员来讲,只需要学会使用它的标签,就可以直接来写dede的页面了,但drupal,居然还得要求有种类后台内容的种种配置,更别提使用一些模块之后,那产生出来的各种乱七八糟的代码,是如何是让前端人员抓狂了?难道,drupal真的只是一个人的开发?

7,drupal生成文章时的路径问题,怎么就那么地复杂?路径层级太深(clean url之后,也有三、四层结构),这种东西,怎么会有利于蜘蛛的抓取?

8,drupal的缓存,难道会比dede所生成的静态页面,响应速度更好的吗?

                            未完待续……                                2015-8-25

Drupal 版本

我觉得dede和Drupal是两个不同属性的东西,所以直接类比是有失偏颇的。dede是纯粹的CMS,你可以用来做门户,做企业网站,从这个角度,网站结构,内容类型都是比较简单的,但Drupal不一样,Drupal是CMF,如果让Drupal做同样的事情,我们只需要在Drupal上加一层约束,就可以达到和dede同样的效果,但Drupal最大的特色是扩展性,你可以用Drupal创业,做你想做的任何复杂逻辑,比如目前比较火的在线教育项目,互联网金融项目等,而dede在这方面是无力的。

下面就你的几个问题,我回答一下,为了增加一点点分量,我也自我介绍一下,04年开始做PHP开发,09年转Drupal,截止目前有6年多Drupal开发经验,11年PHP开发经验,我结合我的理解回答你的问题,未必全对,仅供参考。

1. Drupal默认安装中,最大化的考虑的是灵活性,然后考虑的是性能,Drupal的一个字段一个表的方式就体现出这一特点,首先这样很灵活,其次并没有太影响性能,至于操作这样的多表,Drupal有抽象的API层可以用。当然如果你想用传统的一张表存储多个字段,也是可以做到的,只是需要额外的模块和编码。

2. 关于Drupal慢的问题确实是存在的,这可能可以算是Drupal灵活性的副作用,一直以来Drupal都是在保证灵活性的前提下进行性能优化,所以最常用的优化方式仍然是缓存。也就是说对于一个复杂度比较高的项目来说,没有缓存的时候确实比较慢。如果是开发环境,建议购买高配的电脑,并且需要开启一些优化方案,比如apc, memcache。

3. Drupal默认是支持匿名用户缓存的,但注册用户缓存的支持模块也是有的,只是更复杂,不是开箱即用的方案。

4. 专题系统不是Drupal的默认支持的,通过安装一些模块可以实现,Drupal里很多功能都需要借助模块并且需要配置才行。

5. 同理,Drupal前端机制也是为了最大限度的灵活性,我们可以在上层建立一个针对具体业务场景的数据访问标签,从而达到和dede同样的效果,不过当你可以完全hold住主题层的时候,往往会觉得数据访问标签的方式不够灵活,最终还是用Drupal的方式解决问题。

6. Drupal为了保证开发效率,模块一般确实会输出一些默认的代码结构,这样可以快速生成页面,如果有的前端有一点代码洁癖,需要完全把控所有输出的HTML,也是可以做到的,当然这会增加工作量。

7. 这个问题最好回答,Drupal的路径分为内部路径和别名,别名完全是自定义的,你可以借助Pathauto模块,按照自己希望的方式组织网站的路径结构。

8. dede的缓存机制是内置的,也没有太多灵活性,基本就是静态化,也可以说这样就已经将优化做到极致,但Drupal在灵活性的前提下,优化方案也不是单一的,有时要借助系统软件,比如Varnish,Boost, Memcache, Opcache。Drupal的使用场景比较复杂,仅仅具有静态化是不够的,而且Drupal也是可以支持全面静态化的,需要安装模块而已。

总之,Drupal和dede完全不同,Drupal要比dede复杂几个数量级,可以做更多的事情,需要更全面的知识才能驾驭,有一定的性能问题,但可以通过性能优化解决。用dede你感觉你在做一个网站,用Drupal,你感觉你在做一个系统,做一个解决方案,不在一个层次上。

1.字段分表可以避免有一种情况:你的数据类型字段太多的话,mysql表容量是有上限的,一张表放不了太多的字段,D6时就是一张表存放一个内容类型的所有字段,之前遇到过这个问题。

如果对性能有高要求,不建议使用太多模块搭积木式的做功能。有些功能你可以自己建表实现,不必所有都是节点。比如登录注册你都可以自定义实现,不走drupal的正规全套流程,但是要自定义的话,api还是要了解熟悉的。如果你是刚接触drupal,可能做不到随心定制,一开始都是求快速开发,先多做一下服务器级别的性能优化,后期慢慢的再优化改版模块功能。

4.专题这个问题,以我对phpcms的了解,它们的专题一般都是有固定的针对性的内容类型。比如视频,新闻,产品。包含了数据表设计和一套固定的模版套系。而drupal不是这类的cms,它只提供你最基础的数据结构和模版机制,你可以扩展到任何主题类型。

5.你这么问,还是因为看到它们有提供专题模版里的标签,是现成的!咱们的模版也都是有变量定义的方法的,只不过我们没有预先设好你要的主题,所以没有现成的业务标签给你用,只有一些基础的变量使用,但基本也都够了,比如节点页模版,相当于你的专题内容单页。怎么呈现就看你的设计了。

6.你完全可以只把drupal当作一个数据结构+api提供者,前台自己写html来调用后台数据输出呈现,不用views,panels这些html结构提供者,甚至也不用区块,区域的概念。这种流程就是先有切图,再套数据。要求你对主题模版机制和相关api都熟悉。随着猪龄越来越高,可能会更喜欢向这种方式转移...也不再是all is node!控制更灵活,前端更简洁,性能也更好。

8.静态页面,drupal有第三方boost模块可以生成,只不过默认没有而已,因为不是所有项目都需要静态页面的。

 

我在实际中遇到不同的主题制作流程:

  1. 后端先输出内容,主题开发者再按照设计图制作主题。
  2. 前端先切图,后端用Drupal的布局方式(Panels, Display Suite等)创建主题,通过覆写模板或函数来还原前端的切图。
  3. 前端先切图,后端直接使用前端制作好的静态HTML作为页面模板框架来创建主题(如流云说的第6点)。

目前我倾向于使用第3种,大家使用的是哪种流程?