提升網站速度

 不少朋友都用虛擬主機來作網站,將網頁文件存放在虛擬空間上,可是頁面內容一多,網站打開的速度就顯得特別慢,若是您碰到這種狀況,與其尋求更好的 空間,不如經過優化網頁代碼來取得滿意的速度。筆者總結了一些切實可行的方法,製做主頁時,如下的方法能夠令你的網頁速度大大提升。html

 

  1、記得幫頁面減肥web

  咱們瀏覽網頁其實是將虛擬主機中的網頁內容下載到本地硬盤,再用瀏覽器解釋查看的。下載網頁的快慢在顯示 速度上佔了很大比重,因此,網頁自己所佔的空間越小,那麼瀏覽速度就會越快。這就要求在作網頁的時候遵循一切從簡的原則,如:不要使用太大的Flash 畫、圖片等資源。乾淨、簡潔的頁面會給人一種思路明朗的感受。算法

 

  2、如不必,儘可能使用靜態HTML頁面數據庫

  衆所周知,ASPPHPJSP等程序實現了網頁信息的動態交互,運行起來的確很是方便,由於它們的數據交互性好,能很方便地存取、更改數據庫的內容,使網站「動」起來,如:論壇、留言板等。可是這類程序必須先由服務器執行處理後,生成 HTML頁面,而後再「送」往客戶端瀏覽,這就不得不耗費必定的服務器資源。若是在虛擬主機上過多地使用這類程序,網頁顯示速度確定會慢,因此沒有必要, 請儘可能使用靜態的HTML頁面。apache

 

  3、不要將整個頁面內容塞到一個Table編程

  這是網頁設計的問題了,不少站長爲了追求頁面統一對齊,將整個頁面的內容都塞進了 一個Table(表格)裏,而後再由單元格td來劃分各個「塊」的佈局,這種網站的顯示速度是絕對慢的。由於Table要等裏面全部的內容都加載完畢後才 顯示出來的,若是某些內容沒法訪問,就會拖延整個頁面的訪問速度。正確的作法是:將內容分割到幾個具備相同格局的Table中去,不要全都塞到一個 Table裏。瀏覽器

 

  4、將ASPASPXPHP等文件的訪問改成.js引用緩存

  這在ASPASPXPHP等程序設計時應該注意的,若是你要在 靜態的HTML頁面裏嵌入動態的數據,而這些動態的數據是由ASPPHP等程序來提供的話,會使用如下的語句引用:,這樣的話,每次有一我的訪問你的網 站,服務器就要執行並處理一次tongji.asp文件,從數據庫抽取相應的數據,再輸出給網頁顯示,若是有幾萬我的同時訪問,就要執行幾萬次,後果就可 想而知。建議在這些程序中將數據動態生成到一個1.js文件中去,而後在首頁經過 < SCRIPT src="http://www.XXX.com/1.js">< /SCRIPT> 這樣的代碼來引用該1.js文件。這樣,數據顯示的任務就交給客戶端的瀏覽器去作,不會耗費服務器的資源,顯示速度天然就很快.安全

 

  5、使用iframe嵌套另外一頁面服務器

  若是你要在網站上插入一些廣告代碼,又不想讓這些廣告網站影響速度的話,那麼,使用iframe最合適不過了。方法是:將這些廣告代碼放到一個獨立的頁面去,而後在首頁用以下的代碼將該頁面嵌入便可,這樣就不會由於廣告頁面的延遲而拖了整個首頁的顯示,代碼以下:

  < IFRAME marginWidth=0 marginHeight=0 src="http://www.***.com" frameBorder=0 width=468 scrolling=no height=60 leftmargin="0" topmargin="0">< /IFRAME>

  其中http://www.***.com是被引用文件的路徑。

 

  6、講究網站計數器代碼放置的技巧

  在網頁裏放置計數器能夠統計網站的訪問流量,爲站長和廣告商家提供訪問依據,可是,無論功能 有多強大的網站統計系統,都會有出故障的時候。若是直接把統計代碼放到頁面內容的前面,或者放在一個Table或者div標籤裏,那麼在計數器不能訪問的 時候,你的頁面上那個Table或者div就會產生幾十秒鐘的延遲,致使頁面很長時間才能訪問。因此,要提升網站的速度,就要講究統計代碼放置的位置,正 確的方法是:把統計代碼放到頁面的最下面,而且不要和頁面內容同在一個Table或者div標籤裏。能夠在頁面代碼的最下方直接放置統計代碼,或者在最下 方單獨作一個Table或者div來放置計數器。這樣,在計數器不能訪問的時候,你的網站速度也不會受到絲毫影響。

 

  7、友情連接的學問

  網站之間互相作連接能夠增長網站的宣傳效果,作LOGO圖片連接更能準確地描述網站的主題和定位,宣傳效果 會大大的加強,但圖片連接作得太多,必然會影響網頁的顯示速度。不少站長都喜歡直接引用友情網站上的圖片URL,這樣圖片要先通過加載才能顯示的,各個友 情網站的訪問速度不同,整個表格都要等圖片都下載完了才能顯示出來,這樣大大下降了網頁的速度。所以,作友情連接時應儘可能作到:

 

  1. 只作文字連接:作文字連接是不會延遲網頁速度的。

  2. 將全部連接放到一個獨立的分頁去,而後在首頁連接上該頁。

  3. 若是友情連接必定要出如今首頁,請將連接所在的整個Table放到頁面的最下方,由於頁面是由上到下逐行顯示的,將其放到頁面的最下方,不會延遲其餘內容的顯示。

  4. 友情連接的LOGO圖片先下載後再傳到本身的網頁空間,這樣,速度由本身的網站空間決定而不受友情網站的影響。

 

       一個小型的網站,好比我的網站,可使用最簡單的html靜態頁面就實現了,配合一些圖片達到美化效果,全部的頁面均存放在一個目錄下,這樣的網站 對系統架構、性能的要求都很簡單,隨着互聯網業務的不斷豐富,網站相關的技術通過這些年的發展,已經細分到很細的方方面面,尤爲對於大型網站來講,所採用 的技術更是涉及面很是廣,從硬件到軟件、編程語言、數據庫、WebServer、防火牆等各個領域都有了很高的要求,已經不是原來簡單的html靜態網站 所能比擬的。

 

       大型網站,好比門戶網站。在面對大量用戶訪問、高併發請求方面,基本的解決方案集中在這樣幾個環節:使用高性能的服務器、高性能的數據庫、高效率的編程語言、還有高性能的Web容器。可是除了這幾個方面,還無法根本解決大型網站面臨的高負載和高併發問題。

 

       上面提供的幾個解決思路在必定程度上也意味着更大的投入,而且這樣的解決思路具有瓶頸,沒有很好的擴展性,下面我從低成本、高性能和高擴張性的角度來講說個人一些經驗。

 

1HTML靜態化

其實你們都知道,效率最高、消耗最小的就是純靜態化的html頁面,因此咱們儘量使咱們的網站上的頁面採用靜態頁面來 實現,這個最簡單的方法其實也是最有效的方法。可是對於大量內容而且頻繁更新的網站,咱們沒法所有手動去挨個實現,因而出現了咱們常見的信息發佈系統 CMS,像咱們常訪問的各個門戶站點的新聞頻道,甚至他們的其餘頻道,都是經過信息發佈系統來管理和實現的,信息發佈系統能夠實現最簡單的信息錄入自動生 成靜態頁面,還能具有頻道管理、權限管理、自動抓取等功能,對於一個大型網站來講,擁有一套高效、可管理的CMS是必不可少的。

 

除了門戶和信息發佈類型的網站,對於交互性要求很高的社區類型網站來講,儘量的靜態化也是提升性能的必要手段,將社區內的帖子、文章進行實時的靜態化,有更新的時候再從新靜態化也是大量使用的策略,像Mop的大雜燴就是使用了這樣的策略,網易社區等也是如此。

 

同時,html靜態化也是某些緩存策略使用的手段,對於系統中頻繁使用數據庫查詢可是內容更新很小的應用,能夠考慮使用html靜態化來實現,好比 論壇中論壇的公用設置信息,這些信息目前的主流論壇均可以進行後臺管理而且存儲再數據庫中,這些信息其實大量被前臺程序調用,可是更新頻率很小,能夠考慮 將這部份內容進行後臺更新的時候進行靜態化,這樣避免了大量的數據庫訪問請求。

 

2、圖片服務器分離

你們知道,對於Web服務器來講,無論是ApacheIIS仍是其餘容器,圖片是最消耗資源的,因而咱們有必要將圖片 與頁面進行分離,這是基本上大型網站都會採用的策略,他們都有獨立的圖片服務器,甚至不少臺圖片服務器。這樣的架構能夠下降提供頁面訪問請求的服務器系統 壓力,而且能夠保證系統不會由於圖片問題而崩潰,在應用服務器和圖片服務器上,能夠進行不一樣的配置優化,好比apache在配置ContentType 時候能夠儘可能少支持,儘量少的LoadModule,保證更高的系統消耗和執行效率。

 

3、數據庫集羣和庫表散列

大型網站都有複雜的應用,這些應用必須使用數據庫,那麼在面對大量訪問的時候,數據庫的瓶頸很快就能顯現出來,這時一臺數據庫將很快沒法知足應用,因而咱們須要使用數據庫集羣或者庫表散列。

 

在數據庫集羣方面,不少數據庫都有本身的解決方案,OracleSybase等都有很好的方案,經常使用的MySQL提供的Master/Slave也是相似的方案,您使用了什麼樣的DB,就參考相應的解決方案來實施便可。

 

上面提到的數據庫集羣因爲在架構、成本、擴張性方面都會受到所採用DB類型的限制,因而咱們須要從應用程序的角度來考慮改善系統架構,庫表散列是常 用而且最有效的解決方案。咱們在應用程序中安裝業務和應用或者功能模塊將數據庫進行分離,不一樣的模塊對應不一樣的數據庫或者表,再按照必定的策略對某個頁面 或者功能進行更小的數據庫散列,好比用戶表,按照用戶ID進行表散列,這樣就可以低成本的提高系統的性能而且有很好的擴展性。sohu的論壇就是採用了這 樣的架構,將論壇的用戶、設置、帖子等信息進行數據庫分離,而後對帖子、用戶按照板塊和ID進行散列數據庫和表,最終能夠在配置文件中進行簡單的配置便能 讓系統隨時增長一臺低成本的數據庫進來補充系統性能。

 

4、緩存

緩存一詞搞技術的都接觸過,不少地方用到緩存。網站架構和網站開發中的緩存也是很是重要。這裏先講述最基本的兩種緩存。高級和分佈式的緩存在後面講述。

架構方面的緩存,對Apache比較熟悉的人都能知道Apache提供了本身的緩存模塊,也可使用外加的Squid模塊進行緩存,這兩種方式都可以有效的提升Apache的訪問響應能力。

 站程序開發方面的緩存,Linux上提供的Memory Cache是經常使用的緩存接口,能夠在web開發中使用,好比用Java開發的時候就能夠調用MemoryCache對一些數據進行緩存和通信共享,一些大 型社區使用了這樣的架構。另外,在使用web語言開發的時候,各類語言基本都有本身的緩存模塊和方法,PHPPearCache模塊,Java就更多 了,.net不是很熟悉,相信也確定有。

 

5、鏡像

鏡像是大型網站常採用的提升性能和數據安全性的方式,鏡像的技術能夠解決不一樣網絡接入商和地域帶來的用戶訪問速度差別,好比 ChinaNetEduNet之間的差別就促使了不少網站在教育網內搭建鏡像站點,數據進行定時更新或者實時更新。在鏡像的細節技術方面,這裏不闡述太 深,有不少專業的現成的解決架構和產品可選。也有廉價的經過軟件實現的思路,好比Linux上的rsync等工具。

 

6、負載均衡

負載均衡將是大型網站解決高負荷訪問和大量併發請求採用的終極解決辦法。

負載均衡技術發展了多年,有不少專業的服務提供商和產品能夠選擇,我我的接觸過一些解決方法,其中有兩個架構能夠給你們作參考。

硬件四層交換

 四層交換使用第三層和第四層信息包的報頭信息,根據應用區間識別業務流,將整個區間段的業務流分配到合適的應用服務器進行處理。 第四層交換功能就象是虛 IP,指向物理服務器。它傳輸的業務服從的協議多種多樣,有HTTPFTPNFSTelnet或其餘協議。這些業務在物理服務器基礎上,須要複雜的 載量平衡算法。在IP世界,業務類型由終端TCPUDP端口地址來決定,在第四層交換中的應用區間則由源端和終端IP地址、TCPUDP端口共同決 定。

在硬件四層交換產品領域,有一些知名的產品能夠選擇,好比AlteonF5等,這些產品很昂貴,可是物有所值,可以提供很是優秀的性能和很靈活的管理能力。Yahoo中國當初接近2000臺服務器使用了三四臺Alteon就搞定了。

 

軟件四層交換

你們知道了硬件四層交換機的原理後,基於OSI模型來實現的軟件四層交換也就應運而生,這樣的解決方案實現的原理一致,不過性能稍差。可是知足必定量的壓力仍是遊刃有餘的,有人說軟件實現方式其實更靈活,處理能力徹底看你配置的熟悉能力。

 件四層交換咱們可使用Linux上經常使用的LVS來解決,LVS就是Linux Virtual Server,他提供了基於心跳線heartbeat的實時災難應對解決方案,提升系統的魯棒性,同時可供了靈活的虛擬VIP配置和管理功能,能夠同時滿 足多種應用需求,這對於分佈式的系統來講必不可少。

 

一個典型的使用負載均衡的策略就是,在軟件或者硬件四層交換的基礎上搭建squid集羣,這種思路在不少大型網站包括搜索引擎上被採用,這樣的架構低成本、高性能還有很強的擴張性,隨時往架構裏面增減節點都很是容易。這樣的架構我準備空了專門詳細整理一下和你們探討。

 

對於大型網站來講,前面提到的每一個方法可能都會被同時使用到,我這裏介紹得比較淺顯,具體實現過程當中不少細節還須要你們慢慢熟悉和體會,有時一個很小的squid參數或者apache參數設置,對於系統性能的影響就會很大,但願你們一塊兒討論,達到拋磚引玉之效。

相關文章
相關標籤/搜索