兩個(gè)Python web框架:Django & Tornado比較

在各種語(yǔ)言平臺(tái)中侵俗,python涌現(xiàn)的web框架恐怕是最多的痛倚;猜想原因應(yīng)該是在py中構(gòu)造框架十分簡(jiǎn)單,使得輪子不斷被發(fā)明臊诊。

這里記述一下我了解過(guò)的兩個(gè)py web框架鸽粉,供大家參考,希望能起他山之石的作用抓艳。

Django

Django 應(yīng)該是最出名的py框架触机,Google App Engine甚至Erlang都有框架受它影響。

Django是走大而全的方向玷或,它最出名的是其全自動(dòng)化的管理后臺(tái):只需要使用起ORM儡首,做簡(jiǎn)單的對(duì)象定義,它就能自動(dòng)生成數(shù)據(jù)庫(kù)結(jié)構(gòu)偏友、以及全功能的管理后臺(tái)蔬胯。

Django提供的方便,也意味著Django內(nèi)置的ORM跟框架內(nèi)的其他模塊耦合程度高位他。

應(yīng)用程序必須使用Django內(nèi)置的ORM氛濒,否則就不能享受到框架內(nèi)提供的種種基于其ORM的便利;理論上可以切換掉其ORM模塊鹅髓,但這就相當(dāng)于要把裝修完畢的房子拆除重新裝修舞竿,倒不如一開(kāi)始就去毛胚房做全新的裝修奠骄。

Django的賣(mài)點(diǎn)是超高的開(kāi)發(fā)效率聋庵,其性能擴(kuò)展有限规哲;采用Django的項(xiàng)目渗柿,在流量達(dá)到一定規(guī)模后,都需要對(duì)其進(jìn)行重構(gòu)帖鸦,才能滿足性能的要求家厌。

這方面的經(jīng)驗(yàn)可以參考:http://www.slideshare.net/zeeg/djangocon-2010-scaling-disqus

Ruby的Rails也有類(lèi)似的問(wèn)題先巴;以Twitter為例芜赌,推特到了今日的規(guī)模仰挣,不要說(shuō)Rails,甚至是連Ruby都需要拋棄重來(lái)缠沈。

就我的感覺(jué)Django適用的是中小型的網(wǎng)站椎木,或者是作為大型網(wǎng)站快速實(shí)現(xiàn)產(chǎn)品雛形的工具违柏。

學(xué)習(xí)Python中的小伙伴,需要學(xué)習(xí)資料的話香椎,可以前往我的微信公眾號(hào):速學(xué)Python,后臺(tái)回復(fù):簡(jiǎn)書(shū)禽篱,即可拿Python學(xué)習(xí)資料

這里有我自己整理了一套最新的python系統(tǒng)學(xué)習(xí)教程畜伐,包括從基礎(chǔ)的python腳本到web開(kāi)發(fā)、爬蟲(chóng)躺率、數(shù)據(jù)分析玛界、數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)等悼吱。送給正在學(xué)習(xí)python的小伙伴慎框!這里是python學(xué)習(xí)者聚集地,歡迎初學(xué)和進(jìn)階中的小伙伴后添!

快速推出產(chǎn)品是王道:

?Believe it or not, the bigger problem isn't scaling, it's getting to the point where you have to scale. Without the first problem you won't have the second. - http://gettingreal.37signals.com/ch04_Scale_Later.php

===== Django 模板 =====

Django的模板系統(tǒng)設(shè)計(jì)十分有意思笨枯,也應(yīng)該其框架內(nèi)影響最大、爭(zhēng)議最大的部分遇西。

Django模板的設(shè)計(jì)哲學(xué)是徹底的將代碼馅精、樣式分離;asp.net提倡將代碼/模板分離粱檀,但技術(shù)上還是可以混合洲敢;而Django則是從根本上杜絕在模板中進(jìn)行編碼、處理數(shù)據(jù)的可能茄蚯。

比方說(shuō)压彭,asp.net模板中可以寫(xiě):

<%

?int i;

?for(i==0;i<10;i++){

?....

?}

%>

Django是徹底不支持嵌入類(lèi)似上面的代碼,僅能使用其模板內(nèi)置的函數(shù)渗常;這實(shí)際上壮不,是為其模板構(gòu)造了一種“新語(yǔ)言”;由于此“新語(yǔ)言”十分簡(jiǎn)單凳谦,所以也能夠?qū)⑵淠0逡浦驳讲煌脚_(tái)忆畅。

大多數(shù)情況下,Django的模板功能是足夠的尸执,但對(duì)于特殊(有時(shí)“特殊”也不是十分特殊)的情況家凯,還是需要在模板中嵌入代碼,那么就需要根據(jù)其模板系統(tǒng)的規(guī)則做模板擴(kuò)展如失。有時(shí)候绊诲,模板中直接寫(xiě)一行代碼能夠解決的問(wèn)題,用模板擴(kuò)展實(shí)現(xiàn)后褪贵,會(huì)變成十幾行代碼掂之。

是否容忍在模板中編程抗俄,正是Django模板爭(zhēng)議最大之處。

Tornado

Tornado( http://www.tornadoweb.org )是Facebook開(kāi)源出來(lái)的框架世舰,其哲學(xué)跟Django近乎兩個(gè)極端动雹。

Tornado走的是少而精的方向,它也有提供模板功能跟压;雖然不鼓勵(lì)胰蝠,但作者是可以允許在模板進(jìn)行少量編碼(直接嵌入單行py代碼)的。

如果跟asp.net相比震蒋,Tornado有點(diǎn)類(lèi)似僅實(shí)現(xiàn)了AsyncHttpHandler茸塞;除此之外,全部需要自己去實(shí)現(xiàn)查剖。

好吧钾虐,其實(shí)它有模板,有國(guó)際化支持笋庄,甚至還有內(nèi)置的OAuth/OpenID模塊效扫,方便做第三方登錄,它其實(shí)也直接實(shí)現(xiàn)了Http服務(wù)器无切。

但它沒(méi)有ORM(僅有一個(gè)mysql的超簡(jiǎn)單封裝)荡短,甚至沒(méi)有Session支持,更不要說(shuō)Django那樣自動(dòng)化的后臺(tái)哆键。

假設(shè)是一個(gè)大型網(wǎng)站掘托,在高性能的要求下,框架的各個(gè)部分往往都需要定制籍嘹,可以復(fù)用的模塊非常少闪盔;一個(gè)以Django開(kāi)發(fā)的網(wǎng)站,各部分經(jīng)過(guò)不斷的定制辱士,Django框架剩下的泪掀,很有可能也就是tornado一開(kāi)始所能提供的這部分。

殊途同歸颂碘。

===== HTTP服務(wù)器 =====

Tornado為了高效實(shí)現(xiàn)Comet/后端異步調(diào)用HTTP接口异赫,是直接內(nèi)嵌了HTTP服務(wù)器。

前端無(wú)需加apache / lighttpd / nginx等也可以供瀏覽器訪問(wèn)头岔;但它并沒(méi)有完整實(shí)現(xiàn)HTTP 1.1的協(xié)議塔拳,所以官方文檔是推薦用戶(hù)在生產(chǎn)環(huán)境下在前端使用nginx,后端反向代理到多個(gè)Tornado實(shí)例峡竣。

Tornado本身是單線程的異步網(wǎng)絡(luò)程序靠抑,它默認(rèn)啟動(dòng)時(shí),會(huì)根據(jù)CPU數(shù)量運(yùn)行多個(gè)實(shí)例适掰;充分利用CPU多核的優(yōu)勢(shì)颂碧。

===== 單線程異步 =====

網(wǎng)站基本都會(huì)有數(shù)據(jù)庫(kù)操作荠列,而Tornado是單線程的,這意味著如果數(shù)據(jù)庫(kù)查詢(xún)返回過(guò)慢载城,整個(gè)服務(wù)器響應(yīng)會(huì)被堵塞肌似。

數(shù)據(jù)庫(kù)查詢(xún),實(shí)質(zhì)上也是遠(yuǎn)程的網(wǎng)絡(luò)調(diào)用诉瓦;理想情況下锈嫩,是將這些操作也封裝成為異步的;但Tornado對(duì)此并**沒(méi)有**提供任何支持垦搬。

這是Tornado的**設(shè)計(jì)**,而不是缺陷艳汽。

一個(gè)系統(tǒng)猴贰,要滿足高流量;是必須解決數(shù)據(jù)庫(kù)查詢(xún)速度問(wèn)題的河狐!

數(shù)據(jù)庫(kù)若存在查詢(xún)性能問(wèn)題米绕,整個(gè)系統(tǒng)無(wú)論如何優(yōu)化,數(shù)據(jù)庫(kù)都會(huì)是瓶頸馋艺,拖慢整個(gè)系統(tǒng)栅干!

異步并**不能**從本質(zhì)上提到系統(tǒng)的性能;它僅僅是避免多余的網(wǎng)絡(luò)響應(yīng)等待捐祠,以及切換線程的CPU耗費(fèi)碱鳞。

如果數(shù)據(jù)庫(kù)查詢(xún)響應(yīng)太慢,需要解決的是數(shù)據(jù)庫(kù)的性能問(wèn)題踱蛀;而不是調(diào)用數(shù)據(jù)庫(kù)的前端Web應(yīng)用窿给。

對(duì)于實(shí)時(shí)返回的數(shù)據(jù)查詢(xún),理想情況下需要確保所有數(shù)據(jù)都在內(nèi)存中率拒,數(shù)據(jù)庫(kù)硬盤(pán)IO應(yīng)該為0崩泡;這樣的查詢(xún)才能足夠快;而如果數(shù)據(jù)庫(kù)查詢(xún)足夠快猬膨,那么前端web應(yīng)用也就無(wú)將數(shù)據(jù)查詢(xún)封裝為異步的必要角撞。

就算是使用協(xié)程,異步程序?qū)τ谕匠绦蚴冀K還是會(huì)提高復(fù)雜性勃痴;需要衡量的是處理這些額外復(fù)雜性是否值得谒所。

如果后端有查詢(xún)實(shí)在是太慢,無(wú)法繞過(guò)召耘,Tornaod的建議是將這些查詢(xún)?cè)诤蠖朔庋b獨(dú)立封裝成為HTTP接口百炬,然后使用Tornado內(nèi)置的異步HTTP客戶(hù)端進(jìn)行調(diào)用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末污它,一起剝皮案震驚了整個(gè)濱河市剖踊,隨后出現(xiàn)的幾起案子庶弃,更是在濱河造成了極大的恐慌,老刑警劉巖德澈,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歇攻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梆造,警方通過(guò)查閱死者的電腦和手機(jī)缴守,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)镇辉,“玉大人屡穗,你說(shuō)我怎么就攤上這事『龈兀” “怎么了村砂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)屹逛。 經(jīng)常有香客問(wèn)我础废,道長(zhǎng),這世上最難降的妖魔是什么罕模? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任评腺,我火速辦了婚禮,結(jié)果婚禮上淑掌,老公的妹妹穿的比我還像新娘蒿讥。我一直安慰自己,他們只是感情好锋拖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布诈悍。 她就那樣靜靜地躺著,像睡著了一般兽埃。 火紅的嫁衣襯著肌膚如雪侥钳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天柄错,我揣著相機(jī)與錄音舷夺,去河邊找鬼。 笑死售貌,一個(gè)胖子當(dāng)著我的面吹牛给猾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颂跨,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼敢伸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了恒削?” 一聲冷哼從身側(cè)響起池颈,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤尾序,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后躯砰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體每币,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年琢歇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兰怠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡李茫,死狀恐怖揭保,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情魄宏,我是刑警寧澤掖举,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站娜庇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏方篮。R本人自食惡果不足惜名秀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望藕溅。 院中可真熱鬧匕得,春花似錦、人聲如沸巾表。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)集币。三九已至考阱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鞠苟,已是汗流浹背乞榨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留当娱,地道東北人吃既。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像跨细,于是被迫代替她去往敵國(guó)和親鹦倚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容