Wee:基于 Continuation 的 Ruby Web 框架

  • Mirko Stocker
  • 李明(nasi)

2009 年 3 月 28 日

话题:RubyWeb框架语言 & 开发

Wee(Web Engineering Easy 的简称)是一个类似Seaside的 Web 框架,它使用 Continuation,这使得开发者可以“轻松漂亮地完成任务”,Wee 的作者Michael Neumann 如此形容到。Wee 也提供可复用组件,这种组件“和 GUI 中的 Widgets 类似,开发一次,就可以随处使用”,它的目标是让 HTML 的 GUI 应用可以组建化,而不是让其 REST 化。即将发布的 2.0 版本也将完全基于 Rack。

Neumann 在一篇关于 Wee 的博文中示例说明了使用 Continuation 的代码在可读性上有多么明显的优势。使用 Continuation,简单的序列流就可以写成这样:

 callcc page1
 callcc page2
 callcc page3

还有另一种连续传递风格(Continuation Passing Style)的写法:

 call page1 do
   call page2 do
     call page3
   end
 end

如果 Continuation 这么有用,那为什么不是所有框架都采用 Continuation 呢?没有出现更多基于 Continuation 的 Ruby Web 框架,其中一个原因就在于:Ruby 1.8 存在内存泄露。虽然 Brent Roman 的 MBARI 补丁已经修复了这个问题,但是还没有引入到官方的 Ruby 1.8 中(一旦 Engine Yard 开始接管 Ruby 的维护工作,应该就会引入这个补丁)。Ruby 1.9.1b 不再存在内存泄露的问题,Wee 也得益于这一点

Ruby 1.9.1 中 10000 个请求(1 个线程中)需要花费 16 秒,内存占用为 12MB,而同样的请求在 Ruby 1.8.7 中会占用多达 329MB 的内存,时间上也长达 56 秒。

看来 Wee 是人们选择升级到 Ruby 1.9 的一个有力理由,而由于Merb 也将合并到 Rails 3.0之中,所以 Wee 很可能成为取代 Rails 的最佳选择。

查看英文原文:Wee: Continuation Based Ruby Web Framework

RubyWeb框架语言 & 开发