如何解決關於Vue背景圖打包之後訪問路徑錯誤的問題
這篇文章主要介紹了關於Vue背景圖打包之後訪問路徑錯誤問題的解決,內容挺不錯的,現在分享給大家,也給大家做個參考。
案例環境
透過vue-cli腳手架建立的vue專案
在專案打包的時候遇到了背景圖片路徑出錯的問題,經過谷歌一番,發現是在配置的時候對圖片的限制大小過小造成的
#首先,出錯點在url-loader上面。
// url-loader配置 // build/webpck.base.conf.js { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: 'url-loader', query: { limit: 10000, name: utils.assetsPath('img/[name].[hash:7].[ext]') }
這裡解釋一下上面這段url-loader配置,test是正規符合規則,符合專案中所有的以正規規則結尾的格式的文件,直白點就是所以的圖片(png,jpg,jpeg,gif,svg)。然後用url-loader進行處理。處理也有個規則如下,當不大於10000B的檔案進行base64轉碼,就是將圖片轉為base64的格式。如果超過10KB的圖片就單獨打包到utils.assetsPath('img/[name].[hash:7].[ext]') 這個目錄下(從build/utils.js和config/index.js可以知道這個路徑就是static/img目錄,而且圖片名是進行hash之後的值,根目錄下面沒有static目錄,所以會創建一個static目錄,至於為什麼最後沒有看見這個目錄後續再說),當我們創建了一個這樣的目錄之後,所以的圖片訪問路徑就成了對應的static/img/'圖片名'。到這裡就可以確定,如果小於10KB的圖片轉為base64,大於10KB的圖片已經將圖片路徑改為了static/img/'圖片名',然後我們繼續來理清訪問路徑的事情。
// 目前我们的目录结构 index.html static |--img |--'picname' |--css |--app.css |--js |--app.js
我們知道img為html標籤,他的路徑是由index.html開始訪問的,他走static/img/'圖片名'是能正確存取到圖片的,所以img的路徑沒問題,然後app.css存取static/img/'圖片名稱'是存取錯誤的,因為在css目錄下並沒有static目錄。這樣就造成了路徑存取失敗的問題。
解決方法
1、使用小圖片作為背景圖片(建議):
將小於10KB的圖片作為背景圖片,如果有大於10KB的圖片作為img圖片。
2、修改url-loader的limit值(不建議):
從上面分析可知,當圖片轉為base64就沒有路徑錯誤的問題,保證自己的背景圖片都能轉換為base64就可以防止該錯誤發生,將limit的值改為你的背景圖最大那一張的值還大一點就行,換算為B的單位
#3、將css不要單獨打包出來(不建議):
直接透過css-loader和style-loader打包到js中,js自動建立style標籤,這樣,背景圖片的存取路徑就是透過index.html路徑訪問了,不過該解決方案也不建議。會導致js過大,和圖片過大不建議轉base64一個道理。
4、使用絕對路徑的圖片位址路徑(建議)
建議:使用小圖片作為背景圖片,大圖片用img標籤。首先得分清背景圖片和圖片img的一些區別,就各人理解而言,背景圖片是用來修飾網頁的,與實際內容無關的東西,使用背景圖片。如果與內容有關的東西都應該使用img標籤來算作網頁結構的內容。修飾的圖片盡量的小,也可以使用圖片壓縮等策略來減少圖片大小。
不建議:不建議修改limit值的原因是,url-loader的設定是針對整個專案的圖片,修改了limit值也等於讓html中img標籤的圖片也跟著進行了base64的轉換,而對於base64的轉換的缺點是他會增大圖片原本的體積,如果對大圖進行了轉base64會造成你的js檔案過大,從而增加了加載js時間過長。
關於base64
優點:base64就是一串字串碼來表示的圖片,在載入頁面或js的時候就一併載入過來,減少圖片引用時單獨的一次http請求。了解web端效能優化的同學都知道,http請求每次建立都會佔用一定的時間,對於小圖請求來說,可能http建立請求的時間比圖片下載本身還要長。所以對小圖進行base64轉碼是優化http請求,確保頁面加速渲染的一種手段。
缺點:base64缺點就是之前提到的,他會增加圖片本身的大小,對小圖片來說,增加大小導致js的請求增長完全能彌補多一個http請求的建立的時長,這種取捨是划算的。可是對於大圖來說,這樣的取捨是不划算的。
舉例
範例:(以下資料都是隨便模擬,看看思路就行)
假如每次建立http時長為0.1s,網絡傳輸為100KB/s,每次轉base64增加體積為百分之二十;
一張10KB的圖片透過http請求下載為0.2s,他轉為base64之後為12KB,在js下載中,增加了12KB的大小,所以增加0.12S 所以轉base64能優化0.08s的頁面載入速度;
一張100KB的圖片透過http請求的速度是1.1s。轉base64之後大小為120KB,他會增加js的大小120KB,所以增加載入時間1.2s。這樣一算下來,轉為base64之後,並不能優化頁面載入速度,反而拖慢了0.1s的載入速度,為不划算。
思考:
在開發過程中,處理載入速度之外我們還得考慮並行下載的問題。如果全在一個js中,這個js沒下載完成之前,圖片也是沒有下載的,也就是轉base64之後,可以認為js和圖片是串列下載的。而走http請求,圖片是可以跟js並行下載的。所以其實需要更小的圖片才能更划算
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
##
以上是如何解決關於Vue背景圖打包之後訪問路徑錯誤的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 <script> 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 <router-link to="/"> 組件window.history.back(),方法選擇取決於場景。

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

可以通過以下方法查詢 Vue 版本:使用 Vue Devtools 在瀏覽器的控制台中查看“Vue”選項卡。使用 npm 運行“npm list -g vue”命令。在 package.json 文件的“dependencies”對像中查找 Vue 項。對於 Vue CLI 項目,運行“vue --version”命令。檢查 HTML 文件中引用 Vue 文件的 <script> 標籤中的版本信息。

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。
