欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談 Webpack 如何處理圖片(開發(fā)、打包、優(yōu)化)

 更新時(shí)間:2019年05月15日 09:07:45   作者:Yzz  
這篇文章主要介紹了淺談 Webpack 如何處理圖片(開發(fā)、打包、優(yōu)化),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

從 webpack book 的 Loading Assets 一章中延申出來。

改善前端項(xiàng)目體驗(yàn)中,很重要的點(diǎn)就是靜態(tài)資源的優(yōu)化。它是由于瀏覽器客戶端在同一時(shí)間針對(duì)同一 域名 的請(qǐng)求有一定資源限制。如果資源過多、過大就會(huì)使得頁(yè)面卡頓。

靜態(tài)資源中,又以圖片最為典型。那么我們?cè)陂_發(fā)中該如何處理圖片呢?

webpack 是前端較為常用的手腳架工具,本文以它為例。

主要分為 開發(fā) 、 打包 、 優(yōu)化 三個(gè)方面來介紹

示例地址: webpack demo

開發(fā)

webpack 可以用使用url-loader  將靜態(tài)圖片轉(zhuǎn)化為 base64 編碼的字符串,并內(nèi)聯(lián)在對(duì)應(yīng)的腳本中。大幅度地較少了頁(yè)面的請(qǐng)求數(shù),所以在開發(fā)階段可以無限制地使用。具體方法

// npm install url-loader --save-dev

rules: [{
  test: /\.(png|jpg)$/,
  use: {
    loader: 'url-loader',
  },
}]

以 demo-example 為例,Gakki.jpg 被轉(zhuǎn)化為了 base 64 編碼的圖片。在開發(fā)階段,沒什么問題,但是如果在實(shí)際環(huán)境中,會(huì)發(fā)現(xiàn)一個(gè)很大的問題,將圖片越大轉(zhuǎn)化為base 64 編碼的字符串就越長(zhǎng),將會(huì)導(dǎo)致整個(gè) Js 腳本的大小飆升。

打包

為了減小腳本的大小,我們需要告訴 webpack 什么情況下采用 url-loader 去內(nèi)聯(lián)圖片,什么情況下采用其他的 loader。所以首先需要對(duì) url-loader 進(jìn)行配置

rules: [{
  test: /\.(png|jpg)$/,
  use: {
    loader: 'url-loader',
   options: {
      limit: 15000,
      name: '[name].[ext]',
    },
  },
}]

在 options 中設(shè)定一個(gè)閾值屬性 limit: 15000 ,表明當(dāng)圖片小于該閾值 15kb 時(shí),采用內(nèi)聯(lián)形式加載。那么如果超過閾值,我們?cè)撛趺崔k?

可以利用 fallback 屬性指定采用file-loader  來處理,具體見配置

options: {
  limit: 15000,
 fallback: 'file-loader',
  name: 'images/[name].[hash].[ext]',
},

默認(rèn)情況下,file-loader 會(huì)返回 options 依據(jù) 文件內(nèi)容返回一個(gè) MD5 Hash 來構(gòu)建文件名。

如果同時(shí)需要 file-loader 與 url-loader 的情況,需要設(shè)置 limit來做區(qū)分。

優(yōu)化

為了進(jìn)一步地優(yōu)化體驗(yàn),我們可以采用以下策略:

  1. 控制圖片質(zhì)量,壓縮圖片大小;
  2. 配置 <img /> 標(biāo)簽的 srcset 來適應(yīng)不同的屏幕;
  3. 合成雪碧圖,減少圖片資源請(qǐng)求數(shù);
  4. 使用占位圖。

控制圖片質(zhì)量,壓縮圖片大小

為了和 url-loader 配合,引入image-webpack-loader ,同時(shí)配置圖片的 loader

{
  test: /\.(png|jpg)$/,
  use: [
    {
      loader: 'url-loader',
      // 同上
      options,
    },
    {
      loader: 'image-webpack-loader',
      // 配置不同圖片的質(zhì)量
      options: {
        mozjpeg: {
          progressive: true,
          quality: 65,
        },
        optipng: {
          enabled: true,
        },
        pngquant: {
          quality: '65-90',
          speed: 4,
        },
        gifsicle: {
          interlaced: false,
        },
        webp: {
          quality: 75,
        },
      },
    },
  ],
}

然后運(yùn)行 npm run build ,很明顯的發(fā)現(xiàn),圖片的大小有了明顯的變化。這種對(duì)于圖片的壓縮對(duì)于生產(chǎn)環(huán)境特別有價(jià)值,因?yàn)樗鼫p少了下載圖像資源所需的帶寬量,從而加快了站點(diǎn)或應(yīng)用程序的速度。

也可以采用 imagemin-webpack-plugin 插件。

配置 <img /> 標(biāo)簽的 srcset 來適應(yīng)不同的屏幕

resize-image-loader responsive-loader 可以生成 srcset 的圖片合集,可以在現(xiàn)代游覽器上獲得更好地體驗(yàn),同時(shí)可以更好地控制瀏覽器加載哪些圖像以及何時(shí)獲得更高的性能。

合成雪碧圖,減少圖片資源請(qǐng)求數(shù)

Spriting技術(shù)允許將多個(gè)較小的圖像組合成單個(gè)圖像。它對(duì)于Web開發(fā)很有價(jià)值,同時(shí)也避免了請(qǐng)求開銷。

webpack-spritesmith 能夠生成雪碧圖和 Sass / Less / Stylus mixins。必須設(shè)置 SpritesmithPlugin,將其指向目標(biāo)圖像,并設(shè)置生成的mixin的名稱。

使用占位圖

與以上對(duì)比,這個(gè) loader 使用起來相對(duì)復(fù)雜,它加載圖像并將其轉(zhuǎn)化為 image / svg + xml URL 編碼數(shù)據(jù)。通常它可以與file-loader和url-loader一起使用,以便在加載實(shí)際圖像時(shí)顯示占位符。配置為

{
  test: /\.(gif|png|jpe?g)$/i,
    use: [
      {
        loader: 'image-trace-loader'
      },
      {
        loader: 'url-loader',
        options: {
          limit: 8192
        }
      }
    ]
}

這樣,你在 loader 圖片時(shí),就會(huì)獲得

// src 為圖片,trace 為loader生成的占位圖
import { src, trace } from './assets/images/gakki-363kb.jpg'

// 定義圖片組件為
export const img = ({ src, trace }) => {
  const img = new Image()

  img.src = trace
  img.onload = function () {
     img.src = src
  }
  
  return img
}
// 掛載在 document.body 上
document.body.appendChild(img({ src, trace }))

參考:

  • webpack book
  • webpack doc
  • 若干 npm readme

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript生成.xls文件的代碼

    JavaScript生成.xls文件的代碼

    這篇文章主要介紹了JavaScript生成.xls文件的代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • 徹底搞懂JS無縫滾動(dòng)代碼

    徹底搞懂JS無縫滾動(dòng)代碼

    徹底搞懂JS無縫滾動(dòng)代碼...
    2007-01-01
  • 炫酷的js手風(fēng)琴效果

    炫酷的js手風(fēng)琴效果

    既然JQ和JS都能實(shí)現(xiàn)那么炫酷的效果,我們用CSS3能不能做出手風(fēng)琴效果的書簽來呢?這篇文章主要為大家分享了炫酷的手風(fēng)琴效果實(shí)現(xiàn)方式,感興趣的小伙伴們可以參考一下
    2016-10-10
  • JavaScript模板引擎實(shí)現(xiàn)原理實(shí)例詳解

    JavaScript模板引擎實(shí)現(xiàn)原理實(shí)例詳解

    這篇文章主要介紹了JavaScript模板引擎實(shí)現(xiàn)原理,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript模板引擎原理、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • js 實(shí)現(xiàn) input type="file" 文件上傳示例代碼

    js 實(shí)現(xiàn) input type="file" 文件上傳示例代碼

    在開發(fā)中,文件上傳必不可少但是它長(zhǎng)得又丑、瀏覽的字樣不能換,一般會(huì)讓其隱藏點(diǎn)其他的標(biāo)簽(圖片等)來時(shí)實(shí)現(xiàn)選擇文件上傳功能
    2013-08-08
  • 詳解JavaScript中的屬性和特性

    詳解JavaScript中的屬性和特性

    本文對(duì)JavaScript中對(duì)象的本質(zhì)、對(duì)象與類的關(guān)系、對(duì)象與引用類型的關(guān)系;對(duì)象屬性如何進(jìn)行分類;屬性中特性進(jìn)行介紹。感興趣的朋友可以看下
    2016-12-12
  • 詳解JavaScript數(shù)組過濾相同元素的5種方法

    詳解JavaScript數(shù)組過濾相同元素的5種方法

    本篇文章主要介紹了詳解JavaScript數(shù)組過濾相同元素的5種方法,詳細(xì)的介紹了5種實(shí)用方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-05-05
  • javascript 支持ie和firefox杰奇翻頁(yè)函數(shù)

    javascript 支持ie和firefox杰奇翻頁(yè)函數(shù)

    杰奇小說系統(tǒng)用到的翻頁(yè)函數(shù),支持firefox,官方自帶的模板不支持,這樣大家就可以用firefox瀏覽網(wǎng)頁(yè)了,在網(wǎng)頁(yè)木馬橫行的今天,firefox比ie要安全不少
    2008-07-07
  • uni-app使用微信小程序云函數(shù)的步驟示例

    uni-app使用微信小程序云函數(shù)的步驟示例

    這篇文章主要介紹了uni-app使用微信小程序云函數(shù)的步驟示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • BootStrapValidator初使用教程詳解

    BootStrapValidator初使用教程詳解

    bootstrap能夠增加兼容性的強(qiáng)大框架,在項(xiàng)目中用到了數(shù)據(jù)驗(yàn)證功能,今天小編就抽空給大家介紹下BootStrapValidator初使用教程詳解,一起看看吧
    2017-02-02

最新評(píng)論