欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
如何提高網(wǎng)站的訪(fǎng)問(wèn)速度 - 從30秒到3秒的改變-django

2

006年10月份,我開(kāi)始對web開(kāi)發(fā)產(chǎn)生了興趣,并決定自己也嘗試開(kāi)發(fā)一個(gè)網(wǎng)站。在此之前,我做過(guò)3年的java application的開(kāi)發(fā),對web開(kāi)發(fā)應該算一無(wú)所知。在比較了java,php,ror,和python后,我選擇了基于python的web框架 - django 。到目前為止,我還認為這是一個(gè)明智的決定。Django高效的開(kāi)發(fā)效率讓我僅僅用一個(gè)月的業(yè)余時(shí)間,就基本完成了網(wǎng)站的開(kāi)發(fā)。這是一個(gè)網(wǎng)絡(luò )書(shū)簽的網(wǎng)站,我加上了一些有意思的特性,讓網(wǎng)站顯得有些與眾不同。

我購買(mǎi)了域名和Dreamhost 的主機空間。Dreamhost支持django,并且第一年的費用只有180元人民幣。2006年11月份,http://www.hpbookmarks.com 上線(xiàn)了。網(wǎng)友們發(fā)來(lái)了善意的評論,“很有創(chuàng )意”,“點(diǎn)意思”,“一些feature很不錯”。同時(shí),還有一個(gè)非常一致的意見(jiàn)就是,“訪(fǎng)問(wèn)速度太慢了”。其實(shí),當時(shí)的情況不只是訪(fǎng)問(wèn)速度慢,而且是相當不穩定。很多時(shí)候是幾個(gè)小時(shí)網(wǎng)站無(wú)法訪(fǎng)問(wèn)。當時(shí),我并沒(méi)有在意,因為我有兩個(gè)自以為“合理”的解釋。第一,我用的是國外最便宜的虛擬主機,國內訪(fǎng)問(wèn)慢是很正常的。第二,django的還處于0.95的狀態(tài),效率和穩定性方面有問(wèn)題也正常。

但是,我慢慢發(fā)現上面的解釋不過(guò)是自己騙自己的借口。很多用dreamhost的網(wǎng)站,訪(fǎng)問(wèn)起來(lái)也很快。而且django也已經(jīng)被成功應用在許多大型的網(wǎng)站。我開(kāi)始認真考慮提高網(wǎng)站速度的問(wèn)題了。畢竟,速度慢的網(wǎng)站很可能在第一次就失去的用戶(hù),他們可以永遠不會(huì )再來(lái)了。終于,我進(jìn)行了下面一步一步的優(yōu)化工作,并且取得了一個(gè)看起來(lái)還不錯的結果。

第一步,用Ajax提高用戶(hù)體驗

由于我的網(wǎng)站上鏈接字體的大小是根據點(diǎn)擊次數決定,所以每次點(diǎn)擊都要提交到服務(wù)器端并記錄次數,再在客戶(hù)端打開(kāi)網(wǎng)站鏈接。這在localhost測試的時(shí)候沒(méi)有發(fā)現問(wèn)題,但是部署到服務(wù)器上,會(huì )感到明顯的等待。解決辦法就是用Ajax。用戶(hù)點(diǎn)擊網(wǎng)站鏈接后就直接打開(kāi),再通過(guò)Ajax將點(diǎn)擊的事件提交到服務(wù)器端記錄。這樣用戶(hù)感覺(jué)不到任何延時(shí)。

第二步,將邏輯移到客戶(hù)端的javascript中

在開(kāi)始的時(shí)候,“網(wǎng)站標簽高亮”和“手氣不錯”的功能都是提交到服務(wù)器端操作,然后返回結果的。后來(lái),我發(fā)現其實(shí)很多邏輯是可以移到客戶(hù)端,由 javascript來(lái)實(shí)現的。Javascript非常強大,可以完成很多復雜的邏輯。將邏輯移到客戶(hù)端的javascript中,可以很有效的減少和服務(wù)器通訊的次數,獲得更好的訪(fǎng)問(wèn)速度。

第三步,解決進(jìn)程的

由于采用的是fastCGI的方式,我配置了django.fcgi??墒?,我發(fā)現系統進(jìn)程中,有大量的django.fcgi進(jìn)程被標記為 < defunct>(失去功能)。這些進(jìn)程會(huì )導致服務(wù)器有時(shí)無(wú)法正常訪(fǎng)問(wèn)。我開(kāi)始嘗試用命令來(lái)kill掉這些進(jìn)程,但是很快發(fā)現這無(wú)法從根本上解決問(wèn)題。后來(lái),我看到一個(gè)老外在blog上提到一個(gè)解決方案,將django.fcgi改名為dispatch.fcgi。原來(lái),dispatch.fcgi是一個(gè)dreamhost的系統進(jìn)程,它的健壯性是可以得到保障的。果然,我將django.fcgi改名為 dispatch.fcgi后,的現象再沒(méi)有出現。

第四步,優(yōu)化SQL語(yǔ)句

SQL語(yǔ)句的執行通常也是一個(gè)很花費時(shí)間的操作。經(jīng)過(guò)檢查,我發(fā)現我的一條SQL語(yǔ)句,是一個(gè)嵌套三層的子表查詢(xún)。而這條SQL還必須是一個(gè)Raw SQL,即不能采用django的OR Maping。這意味著(zhù)不能被cache緩存,每次都是真刀真槍的執行。更失敗的是,經(jīng)過(guò)我的分析,這條SQL完全可以不執行。這是一次設計上的失誤,標
準的over design(過(guò)渡設計)。當時(shí),我是想通過(guò)數據庫得到一個(gè)最精確的統計值。后來(lái)發(fā)現,這個(gè)值完全可以用一個(gè)近似的常量代替。優(yōu)化SQL,尤其是避免不必要的SQL執行,帶來(lái)的效果是非常明顯的。

第五步,盡量減少頁(yè)面大小

隨著(zhù)添加網(wǎng)站越來(lái)越多,有一天我發(fā)現django生成的首頁(yè)已經(jīng)達到了80k。我很清楚這是一個(gè)非常不能被接受的數字。我開(kāi)始檢查頁(yè)面,很快發(fā)現了線(xiàn)索。 第一,因為偷懶,頁(yè)面中很多layout是用空格( )實(shí)現的。第二,因為為了增加代碼可讀行,調試方便,每行生成的頁(yè)面都增加換行符 (\n)。第三,最糟糕的是,大量的用了
inline css。就是將css style直接嵌入標記塊中。于是,我立即動(dòng)手,用css的align解決layout,去掉\n,將inline css抽象到獨立的css文件中。這樣下來(lái),在不更改任何內容的情況下,80k變成了57k。(補充:由于網(wǎng)站鏈接大部分是打開(kāi)新窗口,所以用了大量的 target=_blank。在ylsdd的提示下,在html的head里增加了,又節約了4k。)

第六步,用gzip進(jìn)行頁(yè)面壓縮

當我興高采烈的把頁(yè)面優(yōu)化結果貼到了smth bbs上,卻被直接潑了盆涼水。原來(lái)百分之二十幾的優(yōu)化結果,實(shí)在太一般了。ylsdd給我了一個(gè)很重要的線(xiàn)索,deflate。原來(lái)apache的 deflate模塊可以把文件進(jìn)行g(shù)zip壓縮,壓縮后的文件傳到瀏覽器后再被解壓。主流的瀏覽器都支持這種gzip的解壓操作。于是,我在apache 的配置文
件中加入了Add OutputFilter DEFAULT html css js的語(yǔ)句。經(jīng)過(guò)測試,css,js這些文本文件的壓縮后都只有原來(lái)尺寸的25%。這里,和大家分享一個(gè)網(wǎng)站http://www.port80software.com/products/httpzip/compresscheck 它的作用是檢測你的網(wǎng)站是否被壓縮,以及壓縮比率等。

第七步,回歸靜態(tài)頁(yè)面

新的問(wèn)題又來(lái)了。原來(lái)deflate只支持靜態(tài)文件的壓縮。而我的首頁(yè)是django動(dòng)態(tài)生成的,deflate模塊沒(méi)有進(jìn)行壓縮。我突然想到,網(wǎng)站的首頁(yè)為什么不能是靜態(tài)頁(yè)面呢?于是,我增加了一個(gè)runtime的api,這個(gè)api提供的是和原來(lái)一樣由django動(dòng)態(tài)生成的頁(yè)面。我又寫(xiě)了一個(gè) python的程序,通過(guò)urllib2模塊下載這個(gè)動(dòng)態(tài)生成的頁(yè)面,并保存為index.html。我將網(wǎng)站的root映射到index.html這個(gè)靜態(tài)頁(yè)面。最后,通過(guò)linux crontab定義一個(gè)行為,每五分鐘執行一下這個(gè)python程序,生成新的index.html。值得一提的是,由于網(wǎng)絡(luò )原因,python程序不一定每次都能準確完整的下載動(dòng)態(tài)生成的頁(yè)面。所以我們必須再進(jìn)行一個(gè)校驗算法。當頁(yè)面大小要超過(guò)一定數字,頁(yè)面中出現某個(gè)校驗字符串的情況下,才保存 index.html。這樣,每次用戶(hù)提交的訪(fǎng)問(wèn),不是由服務(wù)器端動(dòng)態(tài)生成頁(yè)面,極大的節省了服務(wù)器端的開(kāi)銷(xiāo)。而靜態(tài)頁(yè)面又可以有效的被deflate壓縮。最后結果,首頁(yè)被壓縮為13k,為原來(lái)的22%。唯一的區別就是,新提交和推薦的網(wǎng)站不能立即出現在首頁(yè)。但是我認為,這應該是可以被接受的。

至此,網(wǎng)站的優(yōu)化工作基本完成。網(wǎng)站的訪(fǎng)問(wèn)速度從原來(lái)30秒以上,縮短到3秒左右,應該說(shuō)算是一個(gè)飛躍。雖然,3秒的速度也不是非???,但是,考慮到虛擬主機等客觀(guān)原因,這個(gè)結果我還是滿(mǎn)意的。原來(lái)感覺(jué)我的網(wǎng)站很慢的朋友們,也可以再試試。

以上的優(yōu)化方案出自我的個(gè)人經(jīng)驗,并不一定適合所有網(wǎng)站。但是,它告訴我們一個(gè)事實(shí)。影響網(wǎng)站訪(fǎng)問(wèn)速度的不僅僅是服務(wù)器配置,網(wǎng)絡(luò )帶寬。也許,你糟糕的設計,低效率的方案也是致命的因素。應當注意的是,優(yōu)化工作也不能匆匆上手。一定要仔細研究,具體情況具體分析,得到統計數據,找到真正的問(wèn)題所在,再開(kāi)始優(yōu)化。相信自己,提高網(wǎng)站的訪(fǎng)問(wèn)速度并不是不可能。畢竟,Nothing is Impossible。祝大家成功。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
網(wǎng)站構建 初級教程
優(yōu)化網(wǎng)站加載速度的14個(gè)技巧
10個(gè)幫助你優(yōu)化網(wǎng)站的 .htaccess 技巧
[打造自己的監控系統]使用Django監控Oracle TOP SQL 介紹
檢查多余CSS代碼的神器
火狐———Stylish樣式列表
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久