跳转到主要内容
hgneng 提交于 22 October 2015

在叙述完7个使用Drupal的理由之后,我们公平一点,说7个不使用Drupal的理由:

1. Drupal很难学

Drupal很复杂,很难入门。即使它具有不需要编程的CMS特性,对于懂编程的人来说也很难学。Drupal作为CMS,其易学程度绝对和Wordpress不是一个档次。

国内很少人用Drupal,想找本像样的中文书籍都难。运气好能找到的很可能只是讲CMS部分的书籍,而不涉及怎样编写自定义模块内容。换句话说,要想学习Drupal,要直接学习英文的学习资料。

在国内找个Drupal程序员很困难。

不过,需要说明的是,容易入门的东西,精通了也不会让我们有什么过人之处。难学的东西还有很多人学说明学了它确实很有用。

2. Drupal很慢

做了一个简单的测试,打开一个很干净的页面,需要做25秒数据库连接,尽管只需要9ms(当数据查询繁忙的时候很可能不止这个时间)。启用的模块越多,系统运行越慢。我做过的一个很简单的网站数据库里有65张表,一个复杂一些的网站有250张表,这对系统资源是很大的压力。

Drupal的页面缓存功能只对匿名访问有效。

即将发布的Drupal 8会比Drupal 7更慢。

3. Drupal网站容易受到攻击

由于全世界有很多网站使用Drupal,并且源代码开放,Drupal本身也有很多漏洞,这导致Drupal网站很容易受到工具。如果经常更新模块修补漏洞,会对网站稳定性造成影响。因为相对于Linux系统的漏洞补丁,Drupal的补丁质量还是要差很多,很可能升级之后导致部分功能不能正常使用。

但公平地说,所有CMS软件都面临这样的问题,除非你用的CMS实在太少人用,黑客不感兴趣。

4. Drupal不是面向对象也不是MVC结构的

至少Drupal 8之前不是,而目前(2015年10月)Drupal 8还处于RC版。Drupal不是面向对象的设计,不是MVC的结构。是否MVC结构对某些人来说很重要。利用Drupal编写网站没有前后端的分工,基本上需要一个人熟悉HTML、JS、CSS、PHP、SQL整个开发堆栈。

5. Drupal模块的质量不是很高

Drupal模块虽多,但很多质量较差,有不少bug。这也是很多开源软件的问题,好像拿过来用很省事,但是用起来发现挺折腾的。即使是核心模块View,经常也会遇到莫名其妙的问题。

6. Drupal会遇到较多中文相关问题

因为懂中文的Drupal贡献者很少,会遇到很多中文相关的问题。例如翻译缺失,中文全文搜索效率低下等。

7. Drupal的表单流程很复杂、很难理解

我用Drupal写了三年多的代码,我在Drupal官方社区里发布过模块,但是对于form的流程还是一知半解。过去我把很多SQL查询语句写在了form生成的逻辑里,但后来发现在form submit的时候会先执行一次form的流程,这部分的SQL语句会被多余地执行。在form的ajax流程中,有时候会因为缓存而导致状态混乱。

原文链接:http://cto.eguidedog.net/node/122

Drupal 版本

我不知道你自己写过多少、多复杂的Drupal模块,你在开源社区发布过Drupal模块吗?如果你觉得自己已经“理解”Drupal了,恐怕这多数是错觉。Drupal好,但也能不能否认不少地方复杂、难以理解。同样地,复杂和难以理解也不等于Drupal不好。这取决于个人智商和经验。容易学的东西开始效率高,后来效率低。难学的东西开始效率低,后来效率高。

我打个比方,假如你结婚了,考虑要孩子,假如你想要个女儿,但是生出来一个男孩,难道你就要不喜欢他或者不养这个孩子了嘛?不管你喜不喜欢,它都在哪里。如果你不喜欢这个孩子,我怀着一个开放的态度对你表示理解或者尊重,虽然并不认可这样的做法。

你说的问题是客观存在的,尤其是新手来说。但是我们应该用一种开发的态度去做事情。任何框架都不可能完美的解决所有问题。而你能够通过修改代码去完善它。当然这并不轻松,需要你不停的学习和研究,需要时间。

人总是不停的在进步,那么问题来了,如何进步?我献丑的说一说个人看法,一个是学习新的知识,通过获取的新知识来解决遇到的以前无法解决的问题。一个是通过思考已有的知识去解决之前没有办法解决问题。无论哪一种,这都是自我升值。

假如你认为有一种方法可以解决问题,但是有各种各样的困难使自己放弃这个方法而选择另一种。我觉着这没有问题(可以使框架也可以是其他),但是当另外一种办法也遇到困难的时候呢?在整体换一种方法?问题总是会出现的,你现在掩埋了他,但是他依然存在。当然你可能换了一种方案以后,通过那个方案学到的东西可能能回更加深刻的理解以前的方案。不管怎么说,多学点东西总是好的。

说了这么多,我只想说的你可以去试试其他的框架,但要让这种学习变得有价值,不要半途而费。

同时越是困难的东西,学到的只是反而愈多。就像drupal,需要看英文资料,为何不学学简单英文。有些模块品质不高,为何不尝试自己写一些。你今天去做的努力,都会带给你很多有用的东西,问题存在的原因,是因为需要我们去解决它,而不是去绕过它。

1. 我不觉得我没有怀着一种开放的心态去理解的。所有东西都有两面性,我在文章开头引入了另外一个关于为什么使用Drupal的链接。对于一种技术,我们应该了解和承认其好处与坏处,而不是因为我们自己喜欢它而只说它的好处。

2. 我试过其它框架,我也一直在用Drupal,我不知道你在哪里的描述里得出我半途而废的结论。你难道没有看到我说在Drupal社区发布过模块吗?你知道有多少中国人在Drupal社区发布过模块吗?我很喜欢Drupal,你没发现我的原文链接使用Drupal8做的吗?但是喜欢不代表我不能告诉别人它的缺点(或者说要注意的地方)。

3. 我是一个英语专业八级的程序员,你认识过英语专业八级的程序员吗?你觉得我还需要再去学学简单英文吗?我这篇文章是站在普通程序员的立场去写的。你如果觉得这篇文章是我在简单地抱怨Drupal的话,你可能理解错了。