如何提高網(wǎng)站訪問速度

2023-12-04    分類: 網(wǎng)站建設(shè)

如何提高網(wǎng)站訪問速度

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

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

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

     第一步,用Ajax提高用戶體驗

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

     第二步,將邏輯移到客戶端的javascript中

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

     第三步,解決進程的

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

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

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

     第五步,盡量減少頁面大小

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

     第六步,用gzip進行頁面壓縮

     當(dāng)我興高采烈的把頁面優(yōu)化結(jié)果貼到了smth bbs上,卻被直接潑了盆涼水。原來百分之二十幾的優(yōu)化結(jié)果,實在太一般了。ylsdd給我了一個很重要的線索,deflate。原來apache的 deflate模塊可以把文件進行g(shù)zip壓縮,壓縮后的文件傳到瀏覽器后再被解壓。主流的瀏覽器都支持這種gzip的解壓操作。于是,我在apache 的配置文
件中加入了Add Output

網(wǎng)站名稱:如何提高網(wǎng)站訪問速度
網(wǎng)頁網(wǎng)址:http://m.kartarina.com/news33/298883.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司標(biāo)簽優(yōu)化面包屑導(dǎo)航域名注冊網(wǎng)站導(dǎo)航外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
主站蜘蛛池模板: 亚洲国产日产无码精品| 国产精品亚洲а∨无码播放| 亚洲另类无码一区二区三区| 无码日韩人妻精品久久| 13小箩利洗澡无码视频网站免费| 无码一区二区三区| 亚洲免费无码在线| 亚洲成在人线在线播放无码| 亚洲自偷自偷偷色无码中文| 亚洲爆乳精品无码一区二区| 亚洲啪啪AV无码片| 国产高清不卡无码视频| 中字无码av电影在线观看网站 | 亚洲Av无码精品色午夜| 好了av第四综合无码久久| 国产精品视频一区二区三区无码| 久久国产精品成人无码网站| 久久久无码一区二区三区| 伊人久久精品无码av一区| 免费人妻av无码专区| AV无码精品一区二区三区| 久久精品无码一区二区无码| 无码日韩人妻精品久久蜜桃 | 人妻av无码一区二区三区| 国内精品无码一区二区三区 | 久久精品无码一区二区app| 亚洲AV综合永久无码精品天堂| 无码人妻精品一区二区三区在线| 日本爆乳j罩杯无码视频| 亚洲AV无码乱码在线观看性色扶| 亚洲精品无码av片| 亚洲成av人无码亚洲成av人| 久久无码av亚洲精品色午夜| 亚洲色无码专区一区| 人妻中文字幕AV无码专区| 国产精品无码一区二区在线观| 国语成本人片免费av无码| 国产成人无码区免费A∨视频网站| 午夜亚洲av永久无码精品| 人妻无码一区二区三区| 在线精品无码字幕无码AV|