国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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

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


這里記述一下我了解過的兩個(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)于要把裝修完畢的房子拆除重新裝修,倒不如一開始就去毛胚房做全新的裝修。


Django的賣點(diǎn)是超高的開發(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也有類似的問題;以Twitter為例,推特到了今日的規(guī)模,不要說Rails,甚至是連Ruby都需要拋棄重來。


就我的感覺Django適用的是中小型的網(wǎng)站,或者是作為大型網(wǎng)站快速實(shí)現(xiàn)產(chǎ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ù)的可能。


比方說,asp.net模板中可以寫:

<%

 int i;

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

 ....

 }

%>


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


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


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


Tornado


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


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


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


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


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


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


殊途同歸。


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

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


前端無需加apache / lighttpd / nginx等也可以供瀏覽器訪問;但它并沒有完整實(shí)現(xiàn)HTTP 1.1的協(xié)議,所以官方文檔是推薦用戶在生產(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ù)查詢返回過慢,整個(gè)服務(wù)器響應(yīng)會(huì)被堵塞。


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


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


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


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


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


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


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


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


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


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python Django和Flask框架哪個(gè)好?
這五種 python web 框架,該怎樣選擇?
python 中web 框架 django, web.py, Tornado, Flask, Quixote比較,區(qū)別和優(yōu)缺點(diǎn)
Python 四大主流 Web 編程框架
Flask 入門指南
為什么 Django 能持續(xù)統(tǒng)治 Python 開發(fā)世界
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服