iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 1
2
Modern Web

新時代的網頁框架比較-- 淺談Rails、Django、Phoenix、Laravel系列 第 1

動態網站框架:Rails、Django、Laravel、Phoenix、Sinatra

作為三十天鐵人挑戰賽的第一篇,我想先說明一下系列選題的緣起。標題中除了前三種常見熱門框架之外,Phoenix (Elixir)目前還非常罕見,Sinatra(Ruby)則是鋒芒完全被rails掩蓋。這邊我說明一下選擇框架的原因:

  • Python與PHP自然是網路圈相當熱門的語言,其中有非常多不同框架存在,但我挑選最多人使用的(Django、Laravel)做為比較參考
  • Sinatra與Rails剛好是兩種極端,我覺得有提出來比較設計概念的意義
  • Elixir是相當新的一種函式導向語言(functional programming language),語法與Ruby有諸多相似之處,所以比較Rails與Phoenix我覺得應該會有些收穫
  • 理論上好像也該挑一種java的網頁框架來寫(比方說Play),但我實在是不想再回去碰java了,所以果斷放棄。

之所以想寫這個系列的緣起是前陣子在學Elixir,當我知道居然沒有迭代器時我實在相當震驚,震驚到當下立馬發臉書動態:

這個週末利用 Code School Free weekend學 #Elixir,得知一個驚嚇到想要馬上來分享的事實:(雖然大部份人可能不懂驚嚇的點)
「Elixir居然沒有for each方法!!!」
在Elixir 裡面要利用recursion方法(自我呼叫),寫兩個條件不同的同名函式來實作loop的效果。雖說之前就知道不同語言實際上蘊含著不一樣的思考模式,但第一次遇到這樣的差異還是覺得很吃驚。
Elixir的特性是效能與高度可取用性,可能就是因為for each是效能殺手,所以先天就不支援吧(?)。雖然還是可以自己寫類似的方法就是。 link

這件事引發我很大的興趣,在我心中視為現代程式語言基本元素之一的迭代器,居然在一個新的程式語言內會沒有,也激起我對其他語言的好奇心。我是不是在不知不覺之間把Ruby on Rails視為標準答案,而忽略了其他可能,希望這樣的比較可以讓我揭開過去的盲點。

作者按:感謝網友指正,Elixir是有each與for方法的,看來這系列是出於一個誤會XD

接下來簡單簡介一下這幾種網頁框架:

Rails (Ruby)

http://rubyonrails.org/
沒想到我也有需要介紹rails的一天。

直接引用別人的介紹

Ruby on Rails 是一個已經被許多公司採用的 Web 框架,是 Ruby 程式語言中 Web 框架的鼻祖,獲得了大量開發者的採用。DHH(Rails 的創始人)曾用它15分鐘左右創建一個博客。Rails 的一大特點是約定優於配置(convention over configuration)。這意味著,它比較模式化、標準化和「約定化」,開發者通常做的是相同的事情,可以讓代碼寫到最少。Rails 還使用了 MVC(Model-View-Controller),讓架構更有組織性,更周密。

Django (Python)

https://www.djangoproject.com/
就我先接觸rails的理解,Django就像是運作在python上的rails框架,一樣有 MVC架構(但稱為MVT Model-View-Template)。

Laravel (PHP)

https://laravel.com/
PHP算是相當知名且成熟的網路語言,但也長期被詬病為「義大利麵」(意指寫得一團混亂)。但這些問題在引入框架後就可以得到顯著的改善。大部份的介紹都不諱言Laravel參考了Rails的概念,因此也可以理解為運作在PHP上的rails。

Phoenix (Elixir)

http://phoenixframework.org/
不光是框架,這個語言本身知名度都還相當不足。Elixir 是架構一個在古老語言(Erlang),2013年才誕生,是一種函式導向的程式語言(有別於物件導向諸如Java、Ruby)。語法相當接近Ruby,因為語言的作者是Rails的核心團隊成員之一(又是一個像Rails致敬的產物?!),所以有相當多的Rails工程師來學。號稱善於處理 concurrency 問題,利於開發分散式/雲端運算平台。而Phoenix是Elixir的網頁框架。

Sinatra (Ruby)

http://sinatrarb.com/
本身是Ruby的一個Gem。最引人注目就是四行程式碼將伺服器跑起來,相信所有第一次接觸的人都會大為驚嘆他的簡潔性。但對我來說最大的疑惑就是,如果按照需求把最今實踐都跑起來,會不會跟rails有九成像?目前看到比較多的使用情境是API server之類的輕量服務。

至於各框架的優點、缺點,詳細比較,就留待這三十天中娓娓道來。


下一篇
Sinatra 與 Rails 比較
系列文
新時代的網頁框架比較-- 淺談Rails、Django、Phoenix、Laravel31

2 則留言

0
taiansu
iT邦新手 5 級 ‧ 2017-12-05 03:53:08

/images/emoticon/emoticon42.gif有這樣的比較真好。

想要指出一些小問題,首先 Elixir 是有 Enum.each/2 可以用的。它的 list comprehension 語法 for/1 也偶爾被拿(錯)來做類似的事(雖然其實這語法基本上不是用來做迭代的):

for n <- 1..10 do
  IO.inspect n
end

再來 Phoenix 框架是 Chris McCord 做的,他跟語言作者 Josè Valim 甚至不是同一家公司的。此外若試著去跟 Django vs Rails 對照,這個框架在許多哲學與範式上都與前兩個 MVC 框架極度不同,像是沒有 Model 的概念之類的。而從 1.3 版開始,連基本結構都大異其趣。說受到 Rails 影響是一定有的,但是想來是不會用"致敬"這個詞。

期待你接下來的文章!

另外可以偷推 Elixir.tw meetup 及明年的 Ruby & Elixir conf Taiwan 嗎? XD

Bater iT邦新手 5 級 ‧ 2017-12-05 12:32:18 檢舉

感謝你的回饋,沒想到第一天就有人報錯XD

flowblue iT邦新手 5 級 ‧ 2018-04-25 08:03:23 檢舉

for each 不可能有效能問題吧。比起 recursion,for 只會快不會慢。

0
逮丸逮丸
iT邦大師 1 級 ‧ 2017-12-05 17:48:39

你也太厲害了,
一下就跨那麼多不同的程式語言的framework…

Bater iT邦新手 5 級 ‧ 2017-12-05 19:59:45 檢舉

我只是挖一個大洞給自己跳,逼自己要生出東西來

我要留言

立即登入留言