Sinatra為何輕
Sinatra 採用 DSL 語法,
也啟發了其他程式語言的framework的建立。
比較一下 rails 3 及 sinatra 安裝時所要用的套件,
1. $ rvm gemset use ror3
2. Using ruby-1.9.3-p194 with gemset ror3
3. $ gem list
4.
5. *** LOCAL GEMS ***
6.
7. actionmailer (3.2.8)
8. actionpack (3.2.8)
9. activemodel (3.2.8)
10. activerecord (3.2.8)
11. activeresource (3.2.8)
12. activesupport (3.2.8)
13. arel (3.0.2)
14. builder (3.0.3)
15. bundler (1.2.1)
16. erubis (2.7.0)
17. hike (1.2.1)
18. i18n (0.6.1)
19. journey (1.0.4)
20. json (1.7.5)
21. mail (2.4.4)
22. mime-types (1.19)
23. multi_json (1.3.6)
24. polyglot (0.3.3)
25. rack (1.4.1)
26. rack-cache (1.2)
27. rack-ssl (1.3.2)
28. rack-test (0.6.2)
29. rails (3.2.8)
30. railties (3.2.8)
31. rake (0.9.2.2)
32. rdoc (3.12)
33. rvm (1.11.3.5)
34. sprockets (2.1.3)
35. thor (0.16.0)
36. tilt (1.3.3)
37. treetop (1.4.11)
38. tzinfo (0.3.33)
而 Sinatra 只裝 4 個 gems:
1. $ rvm gemset use sinatra
2. Using ruby-1.9.3-p194 with gemset sinatra
3. $ gem list
4.
5. *** LOCAL GEMS ***
6.
7. bundler (1.2.1)
8. rack (1.4.1)
9. rack-protection (1.2.0)
10. rake (0.9.2.2)
11. rvm (1.11.3.5)
12. sinatra (1.3.3)
13. tilt (1.3.3)
Rails 用到這麼多的 gems,
分析起來是 rails 本身包了幾項的功能:
然而在 ruby 的世界裡,
有這幾大功能的套件,
都可以有其他的選擇:
在上面的兩個套件裡都有 rack 套件,
Rack 是 web server 介面,
什麼是 Rack,可參考:
所以 Rack 為核心的話,
可以像這樣子的其他套件做組合:
而 Sinatra 其實只有像這樣子的組合:
ROR 是以 MVC 的架構考量,
Sinatra 並不以 MVC 為目的,
若有 MVC 的需要,
ORM或Template可依需選擇所喜好的套件。
如果要做 API server,
或者輕量化的網站,
其他功能不需要用到,
效能或反應上的考量,
Sinatra是比較好的選擇。
參考資料:http://www.slideshare.net/adamwiggins/rails-metal-rack-and-sinatra
原文作者:iT邦大師 twtw
沒有留言:
張貼留言