自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

圖片該如何優(yōu)化來提高網(wǎng)站的性能,這里提供幾種方法

開發(fā) 前端
圖像是web上提供的最基本的內(nèi)容類型之一。他們說一張圖片勝過千言萬語。但是如果你不小心的話,圖片大小有時高達(dá)幾十兆。

 圖像是web上提供的最基本的內(nèi)容類型之一。他們說一張圖片勝過千言萬語。但是如果你不小心的話,圖片大小有時高達(dá)幾十兆。

[[285446]]

因此,雖然網(wǎng)絡(luò)圖像需要清晰明快,但它們尺寸可以縮小壓縮的,使用加載時間保持在可接受的水平。

在我的網(wǎng)站上,我注意到我的主頁的頁面大小 超過了 1.1MB,圖片占了約88%,我還注意到我提供的圖像比它們需要的大(在分辨率方面),顯然,還有很多改進的空間。

 

我開始閱讀 Addy Osmani 的優(yōu)秀 Essential Image Optimization電子書,并開始在我的網(wǎng)站上按照他們的建議做了一些圖片的優(yōu)化。,然后再對響應(yīng)式圖像進行了一些研究并應(yīng)用了它。

這使得頁面大小減少到 445kb,約 62% !

 

什么是圖像壓縮?

壓縮圖像就是在圖片保持在可接受的清晰度范圍內(nèi)同時減少文件大小,我使用 imagemin 來壓縮站點上的圖像。

要使用 imagemin,確保你已經(jīng)安裝了 Node.js,然后打開一個終端窗口,cd 進入項目,并運行以下命令:

 

  1. npm install imagemin 

然后創(chuàng)建一個名為 imagemin.js 的新文件,寫入下面的內(nèi)容:

 

  1. const imagemin = require('imagemin'); 
  2. const PNGImages = 'assets/images/*.png'
  3. const JPEGImages = 'assets/images/*.jpg'
  4. const output = 'build/images'

 

你可以根據(jù)自己的需要更改 PNGImages、JPEGImages 和 output 的值,以符合你的項目結(jié)構(gòu)。

此外要執(zhí)行圖片壓縮,還需要根據(jù)要壓縮的圖像類型安裝對應(yīng)的插件。

JPEG/JPG

JPG 的優(yōu)點

JPG 較大的特點是 有損壓縮。這種高效的壓縮算法使它成為了一種非常輕巧的圖片格式。另一方面,即使被稱為“有損”壓縮,JPG的壓縮方式仍然是一種高質(zhì)量的壓縮方式:當(dāng)我們把圖片體積壓縮至原有體積的 50% 以下時,JPG 仍然可以保持住 60% 的品質(zhì)。此外,JPG 格式以 24 位存儲單個圖,可以呈現(xiàn)多達(dá) 1600 萬種顏色,足以應(yīng)對大多數(shù)場景下對色彩的要求,這一點決定了它壓縮前后的質(zhì)量損耗并不容易被我們?nèi)祟惖娜庋鬯煊X——前提是你用對了業(yè)務(wù)場景。

JPG 使用場景

JPG 適用于呈現(xiàn)色彩豐富的圖片,在我們?nèi)粘i_發(fā)中,JPG 圖片經(jīng)常作為大的背景圖、輪播圖或 Banner 圖出現(xiàn)。

JPG 的缺陷

有損壓縮在上文所展示的輪播圖上確實很難露出馬腳,但當(dāng)它處理矢量圖形和 Logo 等線條感較強、顏色對比強烈的圖像時,人為壓縮導(dǎo)致的圖片模糊會相當(dāng)明顯。

此外,JPEG 圖像不支持透明度處理,透明圖片需要召喚 PNG 來呈現(xiàn)。

使用 MozJPEG 壓縮 jpeg

這里使用 Mozilla 的 MozJPEG 工具,該工具可以通過 imagemin-mozjpeg 作為 Imagemin 插件使用。你可以通過運行以下命令來安裝它:

 

  1. npm install imagemin-mozjpeg 

然后將以下內(nèi)容添加到的 imagemin.js 中:

 

  1. const imageminMozjpeg = require('imagemin-mozjpeg'); 
  2. const optimiseJPEGImages = () => 
  3.   imagemin([JPEGImages], output, { 
  4.     plugins: [ 
  5.       imageminMozjpeg({ 
  6.         quality: 70, 
  7.       }), 
  8.     ] 
  9.   }); 
  10. optimiseJPEGImages() 
  11.   .catch(error => console.log(error)); 

 

可以通過在終端中運行 node imagemin.js 來運行腳本。這將處理所有JPEG圖像,并將優(yōu)化后的版本放 build/images 文件夾中。

我發(fā)現(xiàn)將 quality 設(shè)置為 70 在大多數(shù)情況下可以產(chǎn)生足夠清晰的圖像,但你的項目需求可能不同,可以自行設(shè)置合適的值。

默認(rèn)情況下,MozJPEG 生成漸進式 jpeg,這會導(dǎo)致圖像從低分辨率逐漸加載到高分辨率,直到圖片完全加載為止。由于它們的編碼方式,它們也比原始的 jpeg 略小。

你可以使用 Sindre Sorhus 提供的這個命令行工具來檢查JPEG圖像是否是漸進式的。

Addy Osmani 已經(jīng)很好地總結(jié)了使用漸進式 jpeg 的優(yōu)缺點。對我來說,我覺得利大于弊,所以我堅持使用默認(rèn)設(shè)置。

如果你更喜歡使用原始的jpeg,可以在 options 對象中將 progressive 設(shè)置為 false。另外,請確保 imagemin-mozjpeg 版本的變化,請重新查看對應(yīng)文檔。

PNG (PNG-8 與 PNG-24)

PNG 的優(yōu)缺點

PNG(可移植網(wǎng)絡(luò)圖形格式)是一種無損壓縮的高保真的圖片格式。8 和 24,這里都是二進制數(shù)的位數(shù)。按照我們前置知識里提到的對應(yīng)關(guān)系,8 位的 PNG 最多支持 256 種顏色,而 24 位的可以呈現(xiàn)約 1600 萬種顏色。

PNG 圖片具有比 JPG 更強的色彩表現(xiàn)力,對線條的處理更加細(xì)膩,對透明度有良好的支持。它彌補了上文我們提到的 JPG 的局限性,唯一的缺點就是 體積太大。

PNG 應(yīng)用場景

前面我們提到,復(fù)雜的、色彩層次豐富的圖片,用 PNG 來處理的話,成本會比較高,我們一般會交給 JPG 去存儲。

考慮到 PNG 在處理線條和顏色對比度方面的優(yōu)勢,我們主要用它來呈現(xiàn)小的 Logo、顏色簡單且對比強烈的圖片或背景等。

使用 pngquant 優(yōu)化 PNG 圖像

pngquant 是我優(yōu)化PNG圖像的首選工具,你可以通過 imagemin-pngquant 使用它:

 

  1. npm install imagemin-pngquant 

然后將以下內(nèi)容添加到 imagemin.js 文件中:

 

  1. const imageminPngquant = require('imagemin-pngquant'); 
  2. const optimisePNGImages = () => 
  3.   imagemin([PNGImages], output, { 
  4.     plugins: [ 
  5.       imageminPngquant({ quality: '65-80' }) 
  6.     ], 
  7.   }); 
  8. optimiseJPEGImages() 
  9.   .then(() => optimisePNGImages()) 
  10.   .catch(error => console.log(error)); 

 

我發(fā)現(xiàn)將 quality 設(shè)置為 65-80 可以在文件大小和圖像質(zhì)量之間較好的折衷方案。

有了這些設(shè)置,我可以得到一個屏幕截圖,我的網(wǎng)站從 913kb 到 187kb,沒有任何明顯的視覺損失,驚人的79% 的降幅!

這是兩個文件。看一看,自己判斷一下:

  • 原圖(913kb)
  • 優(yōu)化后的圖像(187kb)

WebP

WebP 的優(yōu)點

WebP 像 JPEG 一樣對細(xì)節(jié)豐富的圖片信手拈來,像 PNG 一樣支持透明,像 GIF 一樣可以顯示動態(tài)圖片——它集多種圖片文件格式的優(yōu)點于一身。

WebP 的官方介紹對這一點有著更權(quán)威的闡述:

與 PNG 相比,WebP 無損圖像的尺寸縮小了 26%。在等效的 SSIM 質(zhì)量指數(shù)下,WebP 有損圖像比同類 JPEG 圖像小25-34%。 無損 WebP 支持透明度(也稱為 alpha 通道),僅需 22% 的額外字節(jié)。對于有損 RGB 壓縮可接受的情況,有損 WebP 也支持透明度,與 PNG 相比,通常提供 3 倍的文件大小。

將 WebP 圖像提供給支持它們的瀏覽器

WebP 是谷歌引入的一種相對較新的格式,它的目標(biāo)是通過以無損和有損格式編碼圖像來提供更小的文件大小,使其成為 JPEG 和 PNG 的一個很好的替代方案。

WebP 圖像的清晰度通??梢耘c JPEG 和 PNG相提并論,而且文件大小要小得多。例如,當(dāng)我將屏幕截圖從上面轉(zhuǎn)換到 WebP 時,我得到了一個 88kb 的文件,其質(zhì)量與 913kb 的原始圖像相當(dāng),減少了90% !

看看這三張圖片,你能說出區(qū)別嗎?

  • 原圖PNG (913kb)
  • 優(yōu)化PNG圖像(187kb)
  • WebP圖像(88kb,可在Chrome或Opera瀏覽器中瀏覽)

就我個人而言,我認(rèn)為視覺效果是可以比較的,而且節(jié)省下來的大小是不容忽視的。

既然我們已經(jīng)認(rèn)識到在可能的情況下使用WebP格式是有價值的,那么很重要的一點是—它不能完全替代 JPEG 和 PNG,因為瀏覽器對 WebP 支持并不普遍。

在撰寫本文時,F(xiàn)irefox、Safari 和 Edge 都是不支持WebP的瀏覽器。

 

 

 

 

然而,根據(jù) caniuse.com 的數(shù)據(jù),全球超過70%的用戶使用支持WebP的瀏覽器。這意味著,通過使用 WebP 圖像,可以為大約 70% 的客戶提供更快的 web 頁面及更好的體驗。

安裝它,運行以下命令:

 

  1. npm install imagemin-webp 

然后將以下內(nèi)容添加到你的 imagemin.js 文件中:

 

  1. const imageminWebp = require('imagemin-webp'); 
  2. const convertPNGToWebp = () => 
  3.   imagemin([PNGImages], output, { 
  4.     use: [ 
  5.       imageminWebp({ 
  6.         quality: 85, 
  7.       }), 
  8.     ] 
  9.   }); 
  10. const convertJPGToWebp = () => 
  11.   imagemin([JPGImages], output, { 
  12.     use: [ 
  13.       imageminWebp({ 
  14.         quality: 75, 
  15.       }), 
  16.     ] 
  17.   }); 
  18. optimiseJPEGImages() 
  19.   .then(() => optimisePNGImages()) 
  20.   .then(() => convertPNGToWebp()) 
  21.   .then(() => convertJPGToWebp()) 
  22.   .catch(error => console.log(error)); 

 

我發(fā)現(xiàn),將 quality 設(shè)置為 85 會生成質(zhì)量與 PNG 相當(dāng)?shù)〉枚嗟?WebP 圖像。對于 jpeg,我發(fā)現(xiàn)將 quality 設(shè)置為 75 可以在視覺和文件大小之間取得很好的平衡。

提供 HTML格式的WebP圖像

一旦有了 WebP 圖像,可以使用以下標(biāo)記將它們提供給可以使用它們的瀏覽器,同時向不兼容 WebP 的瀏覽器使用 png 或者 jpeg。

  1. <picture> 
  2.     <source srcset="sample_image.webp" type="image/webp"
  3.     <source srcset="sample_image.jpg" type="image/jpg"
  4.     <img src="sample_image.jpg" alt=""
  5. </picture> 

使用此標(biāo)記,理解 image/webp 媒體類型的瀏覽器將下載 Webp 圖片并顯示它,而其他瀏覽器將下載 JPEG 圖片。

任何不支持 的瀏覽器都將跳過所有 source 標(biāo)簽,并加載底部 img 標(biāo)簽。因此,我們通過提供對所有瀏覽器類的支持,逐步增強了我們的頁面。

 

請注意,在所有情況下,img 標(biāo)記都是實際呈現(xiàn)給頁面的內(nèi)容,因此它確實是語法的必需部分。 如果省略 img 標(biāo)記,則不會渲染任何圖像。

標(biāo)簽和其中定義的所有 source 都在那里,以便瀏覽器可以選擇要使用的圖片的路徑。 選擇源圖像后,其 URL 將傳給 img 標(biāo)記,這就是顯示的內(nèi)容。

這意味著你無需設(shè)置 或 source 標(biāo)記的樣式,因為瀏覽器不會渲染這些標(biāo)記。 因此,你可以像以前一樣繼續(xù)使用 img 標(biāo)簽進行樣式設(shè)置。

總結(jié)

正如你所看到的,優(yōu)化 web 上使用的圖像的過程并不復(fù)雜,通過減少頁面加載時間,可以為客戶帶來更好的用戶體驗,希望本文對你有所幫助,共進步!

代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行l(wèi)og 調(diào)試,這邊順便給大家推薦一個好用的BUG監(jiān)控工具 Fundebug。

責(zé)任編輯:華軒 來源: segmentfault
相關(guān)推薦

2009-07-20 17:07:30

提高ASP.NET性能

2009-09-18 09:16:06

.NET垃圾回收

2013-08-21 11:31:21

iPhone圖片方法

2011-05-11 17:26:17

Minify

2024-02-23 11:25:00

優(yōu)化托管速度CDN虛擬主機

2011-06-23 15:56:46

反向鏈接

2010-05-28 10:23:59

JavaScriptWeb

2009-07-28 16:07:40

.NET圖片快速處理

2019-03-14 15:38:19

ReactJavascript前端

2011-06-24 16:44:43

網(wǎng)站優(yōu)化

2009-12-10 17:02:50

PHP站點性能

2011-04-06 15:15:19

2024-12-23 08:10:00

Python代碼性能代碼

2011-07-21 16:40:28

網(wǎng)站優(yōu)化

2011-07-01 09:36:30

高性能Web

2019-03-06 10:25:30

Web圖片優(yōu)化命令

2010-06-03 08:55:43

LINQ

2015-05-20 09:39:09

云服務(wù)網(wǎng)絡(luò)性能網(wǎng)絡(luò)性能優(yōu)化

2009-09-18 12:29:55

2010-05-17 15:17:06

MySQL常用操作
點贊
收藏

51CTO技術(shù)棧公眾號