iT邦幫忙

DAY 3
4

建立API為中心的輕量級網站系列 第 3

Sinatra 與 Ruby on Rails 的比較

較為廣知的 ROR3 該有的功能都裝好,
可以快速建置功能完整的網站。
當熟悉 ROR3 後,
會尋求回應快速而輕量的網站,
雖有其他framework選擇……
Sinatra為何輕
Sinatra 採用 DSL 語法,
也啟發了其他程式語言的framework的建立。
Frameworks inspired by Sinatra

比較一下 rails 3 及 sinatra 安裝時所要用的套件,
在乾淨的 gem 的環境下安裝 rails 就裝了 29 個gems:

$ rvm gemset use ror3
Using ruby-1.9.3-p194 with gemset ror3
$ gem list

*** LOCAL GEMS ***

actionmailer (3.2.8)
actionpack (3.2.8)
activemodel (3.2.8)
activerecord (3.2.8)
activeresource (3.2.8)
activesupport (3.2.8)
arel (3.0.2)
builder (3.0.3)
bundler (1.2.1)
erubis (2.7.0)
hike (1.2.1)
i18n (0.6.1)
journey (1.0.4)
json (1.7.5)
mail (2.4.4)
mime-types (1.19)
multi_json (1.3.6)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.2)
rack-ssl (1.3.2)
rack-test (0.6.2)
rails (3.2.8)
railties (3.2.8)
rake (0.9.2.2)
rdoc (3.12)
rvm (1.11.3.5)
sprockets (2.1.3)
thor (0.16.0)
tilt (1.3.3)
treetop (1.4.11)
tzinfo (0.3.33)

而 Sinatra 只裝 4 個 gems:

$ rvm gemset use sinatra
Using ruby-1.9.3-p194 with gemset sinatra
$ gem list

*** LOCAL GEMS ***

bundler (1.2.1)
rack (1.4.1)
rack-protection (1.2.0)
rake (0.9.2.2)
rvm (1.11.3.5)
sinatra (1.3.3)
tilt (1.3.3)

Rails 用到這麼多的 gems,
分析起來是 rails 本身包了幾項的功能:

然而在 ruby 的世界裡,
有這幾大功能的套件,
都可以有其他的選擇:

在上面的兩個套件裡都有 rack 套件,
Rack 是 web server 介面,
什麼是 Rack,可參考:
Rack 與 Rack middleware
所以 Rack 為核心的話,
可以像這樣子的其他套件做組合:

而 Sinatra 其實只有像這樣子的組合:

ROR 是以 MVC 的架構考量,
Sinatra 並不以 MVC 為目的,
若有 MVC 的需要,
ORM或Template可依需選擇所喜好的套件。

如果要做 API server,
或者輕量化的網站,
其他功能不需要用到,
效能或反應上的考量,
Sinatra是比較好的選擇。

系列文章列表


上一篇
為何要考量網站API的建置?
下一篇
一個檔案 Sinatra 超簡單上手
系列文
建立API為中心的輕量級網站30

1 則留言

我要留言

立即登入留言