background image

我每天使用

Rails,修改一个喜爱这种框架和语言的有经验的 Rails 专家所写的 Rails 应

用,七个月后,我却不能断言

Rails 是一个正确的选择了,原因很难表达。我这篇文章的目

的就是想试图把原因说清楚。

我的主要的抱怨,必须要提的,就是性能。我之前就说过这种问题不应该被当作一种语

言的致命缺陷,它只是语言实现中的暂时的问题。所以我不能把这当作

 一个真正的问题,

尽管它是我把现在的应用移植到

PHP 的最主要的一个原因。我可以让 Rails 跑的跟 PHP 一样

快,但那需要提供

2 到 4 倍高的硬件条件。我 估计五年内将还会这样,五年后我也许不必把

程序移植到

PHP。但现在,它不能满足我的要求。

第二,我讨厌

Active Record。Active Record 是一种模式,并不是 Ruby 固有的,在 Rails

的最新版本里是可选择的,但是对它的使用和这种模式已经深入到了

Rails 的 DNA 里了。我

 

之前曾解释过为什么我认为这数据库上的

ORM 不是个好做法,所以我不会再重复解释,但

有一点我需要总结的就是你省去了手工写

CRUD 所获得的效能要大于 ActiveRecord 做傻事

所损失的效能,要花时间搞清楚它是怎么工作的,顺应框架原则,防止它做这样的事情。

第三,我十分的不信任代码自动生成。工具能帮你生成模板式的代码很有用,但你的程

序了却多出了成堆的毫无用处的代码来实现这些目的,这就变的不好

 了。代码生成喜欢“神

奇推理

”,因为生成器并不确定代码某些特别有用的特征究竟是专门写出的还是语言环境固

有自带的。神奇推理是危险的。

代码生成让我想到了

Ruby on Rails 的一个可能是最根本的问题,就是它并不是一种语

言。

Ruby 是一种语言。但 Ruby,它在解决了 PHP 上的一些基本问题外,并没有解决核心问

 

题,那就是现代

web 应用需要一系列的改进:像 routing,model/view 分类,drop-in 功能性等

都是很常见的特征。

Rails 里有,但 这跟 PHP 里的 Zend,Symfony 和 Code Igniter 之类的

MVC 框架一样只是绑上去的绷带。

那么缺的是什么

?

能够取代

PHP 的语言必须十分优秀于 PHP,就如同 PHP 优秀于 Perl 一样。它必须承担

web 应用的主要实现任务,就像 PHP 那样,你的代码的 主要功能就是输出网页 —— 一

个有点激进的要求,它要不适合去做其它的事情,例如当中

shell 脚本语言。我希望有这样

一种语言,它能够承担起我开发一个

MVC 式的 web 应用时的所 有的任务,所有功能都是

核心内置的,不能仅是一个程序包。

问题是,没有这样的一种语言。有一段时间服务器端

JavaScript 看起来将会成为下一个

重要的语言,它能统一

web 应用前端和后端的编程语言。但是这些 JavaScript 上的伟大思想

总是徘徊在一些跑题的行为上,比如

nodejs:事件驱动模式非常的激进和强大,能让你开

发出高性能的应用程序,最大化的使用新式硬件,但这是一种开发服务器端应用程序的思
路,不是

web 页面。并且你仍然需要去写一大堆可怕的 web 页面。另外一些 CommonJS 的成

果例如

ejScript 开始尝试着取代 PHP,但仍没有解决框架问题。

仍在等待

我不得不做出结论,

PHP 的替代者还不存在。Ruby on Rails 很好,但并不比一个 PHP

之上的类似的

MVC 框架强多少,更别提由于 Ruby 自身的效率不高和 ActiveRecord 的

ORM 恶搞带来的双重 打击。Python 看起来并不感兴趣于作为下一代的 web 语言,JavaScript
的服务器端解决方案还刚刚只是个开始。