1、概述php
優化網站響應時間是保證網站受用戶關注的要點,主要方案有:css
一、減小HTTP請求html
當須要加載圖片、css、js等內容時,儘可能減小加載的次數。能夠合併加載,另外當改動量不多時,儘可能將內容進行緩存。linux
圖片的緩存能夠設定更新時間,定時去服務器查看是否有須要更新的內容。一般能夠定時在1周甚至更久的時間。web
CSS、JS的緩存,一般能夠經過文件名的方式來判斷是否須要從新加載。當網頁肯定須要加載某些js和css時,把文件和已經緩存的文件名進行判斷,文件名一致則直接用緩存。所以,能夠在文件名中設定版本號,如初始階段是avatar.1.js,當對此js的內容進行改動後,將html上加載的js文件名改成avatar.2.js,相應的改變服務器上的文件名,強制進行加載。另外,對於能夠網頁加載完畢後再加載的js,能夠將引用的代碼放到html標籤的最後,保證先將頁面展現出來。數據庫
二、動態內容靜態化apache
三、優化數據庫瀏覽器
數據庫的優化是網站優化的最關鍵的部分。後面專門寫。緩存
四、使用負載均衡服務器
能夠用DNS輪詢、反向代理、HTTP重定向等方式,實現負載均衡,保證每臺web服務器接收的請求數量大體相同。
五、使用緩存
使用緩存將改動量大、讀取量大等的內容保存在內存中,避免數據庫的屢次操做,因爲內存的讀寫速度比I/O的速度快得多(數據庫存在硬盤中,讀寫須要通過I/O),則能夠節省較多的時間。
2、吞吐率與壓力測試
吞吐率是指單位時間內服務器處理的請求數,一般用reqs/s。吞吐率描述運行期間單位時間內處理的請求數,當須要衡量單位時間內能夠承受的最大吞吐率,則須要壓力測試。
壓力測試有許多工具,如LoadRunner、JMeter、ab(Apache Bench)等。
ab是apache附帶的壓力測試軟件。能夠經過linux的命令行,直接進行測試,使用方法以下:
ab[options] [http://]hostname[:port]/path
其中,options是可選參數,主要以下:
1)-n:測試會話中執行的請求數,默認是1個
2)-c:要建立的併發用戶數,默認1個
3)-t:等待web服務器的最大響應時間,默認沒有限制
4)-k:使用keep-alive特性
5)-C:(大寫的C)對請求附加一個Cookie,形式爲name=value
實例,10個併發用戶、1000次請求:
ab -c 10 -n 1000 http://localhost/index.php
其結果會有執行總次數(-n參數)、併發請求數(-c參數)、成功次數、失敗次數、總耗時、平均每一個請求的耗時(即用戶平均等待時間)、平均每秒能夠處理的請求數(即吞吐率)。其中,吞吐率是平均每秒處理的請求數,在結果中的參數是Request per second。
3、持久鏈接
持久鏈接(Keep-Alive)又稱爲長鏈接,是指TCP鏈接中持續發送多份數據而不斷開鏈接。相應的也有短鏈接的概念,即每次完成數據發送後就斷開鏈接。
因爲客戶端和服務器每次創建鏈接,都須要進行三次握手,須要耗費時間。所以但願進行長鏈接,改變數據發送後就斷開的狀況。HTTP1.1開始支持長鏈接。
HTTP長鏈接須要瀏覽器和Web服務器共同完成:瀏覽器須要保持一個TCP鏈接不斷開,而且不斷髮送多個請求;服務器不能過早主動關閉鏈接。
目前大部分瀏覽器支持長鏈接,只須要在發出的HTTP請求數據頭中包含相關長鏈接的聲明便可:Connection:Keep-Alive,即在發出的header中定義該鏈接方式便可。
對於服務器,則須要Web服務器的配置中支持長鏈接,如:
Apache中設置:KeepAliveOn,KeepAliveTimeout 20
Nginx中配置:
http {
keepalive_timeout20; --長鏈接timeout
keepalive_requests 8192; --每一個鏈接最大請求數
}
長鏈接對於瀏覽器和服務器都有默認超時時間,即超過設定的時間若是尚未請求,則斷開鏈接。當雙方都設定超時時間,則以較短的一方爲最終的超時時間。
當大量請求小文件時,長鏈接能夠顯著加快速度。可是,長鏈接會影響到服務器的併發性能,所以也不是全部狀況都設置長鏈接。