目錄
寫在開頭
全方位對比vite和webpack
首頁 web前端 前端問答 vite和webpack的差別是什麼

vite和webpack的差別是什麼

Jan 11, 2023 pm 02:55 PM
vue webpack vite

區別:1、webpack伺服器啟動速度比vite慢;由於vite啟動的時候不需要打包,也就不需要分析模組依賴、編譯,所以啟動速度非常快。 2.vite熱更新比webpack快;vite在HRM方面,當某個模組內容改變時,就讓瀏覽器去重新請求該模組即可。 3.vite用esbuild預先建置依賴,而webpack基於node。 4.vite的生態不如webpack,載入器、插件不夠豐富。

vite和webpack的差別是什麼

本教學操作環境:windows7系統、vue3版,DELL G3電腦。

寫在開頭

  • 最近的vite比較火,而且發布了2.0版本,vue的作者也是在極力推薦

  • 在之前的文章裡面我提到過,vite的缺點在於目前的生態不夠webpack成熟,但是只要能要彌補這個缺點,有很大機率能取代目前webpack的大部分市場

全方位對比vite和webpack

webpack打包過程

  • #1.識別入口檔案

  • 2.透過逐層識別模組依賴。 (Commonjs、amd或es6的import,webpack都會對其進行分析。來取得程式碼的依賴)

  • 3.webpack做的就是分析程式碼。轉換程式碼,編譯程式碼,輸出程式碼

  • 4.最終形成打包後的程式碼

##webpack打包原理

  • 1.

    先逐級遞歸識別依賴,建構依賴圖譜

  • 2.將程式碼轉換成AST抽象語法樹

  • 3.在AST階段中去處理程式碼

  • 4.把AST抽象語法樹變成瀏覽器可以辨識的程式碼, 然後輸出

#重點:這裡需要遞迴辨識依賴,建構依賴圖譜。圖譜物件就是類似下面這種

{ './app.js':
   { dependencies: { './test1.js': './test1.js' },
     code:
      '"use strict";\n\nvar _test = _interopRequireDefault(require("./test1.js"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nconsole.log(test
1);' },
  './test1.js':
   { dependencies: { './test2.js': './test2.js' },
     code:
      '"use strict";\n\nvar _test = _interopRequireDefault(require("./test2.js"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nconsole.log(\'th
is is test1.js \', _test["default"]);' },
  './test2.js':
   { dependencies: {},
     code:
      '"use strict";\n\nObject.defineProperty(exports, "__esModule", {\n  value: true\n});\nexports["default"] = void 0;\n\nfunction test2() {\n  console.log(\'this is test2 \');\n}\n\nvar _default = tes
t2;\nexports["default"] = _default;' } }
登入後複製

vite和webpack的差別是什麼

#vite原理

vite原理

  • 當宣告一個script 標籤類型為module 時
  • 如:

     <script type="module" src="/src/main.js"></script>
    登入後複製

  • 瀏覽器就會像伺服器發起一個GET

    http://localhost:3000/src/main.js请求main.js文件:
    
    // /src/main.js:
    import { createApp } from &#39;vue&#39;
    import App from &#39;./App.vue&#39;
    createApp(App).mount(&#39;#app&#39;)
    登入後複製
  • 瀏覽器請求到了main.js文件,偵測到內部含有import引入的包,又會對其內部的import 引用發起HTTP 請求獲取模組的內容文件

    如:
  • GET http://localhost:3000/@modules/vue.js
  • ##如:GET http://localhost:3000/src/App.vue

  • #Vite 的主要功能就是這些透過劫持瀏覽器的要求,並在後端進行相應的處理將專案中使用的文件通過簡單的分解與整合,然後再返回給瀏覽器,vite整個過程中沒有對文件進行打包編譯,所以其運行速度比原始的webpack 開發編譯速度快出許多!

    • webpack缺點一。緩慢的伺服器啟動

    當冷啟動開發伺服器時,基於打包器的方式是在提供服務前去急切地抓取和建立你的整個應用。

    • vite改進
    • #Vite 透過在一開始將應用中的模組區分為依賴和源碼兩類,改進了開發伺服器啟動時間。

    • 依賴 大多是純 JavaScript 並且在開發時不會變動。一些較大的依賴(例如有上百個模組的元件庫)處理的代價也很高。依賴通常也以某些方式(例如 ESM 或 CommonJS)拆分到大量小模組中。

    • Vite 將會使用 esbuild 預先建構依賴。 Esbuild 使用 Go 編寫,並且比以 JavaScript 編寫的打包器預先建置依賴快 10-100 倍。

    原始碼 通常包含一些並非直接是 JavaScript 的文件,需要轉換(例如 JSX,CSS 或 Vue/Svelte 元件),時常會被編輯。同時,並不是所有的原始碼都需要同時被載入。 (例如基於路由拆分的程式碼模組)。 Vite 以 原生 ESM 方式服務原始碼。這實際上是讓瀏覽器接管了打包程式的部分工作:Vite 只需要在瀏覽器請求原始碼時進行轉換並按需提供原始碼。根據情境動態匯入的程式碼,也就是只在目前螢幕上實際使用時才會被處理。

    vite和webpack的差別是什麼

    webpack缺點2.使用的是node.js去實作

    • ##vite改進

      #######Vite 將會使用###esbuild### 預先建置依賴。 Esbuild 使用 Go 編寫,並且比以 ###Node.js### 編寫的打包器預先建置依賴快 10-100 倍。 ###

    webpack致命缺点3.热更新效率低下

    • 当基于打包器启动时,编辑文件后将重新构建文件本身。显然我们不应该重新构建整个包,因为这样更新速度会随着应用体积增长而直线下降。

    • 一些打包器的开发服务器将构建内容存入内存,这样它们只需要在文件更改时使模块图的一部分失活[1],但它也仍需要整个重新构建并重载页面。这样代价很高,并且重新加载页面会消除应用的当前状态,所以打包器支持了动态模块热重载(HMR):允许一个模块 “热替换” 它自己,而对页面其余部分没有影响。这大大改进了开发体验 - 然而,在实践中我们发现,即使是 HMR 更新速度也会随着应用规模的增长而显著下降。

    vite改进

    • 在 Vite 中,HMR 是在原生 ESM 上执行的。当编辑一个文件时,Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失效(大多数时候只需要模块本身),使 HMR 更新始终快速,无论应用的大小

    • Vite 同时利用 HTTP 头来加速整个页面的重新加载(再次让浏览器为我们做更多事情):源码模块的请求会根据 304 Not Modified 进行协商缓存,而依赖模块请求则会通过 Cache-Control: max-age=31536000,immutable 进行强缓存,因此一旦被缓存它们将不需要再次请求。

    vite缺点1.生态,生态,生态不如webpack

    • wepback牛逼之处在于loader和plugin非常丰富,不过我认为生态只是时间问题,现在的vite,更像是当时刚出来的M1芯片Mac,我当时非常看好M1的Mac,毫不犹豫买了,现在也没什么问题

    vite缺点2.prod环境的构建,目前用的Rollup

    • 原因在于esbuild对于css和代码分割不是很友好

    vite缺点3.还没有被大规模使用,很多问题或者诉求没有真正暴露出来

    • vite真正崛起那一天,是跟vue3有关系的,当vue3广泛开始使用在生产环境的时候,vite也就大概率意味着被大家慢慢开始接受了

    总结

    • webpack服务器启动速度比vite慢

      由于vite启动的时候不需要打包,也就无需分析模块依赖、编译,所以启动速度非常快。当浏览器请求需要的模块时,再对模块进行编译,这种按需动态编译的模式,极大缩短了编译时间,当项目越大,文件越多时,vite的开发时优势越明显

    • vite热更新比webpack快

      vite在HRM方面,当某个模块内容改变时,让浏览器去重新请求该模块即可,而不是像webpack重新将该模块的所有依赖重新编译;

    • vite使用esbuild(Go 编写) 预构建依赖,而webpack基于nodejs, 比node快 10-100 倍

    • vite生态不及webpack,加载器、插件不够丰富

    【相关推荐:vuejs视频教程web前端开发

    以上是vite和webpack的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

vue怎麼給按鈕添加函數 vue怎麼給按鈕添加函數 Apr 08, 2025 am 08:51 AM

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

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

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

vue.js怎麼引用js文件 vue.js怎麼引用js文件 Apr 07, 2025 pm 11:27 PM

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

vue中的watch怎麼用 vue中的watch怎麼用 Apr 07, 2025 pm 11:36 PM

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

vue返回上一頁的方法 vue返回上一頁的方法 Apr 07, 2025 pm 11:30 PM

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

vue多頁面開發是啥意思 vue多頁面開發是啥意思 Apr 07, 2025 pm 11:57 PM

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

怎樣查詢vue的版本 怎樣查詢vue的版本 Apr 07, 2025 pm 11:24 PM

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

vue怎麼用函數截流 vue怎麼用函數截流 Apr 08, 2025 am 06:51 AM

Vue 中的函數截流是一種技術,用於限制函數在指定時間段內被調用的次數,防止性能問題。實現方法為:導入 lodash 庫:import { debounce } from 'lodash';使用 debounce 函數創建截流函數:const debouncedFunction = debounce(() =&gt; { / 邏輯 / }, 500);調用截流函數,控制函數在 500 毫秒內最多被調用一次。

See all articles