[筆記] Django vs. Tornado.
今天來探討一下這兩個 python framework .一般對於這兩個framework的印象應該是 Django 大而全 , Tornado 性能高 . 而以下針對幾點進行比較
架構:
Django 算是目前最為主流的 python framework ,採用的是 MTV 框架 ,且已有廣大的使用社群 ,battery-include 的特性是形容所有使用者想的到的功能大部分都有已經有相關套件了! 使用者無需再自造輪子,可维護性和開發速度一级棒。而對於 Django 的同步特性導致處理速度較慢的問題,其實可以加上 Celery 解決。Django 的代表有:Instagram,Coursera。
Tornado的話一開始便是為了解決 C10K 問題而設計的,而且架構上較Django 輕量許多,而且最大特特就是在處理需求是採用 異步 / 非阻塞 IO 的處理方式 ,所以相較 Django 的同步處理會快上許多,也可以處理較多的連接處理。因為這些特點,所以Tornado較適合有以下幾點需求時採用(這幾點參考自對岸,所以用語有點…..哈哈)。
- 用戶量大(就是很多使用者)
- 高併發(同時很多使用者連線)
- 大量的http持久連接(通常http是無狀態的,有這需求通常是像線上聊天室之類需要即時回應的)
所以綜觀以上,單在架構上來說,Django已經有很多工具幫使用者建造好了,ORM能讓使用者簡單設定就可以操作Database ,所以較適合大型 or 快速的開發 ,而且往後若需更換 Database 也只需重新簡單設定就好,不會有SQL語法不同的問題。而 Tornado 雖然許多工具都要自建,但在異步處理上比起 Django 優越許多 , 所以開頭說的一個大而全,一個小而精便是這個意思。
開發與維護:
( 這兩點原文是參考自這的,在此只是做個摘要)
當專案因需求需開發或維護時,或許需一個開發團隊來處理這件事情。但要找一個熟悉 Django的Programmer 比起找熟悉 Tornado的 Programmer是簡單許多的。雖然 Tornado 要上手不難,但要熟悉它 "異步的" 編成(大陸用語哈哈) 方式還是需要點時間的。所以若找個新團隊要開發/維護專案,框架的選擇上 Django 是容易上手許多的,熟悉Django的人才也比較好找。
社群:
Django 相較Tornado 已有廣大的使用者,所以有更多已解決過的的問題/bug,也有較完整的 Documents(的確兩者相較,Django 的 Doc 完整許多 Django Doc Tornado Doc),而且在Stackoverflow也有較高的討論聲浪(可參考下圖)。所以在開放上若遇到問題時,Django有較多的資源能利用。
Summary:
總結來說,若要在Django與Tornado上做個選擇,是很難的。Django 雖有大而全的特性,但是它大部分功能是建立在其 ORM 基礎上,比如models, admin, forms 甚至第三方框架 django-rest-framework。Django 的開發效率與維護非常棒,然而Django ORM 深度綁定了該框架,如果把Django ORM 換成其它輪子,那麼也意味著 Django 的諸多優點將從此告別。而Tornado雖小而精,處理異步處理的效能非常強大,但其他工具可能皆須自建,撇除異步的編成方式較難上手不說,較少的社群資源若在開發上遇到瓶頸時就很麻煩了。
若硬要說個比較好的選擇方式,我認為要看專案的性質而定,若是大型且須的一定時程完成的專案,可能用Django是比較好的,開發上會較容易。但若是非常需要處理連線需求的專案(訂票網站、聊天室之類),可能Tornado會是個較好的選擇。