標籤:
一、為什麼要網站最佳化1.1、大型網站的特點
- 高訪問量
- 同時線上人數多
- 資料量龐大
- 資料操作頻繁
1.2、網站效能測試指標(使用者角度)
- 日訪問量
- 同時線上人數
- 最大並發串連數
- 訪問回應時間
1.3、網站效能個體體現
- 首屏時間:一個網站被瀏覽器上部,800*600地區充滿所需要的時間
- 網頁訪問可用性:使用者訪問網頁的成功率。
- DNS時間:瀏覽器將地址發送給DNS伺服器,DNS伺服器根據地址返回IP到瀏覽器,瀏覽器得到IP地址,此為DNS時間
- 建立連線時間:包含DNS時間後,瀏覽器重到IP地址後,再將客戶投訴請求發送至WEB伺服器,然後建立串連,這時建立連線時間結束
- 重新導向時間:網頁間跳轉時間,如檢查是否是會員,不是就跳轉登入
- 第一個資料包時間:瀏覽器發送HTTP請求結束開始,到接收到WEB伺服器返回的第一個資料包的消耗時間
- 總下載時間:頁面所內容下載所用的時間,網頁的總耗時
- 錯誤情況:網站的錯誤情況代表網站的營運品質。
1.4、客戶投訴問題
二、使用YSlow外掛程式分析網站效能
YSlow外掛程式,是yahoo是運行在FireFox瀏覽器上面的,同時要有FireBug才可以運行
三、網頁內容最佳化3.1、減少HTTP請求
- 合并檔案(js或者css檔案)
- css Sprites圖片拼合(常 用)
- 圖片地圖
3.2、減少DNS尋找次數
- 減少主機名稱的數量可以減少DNS尋找次數,
- 減少DNS尋找次數可以節省回應時間
- 減少主機名稱會減少頁面當時並行下載的數量,但是這樣又會增加回應時間
- 原則:將這些頁面中的內容分割成至少2部分,但不超過4部分。結果:減少DNS尋找次數與保持並行下載兼顧
3.3、避免跳轉
301代碼、302代碼。預設不緩衝,須增加Expires或者Cache-Control來指定緩衝
開時時注意不要忽略URL本該有的斜杠(/);
3.4、可快取的AJAX
設定在用戶端緩衝
3.5、減少DOM元素數量
DOM元素過多,會使遍曆DOM的效率慢。
不用移除內容,而是替換,精簡元素標籤
減少DIV元素的嵌套
3.6、盡量避免使用iframe
優點:
- 解決載入緩慢的第三方內容
- 只需要修改一個iframe內容,便可以改變所有應用該iframe頁面
缺點:
- 即使內容為空白,載入也需要時間
- 阻止頁面載入
- 沒有語意
3.7、避免404錯誤
錯誤的載入會破壞並行載入
瀏覽器會把試圖在返回的404響應內容中找到可能有用的部分當作javascript代碼來執行
四、圖片最佳化4.1、使用工具最佳化圖片
檢查你的GIF圖片當中映像顏色的數量是否和調色盤規格一致,如只使用到了4種顏色,而調色盤中有256中規格,說明還有最佳化的空間
嘗試把GIF格式轉換成PNG格式,看看是否有節省空間的
在所有有PNG圖片上運行pngcruch或者其它的PNG最佳化工具
在所有JPEG圖片上運行jpegtran,可以對圖片中出現的鋸齒等無損進行操作,同時它還可以最佳化和清除圖當中的注釋以及其它的無用資訊
最後,把所有的圖片紡一的jpg或者是gif或者png格式,行適當的轉,可以達到很好最佳化效果,
盡量避免使用bmp格式,對使用者上傳的格式進行一個格式轉換可以達到很好的壓縮效果
Jpegtran
JPEG的壓縮公用程式有jpegtran和jpegoptim,這兩款工具的壓縮效果幾乎沒有區別,在這裡我們推薦使用jpegtran,相比後者,jpegtran可以進行progressive編碼,使圖片漸進式的展現,先顯示模糊的圖片,再逐步清晰。
推薦命令列參數:
jpegtran –copy none –optimize -progressive -outfile out.jpg in.jpg
想知道這些參數的具體作用,可使用命令“jpegtran –h”瞭解,
4.2、使用合理的圖片尺寸
不要使用一個比實際需要大得多的圖片,不要在網頁中縮放圖片
4.3、favicon.ico要小而且要可緩衝
favicon.ico位為網店的根目錄
favicon.ico檔案不要缺少,而檔案要盡量小,可以緩衝
4.4、使用css Sprites最佳化頁面小圖片
CSS Sprites技術中,水平柏拉圖片會比垂直排列效果更好
顏色相近的圖片組合在一起,可以降低顏色數
合理的應用CSS Sprites技術,不要在Spirite的映像中間留有較大空隙
五、最佳化CSS和JavaScript5.1、把樣式表置於頂部
開發階段將樣式和代碼分離,開發完畢後再將樣式放在頁面的<head>頭部中
5.2、使用<link>代替@import
<link type="text/css"" rel="stylesheet" href="style.css" />
用<link>代替@import來實現外部樣式表的匯入
5.3、避免使用濾鏡
避免使用濾鏡,使用PNG格式的圖片來代替,主流瀏覽器一般都支援這種格式,必要時使用CSS Hack來處理IE6瀏覽器下的效果
5.4、精簡CSS和JavaScript
精簡工具:
JSMin:javascript
YUI Compressor: javascript也可以用來精簡CSS
<script>和<style>代碼塊也可以並且應該進行消減
精簡代碼,採用縮寫
5.5、把JavaScript放在HTML的底部
把指令碼放在HTML頁面底部
(document.write()輸出語句例外)
六、最佳化Cookie6.1、縮小Cookies大小
6.2、避免使用全域網域名稱的Cookie
應該以圖片等頁面元素使用沒有Cookie的網域名稱
七、伺服器端最佳化7.1、使用內容分髮網絡
Content Delivery Network簡稱為CDN
使用CDN(內容分髮網絡),但成本高
7.2、為檔案頭指定Expires或者Cache-Control
靜態內容設定:Expires的值為"Never expire"(永不到期)
動態內容設定:Cache-Control設定合適的值如"no-cache"
Expires檔案頭經常用於影像檔,但是應該在所有的內容當中使用,包括指令碼、樣式表和Flash等
7.3、使用Gzip壓縮檔內容
開啟應用伺服器端的Gzip壓縮設定
在Tomcat中啟用Gzip壓縮:
修改%TOMCAT_HOME%/conf/server.xml,修訂節點如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla,traviata" <!--下面可以設定要壓縮的類型有哪些--> compressableMimeType="text/html,text/xml,text/javascript,application/x-javascript,application/javascript,text/css,text/plain"/>
從上面節點的屬性可以看出,要使用gzip壓縮功能,你需要在Connector節點中加上如下屬性compression="on" 開啟壓縮功能 compressionMinSize="50" 啟用壓縮的輸出內容大小,預設為2KB noCompressionUserAgents="gozilla, traviata" 對於以下的瀏覽器,不啟用壓縮 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮
7.4、使用GET來完成AJAX請求
- POST:先傳送檔案頭,然後才發送資料
- GET:一個TCP包
擷取資料時建議使用GET,相反,發送並在服務端儲存資料時才使用POST
IE中URL最大長度為2K,如果擷取的資料大於2K,就不能使用GET,
八、開發角度看最佳化
動態網頁面的弊端:
實施靜態化的原因:
- 提高訪問速度
- 減輕伺服器壓力
- 加強安全性
- 利於搜尋引擎收錄
九、如何靜態化網站
目前絕大多數網站都是採用:模板技術 來對網站靜態化
9.1、網站靜態化的好處
效率方面:
- 純靜態化HTML頁面:以HTM/HTML結尾,效率最高,消耗最小,速度最快
- 減輕伺服器的壓力:相比動態網頁面要執行指令碼,資料庫操作,靜態頁面只需要將相應的靜態頁面返回給用戶端
- 利於搜尋引擎收錄:動態網頁面的產生是採用資料庫內容,所以網頁內容主題的永恒性並不能保證,這樣就造成了搜尋引擎的閱讀困難,也就是搜尋引擎抓不住一個永恒的主題,因此不能輸入到搜尋引擎的緩衝當中。別外,動態串連,存在一個信任問題,用記以及搜尋引擎無法確定這個頁面會一直存在。搜尋引擎對於靜態連結就更加友好,所以把動太網址進行URL重寫使其靜態化,是一個非常重要的最佳化技巧
- 提高伺服器的效能:動態網頁面要經常讀取資料庫,而靜態頁面只需要將相應的靜態頁面返回給用戶端
安全方面:
- 防SQL注入:靜態頁面根本就不存在資料庫操作,杜絕了SQL注入的可能性
- 網站出錯時,不影響網站正常訪問。動態網頁面:如果發生錯誤或者是資料庫出現了問題,那麼從資料庫讀取資料的頁面就必然無法正常的訪問了。而靜態頁面只會在產生靜態頁面時調用資料庫操作,產生之後就不會對資料庫進行任何操作了,因此媽便是資料庫崩潰了,使用者仍然可以訪問到已經存在的靜態頁面
9.2、靜態化實現方式-模板技術
對網站必要的部分實行靜態化操作,同一個網站下的不同網頁,風格一般都要保持一致,不同的只是內容,
讓靜態化的時候能夠重用頁面的整體架構,風格等這些就是模板
9.3、JAVA中靜態化操作
Velocity或者FreeMarker等模板架構來實現。
它允許任何人僅簡單的使用範本語言,來引用由JAVA代碼定義的對象。
當Velocity應用於web開發時,介面設計人員可以和java程式開發人員,同步開發一個遵循MVC架構的WEB網站,也就是說,頁面設計人員可以只關注頁面的顯示效果,而java程式開發人員只關注商務邏輯編碼的實現。
Velocity將java代碼從web頁面中分離出來,為web網站的長期維護提供了便利
十、初識MVC
MVC:mode view controller
十一、最佳化資料庫查詢11.1、在查詢頻繁的列上添加合適的索引
- 判斷並建立必要的索引:使所建立的索引對資料的工作效率提高有所協助
- 對索引使用一些規則:建立索引時,應該與實際的查詢相結合
- 合登理的索引對SQL語句的意義:確保其得到了真正的使用,能發揮作用
11.2、盡量少用IN或者NOT IN
在where子句中盡量少使用IN 或者NOT IN
可以使用EXIST 或者NOT EXIST來代替IN或者NOT IN
11.3、盡量少用萬用字元*
查詢語句寫上欄位名,盡量不使用*如:select top 50 col1 from table1
11.4、盡量少用LIKE
使用LIKE會導致建立的索引效,降低查詢效率
十二、效能監測12.1、為什麼需要監測網站的效能
網站的效能是隨著瀏覽量以及硬體設施的不同而發生變化的,網站在運營前或者運營期間有必要對網站整體效能進行監測
12.2、監測階段
12.3、監測軟體
- 網站開發期間:使用LoadRunner等專業的負載測試工具
使用LoadRunner等專業的負載測試工具優點:
- 輕鬆建立虛擬使用者:Virtual User Generator輕鬆建立虛擬使用者,以虛擬使用者的方式類比真實使用者的業務操作行為
- 建立真實的負載:Controller,來設定商務程序組合與虛擬使用者數量,很快的組織起多使用者的測試方案
- 定位效能的問題:LoadRunner內含整合的即時監測器,在負載測試任何時間,都可以觀測到應用系統的運行效能
- 分析結果以精確定位問題所在:測試完畢合,會收集匯總所有資料並產生進階的測試報告。
- 重複測試保證系統發布的高效能:Controller,允許重複執行與出錯修改前的相同測試方案
- 網站運營期間:監控寶,美圖的Service Uptime,Uptime Robot等
簡單網站最佳化