網頁加載性能優化方法

 在公司做了好多網頁項目,這里合并下一些網頁性能優化的帖子,作為知識目錄

減少網站加載時間的最有效方式如下:

  • 減少網站的HTTP請求數。
  • 優化圖片
  • 合并壓縮腳本


1.減少HTTP請求數:可通過CSS Sprite(又稱CSS雪碧)—將多個圖片整合到一個圖片中,使用CSS來進行定位顯示。頁面加載時,一次性加載整圖,有效減輕服務器壓力。同時,縮短了懸停加載圖片所需的時間延遲,使得用戶瀏覽行為更加流暢,不會停頓。

2.優化圖片:推薦使用PNG8格式,PNG8格式在一般情況下,無論是體積壓縮比還是對各瀏覽器透明度兼容都很不錯。
圖片優化還可以從另外兩方面進行,色盤范圍壓縮算法,先通過輸出時精準的色數設定,再加上輸出后的二次優化,可以使得圖片質量和大小達到一個極優點,二次優化工具有:
當然最新的一種格式是Google強推的WebP格式,關于WebP更多內容可參看36Kr此篇報道

具備以下條件的圖像更適合用PNG8格式進行存儲:
1、圖像上顏色較少,并且主要以純色或者平滑的漸變色進行填充。
2、具備較大亮度差異以及強烈對比的簡單圖像(如“立刻購買”按鈕中的背景和文字)。
根據經驗具備上述條件的圖像一般是使用photoshop或其他軟件中的矢量工具進行繪制然后再保存成位圖的圖像。

對于寫實的攝影圖像或是顏色層次非常豐富的圖像采用JPG的圖片格式保存一般能達到最佳的壓縮效果。

在存儲圖像時采用JPG還是PNG主要依據圖像上的色彩層次和顏色數量進行選擇。一般層次豐富顏色較多的圖像采用JPG存儲,而顏色簡單對比強烈的則需要采用PNG。但也會有一些特殊情況,例如有些圖像盡管色彩層次豐富,但由于圖片尺寸較小,上面包含的顏色數量有限時,也可以嘗試用PNG進行存儲。而有些矢量工具繪制的圖像由于采用較多的濾鏡特效也會形成豐富的色彩層次,這個時候就需要采用JPG進行存儲了。
另外還有一個原則就是用于頁面結構的基本視覺元素,如容器的背景、按鈕、導航的背景等應該盡量用PNG格式進行存儲,這樣才能更好的保證設計品質。而其他一些內容元素,如廣告Banner、商品圖片等對質量要求不是特別苛刻的,則可以用JPG去進行存儲從而降低文件大小。

對于圖片的壓縮,最常見的分有損,無損壓縮。無損壓縮譬如去除exif信息,重新排列像素存儲方式等,有損壓縮譬如合并相似像素,減少可見像素點等。現在這些壓縮算法都可以用現成的成熟的庫實現,以PHP為例子,可以使用pngcrush做PNG 的無損壓縮,pngquant做PNG 的有損壓縮。JPEG可使用imageMagick和jpegtran。這里推薦下imageMagick,相對于其他圖片處理的庫,這個庫可控制的功能更多,并且支持多種編程語言。

可使用類似智圖這類的壓縮應用進行壓縮。

3.合并&壓縮腳本:對CSS和JavaScript進行合并和壓縮。
腳本拆分可以讓維護人員更容易找到對應內容,但同時增加了頁面鏈接數,因此可適當合并腳本。

使用Minify壓縮JS和CSS
Minify把CSS和JS壓縮和削減(Minify:去掉空格回車符等),以及把多個CSS,JS文件整合到一個文件里。不要以為你的大帶寬沒有必要進 行這類優化。使用它的理由更重要的是文件合并,而不是壓縮,文件整合可以減少瀏覽器端不斷發出新的連接請求,就像FTP服務器一樣,多個小文件 和一個大文件耗時是不一樣的。
Minify使用PHP編寫,項目地址


CSS 在線壓縮:

  • Cleancss.com
    功能最強大,設置項最多

  • Css_compressor
    可壓縮代碼片段、URL、文件

  • CSS Drive:CSS Compressor
    直觀易用


JS壓縮工具:

  • UglifyJS
    UglifyJS 是用 NodeJS 編寫的 JavaScript 壓縮工具,是目前最流行的JS壓縮工具,JQuery 就是使用此工具壓縮,UglifyJS 壓縮率高,壓縮選項多,并且具有優化代碼,格式化代碼功能,目前國內能提供UglifyJS壓縮的都還處在1.0版本,本站率先升級到 2.0 時代。

  • YUI compressor
    YUI compressor 是Java編寫的壓縮工具,由雅虎發布,壓縮是 100% 的安全,比大多數其他工具有更高的壓縮比, 一般代碼的壓縮率達到 40% 至 60%,YUI compressor 也能夠壓縮CSS文件,國內互聯網公司,阿里、淘寶、百度等都是采用 YUI compressor 內核壓縮后發布代碼。

  • JSPacker
    JSPacker 由PHP編寫的壓縮工具,可以混淆代碼保護知識產權,產生的代碼兼容IE、FireFox等常用瀏覽器,國內大部分在線工具網站都采用這種算法壓縮,只因為此算法采用PHP編寫,正則表達式替換語句,沒有語法分析內核,環境搭建成本低,壓縮率上遠不如以上兩種內核,并且混淆代碼頁不符合開源精神。

  • JsMin
    JsMin 是用C語言編寫的一個輕量級JS壓縮器,去除JavaScript文件中的注釋和不必要的空格。它通常減少了一半的文件大小,從而導致更快的下載速度。

另外一些不是屬于提升性能方法,而是通過別的加載手段使得用戶感受度提升的方式:

· 緩存
使用緩存可以減少向服務器的請求數,節省加載時間,所以所有靜態資源都要在服務器端設置緩存,并且盡量使用長Cache(長Cache資源的更新可使用時間戳)
a) 緩存一切可緩存的資源
b) 使用長Cache(使用時間戳更新Cache)
c) 使用外聯式引用CSS、JavaScript

· 按需加載
將不影響首屏的資源和當前屏幕資源不用的資源放到用戶需要時才加載,可以大大提升重要資源的顯示速度和降低總體流量
PS:按需加載會導致大量重繪,影響渲染性能
a) LazyLoad
b) 滾屏加載
c) 通過Media Query加載

· 預加載
大型重資源頁面(如游戲)可使用增加Loading的方法,資源加載完成后再顯示頁面。但Loading時間過長,會造成用戶流失
對用戶行為分析,可以在當前頁加載下一頁資源,提升速度
a) 可感知Loading(如進入空間游戲的Loading)
b) 不可感知的Loading(如提前加載下一頁)

· 減少Cookie
Cookie會影響加載速度,所以靜態資源域名不使用Cookie

· 避免重定向
重定向會影響加載速度,所以在服務器正確設置避免重定向

· 異步加載第三方資源
第三方資源不可控會影響頁面的加載和顯示,因此要異步加載第三方資源


參考:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,711評論 25 708
  • 性能優化方向分類 請求數量: 合并腳本和樣式表, CSS Sprites, 拆分初始化負載, 劃分主域(使用“查找...
    Www劉閱讀 1,787評論 3 8
  • 本文章轉載于搜狗測試 本文主要是介紹Appium下載安裝方法。 一、安裝appium 訪問如下鏈接: http:/...
    夜境閱讀 394評論 0 0
  • 你我在初三畢業的那個暑假相識,喜歡你聊天那種自然天成的幽默感,不用猜,我們是網友。 可網友又怎么了,純純的友誼的網...
    熙兮晚歸閱讀 157評論 0 1
  • 每一次放假,回家都不是自己的初衷。可能的倫理道德的約束,去看看家里的老人,盡自己的責任。 肉體雖然已歸,靈魂卻從沒...
    欣star閱讀 206評論 0 0