精品秘无码一区二区三区老师-精品秘一区二三区免费雷安-精品蜜桃秘一区二区三区-精品蜜桃秘一区二区三区粉嫩-精品蜜桃一区二区三区-精品蜜臀国产aⅴ一区二区三区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

10+WEB前端優化技巧

admin
2010年4月27日 2:4 本文熱度 8014
[p]隨著web2.0時代來,給網絡的帶來了空前的發展。前端用戶體驗變得越來越顯的重要,從而來彌補b/s結構的用戶交互型差的一些弊端,可是這樣會帶來一個問題就是會增加客戶端的壓力,比如大量運用js代碼,大家都知道js代碼是運行在客戶端的,會影響到整個網頁的在瀏覽器的解析效率,這樣也可能暗示著會增加客戶端的流量,所以不管是從服務器負載角度還是站在用戶的角度來看,對客戶端的代碼進行優化都顯得尤為重要!本文主要內部和外部兩方面來闡述web前端優化的方法。希望能給讀者一些體會和啟發。[/p]
[p]首先,我們通過一個雅虎的統計圖表來看看打開http://yahoo.com的http的流量數據:[/p]
[p][align=center][img]http://bbon.cn/wp-content/uploads/2009/06/web-yahoojpg.gif[/img][/align][/p]
[p]我們可以發現一個頁面的從第一次發出服務器請求到完全載入到客戶端的過程中,讀取html代碼只占了整個響應時間中的5%,這個結果適用于絕大多數網站,在采樣美國的前十位網站中,只有一家超過5%但少于20%,其余80%的時間是用來讀取網頁其他內容的,也就是說,前端(原文是 front-end,意思就是不包括html代碼的其余內容,可以是圖片,腳本,flash,視頻,各種東西)。這就是為什么我們要把目光集中在這些東西來提高顯示速度的關鍵原因。[/p]
[p]為什么要從前端開始著手有三個主要原因:[/p]
[p]這里有提升和改進的潛力。如果能減少一半的體積,就能減少40%的響應時間。[/p]
[p]改進前端比改進后端需要的時間和資源更少。(改進后端要重新設計應用程序規劃,代碼,尋找優化代碼的方法,添加或改變硬件配置,分布式數據庫,等等)[/p]
[p]我們的黃金規則是:首先優化前端表現,這些東西耗費了用戶端響應時間中的80%。[/p]
[p]一、從代碼之外,咱們有以下三種方法[/p]
[p]1.運用cdn技術[/p]
[p]具體方式,可以google一下。(大體的原理好像就是判斷訪問者的位置及訪問的內容從而來選擇就近的服務器來處理用戶的請求)[/p]
[p]2.加一個長時間過期的頭部[/p]
[p]expires: thu, 15 apr 2010 20:00:00 gmt[br]瀏覽器會用緩存來減少http請求數來加快頁面加載的時間,如果頁面頭部加一個很長的過期時間,瀏覽器就會一直緩存頁面里的元素。[br]不過這樣會帶來一個問題,就是如果頁面里的東西變動的話就要改名字了,否則用戶端不會主動刷新,在yahoo工作組用的是版本號,例如yahoo_2.0.6.js[/p]
[p]3.gzip壓縮[/p]
[p]gzip是現在最流行和最有效的壓縮方式,她是gnu開發的,rfc1952標準化。[br](gzip是在服務器端壓縮圖片,css,腳本等,傳送到用戶端的瀏覽器再解壓,這樣可以提高傳輸速度,不過對服務器的壓力會增大,一般選擇部分元素壓縮比較合適。)[/p]
[p]4.避免重定向[/p]
[p]重定向會減慢用戶體驗,它會延遲所有的東西直至到達新頁面。一個最浪費的重定向經常會發生而我們的開發者又會經常忽略的就是比如 http://astrology.yahoo.com/astrology的結果是重定向到http://astrology.yahoo.com /astrology/ 在apache里用alias 或者mod_rewrite或者directoryslash解決。[br]從一個舊網站跳轉到新網站也是經常要用到重定向,還有就是連接一個網站中的不同部分和在某些情況下(比如不同瀏覽器,不同的用戶帳號類型,等等)的用戶導向。用重定向很簡單,而且只需要一點額外的代碼,雖然在這些情況下用重定向減少了開發者的復雜度,但它降低了用戶的體驗,變通的做法是用alias和 mod_rewrite如果兩個部分是在同一主機上的話,如果是由域名變更引起的重定向,變通的做法是通過alias或mod_rewrite創建一個 cname(一個dns記錄,創建一個別名,從一個域名指向另一個域名)[/p]
[p]5.配置etags[/p]
[p]etags(entity tags)是服務器和瀏覽器的一個功能,它用來判斷瀏覽器緩存里的元素是否和原來服務器上的一致。etags比last-modified date更具有彈性,它用一個獨一無二的字符串來標識一個元素的版本。[br]源服務器用響應頭里的etag來特定一個元素的etag:[br]http/1.1 200 ok[br]last-modified: tue, 12 dec 2006 03:03:59 gmt[br]etag: “10c24bc-4ab-457e1c1f”[br]content-length: 12195[br]之后,如果瀏覽器要驗證這個元素,它就會用if-none-match頭來回傳etag到源服務器。如果符合的話,一個304狀態的代碼就會從源服務器返回到瀏覽器,這樣源服務器就節省了傳輸具體數據的開銷。[br]get /i/yahoo.gif http/1.1[br]host: us.yimg.com[br]if-modified-since: tue, 12 dec 2006 03:03:59 gmt[br]if-none-match: “10c24bc-4ab-457e1c1f”[br]http/1.1 304 not modified[/p]
[p]用etags的問題就在于它會標識那個特定的服務器,如果換了服務器,etags也就失去了原有的功能,但是這種現在在網絡上太常見了,因為我們經常用服務器集群。默認情況下,apache和iis會在etag中內嵌數據,這樣會動態減少驗證成功的機會。[/p]
[p]apache1.3和2.x的etag格式是inode-size-timestamp。雖然一個文件可能在不同服務器的同一個目錄,同樣的大小,安全級,時間戳等等,它的inode會隨著服務器的不同而不同。[/p]
[p]iis5.0和6.0有同樣類似etags的東西,叫時間戳:changenumber(更改號),更改號是一個用來追蹤iis配置變化的計數器,changenumber在不同iis服務器之間是不一樣的。[/p]
[p]它最終的問題就是,iis和apache產生的etags會在不同服務器之間無法匹配,這樣我們的瀏覽器就無法得到我們期待的304響應,而給我們的是一個普通的200響應,和正常的數據流。如果你的網站只有一個服務器還無所謂,如果是集群,而你用的是默認的etag配置,你的用戶就會獲得更慢的頁面,你的服務器也會有更高的負載,消耗更大的帶寬資源,代理也無法高效緩存你的內容,甚至即使你有一個長時間過期的頭部(按:見第三條規則),也不會阻止它重新載入內容。[/p]
[p]如果你不想發揮etags提供的這個彈性驗證模型的優勢,你最好關掉它。apache中關掉它的方法是在apache的配置文件中寫這么一句:[br]fileetag none[/p]
[p]二、我們從代碼方面來探討有如下方法[/p]
[p]1.減少http請求數[/p]
[p]圖片,css,script,flash,等等這些都會增加http請求數,減少這些元素的數量能減少響應時間。[/p]
[p]css sprites技術能減少圖片的請求數,把零散的小圖片放到一起,運用background-position來改變背景圖片的位置,前提是html元素事先定義好寬高,其實就像一個遮罩,移動背景就會看到不同的景象。[/p]
[p]內嵌圖像 用data:url scheme的方式把圖片內容代碼直接嵌入html代碼中,這樣會增大html代碼的體積,改進的方式是把內嵌圖片嵌入到css中(css被緩存),這樣就會更好的減少http請求數而且不增大html的體積。[/p]
[p]很多用戶都是在空緩存的情況下進入你的網站的,這樣第一次的速度就會顯得很重要。[/p]
[p]第一條規則是最重要的一條規則。[/p]
[p]2.把樣式表放到頂部[/p]
[p]我們發現把css放到文檔頭部會讓網頁加載得更快。因為這樣可以讓頁面逐漸加載。[br]把樣式表放到接近底部的問題是它阻止了頁面元素的逐漸顯示。這樣還會導致“flash of unstyled content” 即在樣式表加載之前頁面內容是以沒有樣式的形式顯示出來的,待加載完樣式后,頁面重繪,內容一閃即改變了樣式表現。[/p]
[p]3.把腳本放到底部[/p]
[p]把腳本放到盡可能底部的地方,一個原因是讓頁面逐漸渲染,另一個是實現更好的并行下載。[/p]
[p]對于腳本,腳本以下的內容被阻止逐漸加載了,因為只有當下載完腳本以后才會下載下面的內容,第二個腳本引起的問題是阻止平行下載。 “http/1.1 specification”建議瀏覽器對一個域名,同一時間下載數不超過2個(按:實際監測發現一般有超過2個),我曾經讓ie并行下載100個圖片。當腳本正在下載的時候,瀏覽器不會開始下載任何東西。[/p]
[p]4.避免css expressions[/p]
[p]css expressions 是一個有力(和危險)的方式動態的改變css的屬性。他們自ie5就開始被支持,舉個例子,用css expression可以讓背景色每個小時輪換一次。但是被非ie瀏覽器忽略的。[/p]
[p]background-color: expression( (new date()).gethours()%2 ? “#b8d4ff” : “#f08a00″ );[/p]
[p]expressions的問題就在與它的計算頻率絕對超出我們的想象,甚至當我們移動鼠標,都會引起頁面的重繪![/p]
[p]下面是舉例頁面[/p]
[p]減少css expressions計算次數的一個方法就是使用一次性的expressions。 當第一次expression計算出一個明確的值,就讓樣式等于這個值,不再變動。如果樣式的屬性一定要動態的改變,就用時間句柄吧![/p]
[p]5.讓腳本和樣式外延[/p]
[p]javascript和css應該是外部調用還是內嵌呢?[br]用外部調用文件的方式更快,因為他們是可以被緩存的,如果是內嵌在頁面中他們就無法被緩存了!想想如果用戶要在你的網站看很多很多的頁面,如果都是使用同一個外部腳本和樣式,那么他們一旦被緩存,就再也不需要下載了,這樣會給你帶來很大的潛在好處。[/p]
[p]6.減小腳本體積[/p]
[p]有兩個比較流行的工具是用來減小腳本的體積的–jsmin和yui compressor。(按:這個壓縮和gzip壓縮是不一樣的,gzip是傳輸壓縮,這個是代碼壓縮)。[/p]
[p]我們以上方法,讀者應該適當的選擇或配合使用,我們在選擇方法的原則是應該以最低的代價來完成客戶端的功能。[/p]
[p]原文:[url=http://hi.baidu.com/mj_623ok/blog/item/a843d8de288d601b632798b8.html][i][i]web前端優化的體會[/i][/i][/url][/p]

該文章在 2010/4/27 2:04:48 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 最新欧美精品一区二区三区 | 久久无码专区国产精品s古装 | 99久久久无码国产精品不卡 | 制服丝袜亚洲无码在线视频 | 在线亚洲AV成人无码一区 | 亚洲午夜影视 | 欧美日韩高清一区 | 亚洲国产高清视频在线观看 | 国产成人久久精品区一区二 | 国产成人久久精品二区三区 | 自拍网站在线观看 | 香蕉久久综合永久入口导航 | 日韩人妻精品无在线看 | 在线观看麻豆国产传媒61 | 亚洲欧美另类色吧 | 亚洲欧美成人综合久久久 | 午夜福利无码自拍 | 日韩毛片无码永久免费看 | 欧美精品久久96人妻无码 | 精品无码无人网站免费视频 | 亚洲国产经典欧美 | 国产亚洲精品成人aa片新蒲金 | 亚洲av无码乱码在线观看性色扶 | 亚洲国产精品成人一区二区在 | 国产精品亚洲综合色区韩国 | 国产欧美一区二区三区户外 | 亚洲国产毛片aaaaa无费看 | 午夜无遮挡男女啪啪免费软件 | 日本毛片免费中文 | 日韩字幕一中文在线综合 | 国产AV国片偷人妻麻豆潘甜 | 欧美成a人片在线观看网站 欧美成a人片在线观看久 | 久久久黄色片 | 在线观看国产一区二区三区 | 国产97在线中韩 | 日韩精品无码一区二区三区四区 | 夜夜爽一区二区三区精品 | 亚洲国产精品久久久久婷婷影院 | 亚洲精品aⅴ无码精品丝袜 亚洲精品ⅴ中文字幕乱码 亚洲精品ⅴ在线观看 | 国精品人妻无码一区二区三区牛牛 | 极品少妇高潮到爽 |