通俗易懂分析:Vite和Webpack的區別

1、對項目構建的理解

先從瀏覽器出發, 瀏覽器是由瀏覽器內核和JS引擎組成;瀏覽器內核編譯解析html代碼和css代碼,js引擎編譯解析JavaScript代碼;所以從本質上,瀏覽器只能識別運行JavaScript、CSS、HTML代碼。 而我們在編寫項目時,用到了less,ts等擴展語言,vue等js框架,es6等低版本瀏覽器不能兼容的js語法,以及為了提高項目性能做的代碼壓縮,圖片資源壓縮等,把這些源代碼轉換成可以執行的JavaScript、CSS、HTML 代碼稱之為項目構建。 而vite和webpack是兩種不同的項目構建打包工具。

項目構建包括以下內容:
代碼轉換:將 TypeScript編譯成JavaScript 、將Less編譯成css等。
文件優化:壓縮JavaScript、 CSS、HTML 代碼,壓縮合并圖片等。
代碼分割: 提取多個頁面的公共代碼,提取首屏不需要執行部分代碼讓其異步加載。
模塊合并:在采用模塊化的項目里會有很多個模塊和文件,需要通過構建功能將模塊分類合并成一個文件。
熱更新:監聽本地源代碼變化,自動重新構建、刷新瀏覽器。
代碼校驗:在代碼被提交到倉庫前需要校驗代碼是否符合規范,以及單元測試是否通過。
自動發布:更新代碼后,自動構建出線上發布代碼并傳輸給發布系統。

2、Vite和Webpack對比

  • 構建速度(項目啟動速度)和熱更新速度

    Vite 的構建速度和熱更新速度更快,在大型項目中, Vite 甚至要比Webpack的構建速度快幾十倍。

    原因分析:
    webpack: 分析依賴=> 編譯打包=> 交給本地服務器進行渲染;隨著模塊的增多,打包出的bundle文件會越來越大,造成啟動速度和熱更新速度越來越慢;webpack用js代碼編寫。
    Vite   : 啟動服務器=> 請求模塊時按需動態編譯顯示。通過在一開始將應用中的模塊區分為依賴和源碼兩類,請求某個模塊時再對該模塊進行實時編譯,因為現代游覽器本身支持ES-Module,所以會自動向依賴的Module發出請求;使用esbuild預構建依賴(esbuild也是一種js構建工具,不過是用go純機器碼語言編寫),以原生的ES Modules向瀏覽器提供源碼;
    

    構建原理圖如下(vite官網抄的):
    在這里插入圖片描述
    在這里插入圖片描述

  • 上手度簡易程度
    vite的配置相對來說更加簡單,具體的配置方法請見官網:webpack中文官網 vite官網

  • 生態豐富度
    vite是尤大大在2021年時推出的新一代前端構建工具,相對于webpack來說,推出時間距今非常的短,缺少很多擴展功能,Webpack 的生態環境更加成熟,在社區中擁有廣泛的支持和豐富的插件庫。可以處理多種類型的文件和資源。

  • 瀏覽器兼容性
    Webpack 支持所有符合 ES5 標準 的瀏覽器(不支持 IE8 及以下版本)。webpack 的 import() 和 require.ensure() 需要 Promise。如果你想要支持舊版本瀏覽器,在使用這些表達式之前,還需要 提前加載 polyfill。
    默認情況下,Vite 的目標瀏覽器是指能夠 支持原生 ESM script 標簽 和 支持原生 ESM 動態導入 的。所以vite很多低版本的瀏覽器并不兼容,vite也可以對這個問題進行配置。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697691.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697691.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697691.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

敏捷開發最佳實踐:領導力維度實踐案例——走動式激勵

在本節實踐案例中,某財險公司信息技術部高級工程師分享了組織級數字化轉型中的優秀敏捷領導力實踐,不僅解決了產品上市周期長、響應市場變化慢的難題,還打破了部門墻、提升了客戶滿意度,該案例將為同類企業在組織層面進行有效敏捷…

Centos7配置靜態IP詳細步驟

使用Centos虛擬機測試時一到切換網段就頭疼,總是會有ping不通網關、同段IP和外網的情況。下面出一個盡可能完整的排查思路和配置靜態IP的過程。以下為配置nat模式后,出現以上情況的網絡不通的排查思路,并配置win10vm8靜態IP和centos7虛機nat模…

vue3路由切換過渡動畫實現

<router-view v-slot"{ Component }"><transition name"fade" mode"out-in" appear><keep-alive><component :is"Component" /></keep-alive></transition> </router-view>/* 路由切換動畫…

SQL字符集

目標:了解字符集的概念&#xff0c;掌握MySQL數據庫存儲數據的字符集邏輯以及設置方式 字符集概念 MySQL字符集關系 解決亂碼問題 字符集設置原理 1、字符集概念 目標:了解字符集概念&#xff0c;掌握字符集存儲和讀取的實現原理 概念 字符集:charset或者character set&am…

(十二)【Jmeter】線程(Threads(Users))之setUp 線程組

簡述 操作路徑如下: 作用:在正式測試開始前執行預加載或預熱操作,為測試做準備。配置:設置預加載或預熱操作的采樣器、循環次數等參數。使用場景:確保在正式測試開始前應用程序已經達到穩定狀態,減少測試結果的偏差。優點:提供預加載或預熱操作,確保測試的準確性。缺…

Centos開機網卡自啟動失敗

問題背景 每次都要手動啟動在這里插入代碼片 解決方案: 關閉 NetworkManager 服務 systemctl disable NetworkManager systemctl stop NetworkManager重啟就會發現網卡已經可以自動啟動了

2024幻獸帕魯游戲服務器租用價格表_一年和1個月報價明細

游戲服務器租用多少錢一年&#xff1f;1個月游戲服務器費用多少&#xff1f;阿里云4核16G10M游戲服務器26元1個月、149元半年&#xff0c;騰訊云4核16G游戲服務器32元、312元一年&#xff0c;華為云26元&#xff0c;京東云主機也是26元起&#xff0c;游戲服務器配置從4核16G、4…

代碼隨想錄算法刷題訓練營day22

代碼隨想錄算法刷題訓練營day22&#xff1a;LeetCode(236)二叉樹的最近公共祖先、LeetCode(235) 二叉搜索樹的最近公共祖先、LeetCode(701)二叉搜索樹中的插入操作、LeetCode(450)刪除二叉搜索樹中的節點 LeetCode(236)二叉樹的最近公共祖先 題目 代碼 /*** Definition for…

【鴻蒙 HarmonyOS 4.0】路由router

一、介紹 頁面路由指在應用程序中實現不同頁面之間的跳轉和數據傳遞。HarmonyOS提供了Router模塊&#xff0c;通過不同的url地址&#xff0c;可以方便地進行頁面路由&#xff0c;輕松地訪問不同的頁面。 二、頁面跳轉 2.1、兩種跳轉模式&#xff1a; router.pushUrl()&…

vue2與vue3中父子組件傳參的區別

本次主要針對vue中父子組件傳參所進行講解 一、vue2和vue3父傳子區別 1.vue2的父傳子 1).在父組件子標簽中自定義一個屬性 <sonPage :子組件接收到的類名"傳輸的數據">子組件</sonPage> 2).在子組件中peops屬性中拿到自定屬性 props: {子組件接收的…

Stable Diffusion算法、結構全流程概述

Stable Diffusion能力強、功能多、插件廣&#xff0c;本文擬概述SD的全流程&#xff0c;方便梳理算法各結構的關系 1、stable diffusion訓練用ddpm, 采樣用ddim DDPM的推理采樣步長和訓練時的步長一樣&#xff0c;導致采樣步數過多&#xff0c;推理時間長。DDIM指出&#xff…

安卓游戲開發之音頻技術優劣分析

一、引言 在安卓游戲開發中&#xff0c;音頻處理技術扮演著至關重要的角色&#xff0c;它不僅能夠增強游戲的沉浸感和玩家體驗&#xff0c;還能通過聲音效果傳達關鍵的游戲信息。以下將對幾種常見的安卓游戲音頻處理技術進行優劣分析&#xff0c;并結合應用場景來闡述其特點。 …

docker鏡像打包和解壓

背景 工作記錄 打包鏡像 docker save -o 壓縮包名稱.tar 鏡像名稱:鏡像版本 例如 docker save -o app-web.tar app-web:2.0解壓鏡像 這里解壓上面打包的app-web的壓縮包 docker load<壓縮包名稱.tar docker load<app-web.tar這樣解壓下來的實際就是app-web:2.0這個鏡…

微服務-微服務API網關Spring-clould-gateway實戰

1. 需求背景 在微服務架構中&#xff0c;通常一個系統會被拆分為多個微服務&#xff0c;面對這么多微服務客戶端應該如何去調用呢&#xff1f; 如果根據每個微服務的地址發起調用&#xff0c;存在如下問題&#xff1a; 1.客戶端多次請求不同的微服務&#xff0c;會增加客戶端…

Qt 事件

1. 事件 事件是對各種應用程序需要知道的由應用程序內部或者外部產生的事情或者動作的通稱。在Qt中使用一個對象來表示一個事件&#xff0c;它繼承自QEvent類。 2. 事件和信號 事件與信號并不相同&#xff0c;比如我們使用鼠標點擊了一下界面上的按鈕&#xff0c;那么就會產生…

node 之 初步認識

思考&#xff1a;為什么JavaScript可以在瀏覽器中被執行 代執行的js代碼——JavaScript解析引擎 不同的瀏覽器使用不同的JavaScript解析引擎 Chrome 瀏覽器 》 V8 Firefox瀏覽器 》OdinMonkey(奧丁猴&#xff09; Safri瀏覽器 》JSCore IE瀏覽器 》Chakra(查克拉&#xff09; e…

XML的寫法

下面我將以如下代碼來解釋下XML的寫法 <?xml version"1.0" encoding"UTF-8" ?> <Steam><steam id"1"><zhanghao>admin</zhanghao><mima>123</mima><num>120</num></steam><st…

金航標電子位于廣西柳州鹿寨縣天線生產基地于大年正月初九開工了

金航標電子位于廣西柳州鹿寨縣天線生產基地于大年正月初九開工了&#xff01;&#xff01;&#xff01;金航標kinghelm&#xff08;www.kinghelm.com.cn&#xff09;總部位于中國深圳市&#xff0c;兼顧技術、成本、管理、效率和可持續發展。東莞塘廈實驗室全電波暗室、網絡分析…

關于路徑字串標準化的代碼

上文說到&#xff0c;得到執行的正確路徑。有時這個路徑并不規范&#xff0c;所以要進行一番標準化。具體工作&#xff1a; //替換為//./替換為/../的處理 近來專門研究了一下&#xff0c;寫了個代碼。其實也不難&#xff0c;主要是處理../時麻煩。 char* format_to_exe_path…

運維SRE-06 階段性復習軟件管理體系

那些年運維必會操作-第一彈 操作 文件&#xff1a;增刪改查 增&#xff1a;touch,vim,>,>>,cp刪除&#xff1a;rm修改&#xff1a;內容&#xff1a;vi/vim,>,>> 文件名&#xff1a;mv查看&#xff1a;內容&#xff1a;cat/vim/less/more/head/tail/sed/awk/…