国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

vite和webpack的差別是什麼

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

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

vite和webpack的差別是什麼

本教學操作環(huán)境:windows7系統(tǒng)、vue3版,DELL G3電腦。

寫在開頭

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

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

全方位對比vite和webpack

webpack打包過程

  • #1.識別入口檔案

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

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

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

##webpack打包原理

  • 1.

    先逐級遞歸識別依賴,建構(gòu)依賴圖譜

  • 2.將程式碼轉(zhuǎn)換成AST抽象語法樹

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

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

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

{ './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>

  • 瀏覽器就會像伺服器發(fā)起一個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文件,偵測到內(nèi)部含有import引入的包,又會對其內(nèi)部的import 引用發(fā)起HTTP 請求獲取模組的內(nèi)容文件

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

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

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

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

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

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

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

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

    vite和webpack的差別是什麼

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

    • ##vite改進

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

    webpack致命缺點3.熱更新效率低下

    • 當基于打包器啟動時,編輯文件后將重新構(gòu)建文件本身。顯然我們不應(yīng)該重新構(gòu)建整個包,因為這樣更新速度會隨著應(yīng)用體積增長而直線下降。

    • 一些打包器的開發(fā)服務(wù)器將構(gòu)建內(nèi)容存入內(nèi)存,這樣它們只需要在文件更改時使模塊圖的一部分失活[1],但它也仍需要整個重新構(gòu)建并重載頁面。這樣代價很高,并且重新加載頁面會消除應(yīng)用的當前狀態(tài),所以打包器支持了動態(tài)模塊熱重載(HMR):允許一個模塊 “熱替換” 它自己,而對頁面其余部分沒有影響。這大大改進了開發(fā)體驗 - 然而,在實踐中我們發(fā)現(xiàn),即使是 HMR 更新速度也會隨著應(yīng)用規(guī)模的增長而顯著下降。

    vite改進

    • 在 Vite 中,HMR 是在原生 ESM 上執(zhí)行的。當編輯一個文件時,Vite 只需要精確地使已編輯的模塊與其最近的 HMR 邊界之間的鏈失效(大多數(shù)時候只需要模塊本身),使 HMR 更新始終快速,無論應(yīng)用的大小

    • Vite 同時利用 HTTP 頭來加速整個頁面的重新加載(再次讓瀏覽器為我們做更多事情):源碼模塊的請求會根據(jù) 304 Not Modified 進行協(xié)商緩存,而依賴模塊請求則會通過 Cache-Control: max-age=31536000,immutable 進行強緩存,因此一旦被緩存它們將不需要再次請求。

    vite缺點1.生態(tài),生態(tài),生態(tài)不如webpack

    • wepback牛逼之處在于loader和plugin非常豐富,不過我認為生態(tài)只是時間問題,現(xiàn)在的vite,更像是當時剛出來的M1芯片Mac,我當時非常看好M1的Mac,毫不猶豫買了,現(xiàn)在也沒什么問題

    vite缺點2.prod環(huán)境的構(gòu)建,目前用的Rollup

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

    vite缺點3.還沒有被大規(guī)模使用,很多問題或者訴求沒有真正暴露出來

    • vite真正崛起那一天,是跟vue3有關(guān)系的,當vue3廣泛開始使用在生產(chǎn)環(huán)境的時候,vite也就大概率意味著被大家慢慢開始接受了

    總結(jié)

    • webpack服務(wù)器啟動速度比vite慢

      由于vite啟動的時候不需要打包,也就無需分析模塊依賴、編譯,所以啟動速度非???。當瀏覽器請求需要的模塊時,再對模塊進行編譯,這種按需動態(tài)編譯的模式,極大縮短了編譯時間,當項目越大,文件越多時,vite的開發(fā)時優(yōu)勢越明顯

    • vite熱更新比webpack快

      vite在HRM方面,當某個模塊內(nèi)容改變時,讓瀏覽器去重新請求該模塊即可,而不是像webpack重新將該模塊的所有依賴重新編譯;

    • vite使用esbuild(Go 編寫) 預(yù)構(gòu)建依賴,而webpack基于nodejs, 比node快 10-100 倍

    • vite生態(tài)不及webpack,加載器、插件不夠豐富

    【相關(guān)推薦:vuejs視頻教程web前端開發(fā)

    以上是vite和webpack的差別是什麼的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
Vue的反應(yīng)性轉(zhuǎn)換(實驗,然後被刪除)的意義是什麼? Vue的反應(yīng)性轉(zhuǎn)換(實驗,然後被刪除)的意義是什麼? Jun 20, 2025 am 01:01 AM

ReactivitytransforminVue3aimedtosimplifyhandlingreactivedatabyautomaticallytrackingandmanagingreactivitywithoutrequiringmanualref()or.valueusage.Itsoughttoreduceboilerplateandimprovecodereadabilitybytreatingvariableslikeletandconstasautomaticallyreac

如何在VUE應(yīng)用程序中實施國際化(I18N)和本地化(L10N)? 如何在VUE應(yīng)用程序中實施國際化(I18N)和本地化(L10N)? Jun 20, 2025 am 01:00 AM

國際化和傾斜度invueAppsareprimandermedusingthevuei18nplugin.1.installvue-i18nvianpmoryarn.2.createlo calejsonfiles(例如,en.json,es.json)fortranslationMessages.3.setupthei18ninstanceinmain.jswithlocaleconfigurationandmessagefil

使用VUE中的V-For指令使用關(guān)鍵屬性(:key)的好處??是什麼? 使用VUE中的V-For指令使用關(guān)鍵屬性(:key)的好處??是什麼? Jun 08, 2025 am 12:14 AM

Usingthe:keyattributewithv-forinVueisessentialforperformanceandcorrectbehavior.First,ithelpsVuetrackeachelementefficientlybyenablingthevirtualDOMdiffingalgorithmtoidentifyandupdateonlywhat’snecessary.Second,itpreservescomponentstateinsideloops,ensuri

您如何優(yōu)化VUE中大型列表或複雜組件的重新渲染? 您如何優(yōu)化VUE中大型列表或複雜組件的重新渲染? Jun 07, 2025 am 12:14 AM

優(yōu)化Vue中大型列表和復(fù)雜組件性能的方法包括:1.使用v-once指令處理靜態(tài)內(nèi)容,減少不必要的更新;2.實現(xiàn)虛擬滾動,僅渲染可視區(qū)域的內(nèi)容,如使用vue-virtual-scroller庫;3.通過keep-alive或v-once緩存組件,避免重複掛載;4.利用計算屬性和偵聽器優(yōu)化響應(yīng)式邏輯,減少重渲染範圍;5.遵循最佳實踐,如在v-for中使用唯一key、避免模板中的內(nèi)聯(lián)函數(shù),並使用性能分析工具定位瓶頸。這些策略能有效提升應(yīng)用流暢度。

VUE中的服務(wù)器端渲染SSR是什麼? VUE中的服務(wù)器端渲染SSR是什麼? Jun 25, 2025 am 12:49 AM

Server-Serdendering(SSR)InvueImProvesperformandSeobyGeneratingHtmlonTheserver.1.TheserverrunsvueApcodeAmpCodeAndGeneratesHtmlbBasedonThecurrentRoute.2.thathtmlssenttothebrowserimmed.3.vuehirative eveirtive eveirtive eveirtive eveirtive eveirtive eveirtive eveirtive eveirtiveThepage evepage evepage

如何使用VUE構(gòu)建組件庫? 如何使用VUE構(gòu)建組件庫? Jul 10, 2025 pm 12:14 PM

搭建Vue組件庫需圍繞業(yè)務(wù)場景設(shè)計結(jié)構(gòu),並遵循開發(fā)、測試、發(fā)布的完整流程。 1.結(jié)構(gòu)設(shè)計應(yīng)按功能模塊分類,包括基礎(chǔ)組件、佈局組件和業(yè)務(wù)組件;2.使用SCSS或CSS變量統(tǒng)一主題與樣式;3.統(tǒng)一命名規(guī)範並引入ESLint和Prettier保證代碼風格一致;4.配套文檔站點展示組件用法;5.使用Vite等工具打包為NPM包並配置rollupOptions;6.發(fā)佈時遵循semver規(guī)範管理版本與changelog。

如何在VUE中實現(xiàn)過渡和動畫? 如何在VUE中實現(xiàn)過渡和動畫? Jun 24, 2025 pm 02:17 PM

ToaddtransitionsandanimationsinVue,usebuilt-incomponentslikeand,applyCSSclasses,leveragetransitionhooksforcontrol,andoptimizeperformance.1.WrapelementswithandapplyCSStransitionclasseslikev-enter-activeforbasicfadeorslideeffects.2.Useforanimatingdynam

vue中NextTick函數(shù)的目的是什麼?何時需要? vue中NextTick函數(shù)的目的是什麼?何時需要? Jun 19, 2025 am 12:58 AM

nextTick在Vue中用於在DOM更新後執(zhí)行代碼。當數(shù)據(jù)變化時,Vue不會立即更新DOM,而是將其放入隊列,在下一個事件循環(huán)“tick”中處理,因此若需訪問或操作更新後的DOM,應(yīng)使用nextTick;常見場景包括:訪問更新後的DOM內(nèi)容、與依賴DOM狀態(tài)的第三方庫協(xié)作、基於元素尺寸進行計算;其使用方式包括作為組件方法調(diào)用this.$nextTick、導(dǎo)入後單獨使用、結(jié)合async/await;注意事項有:避免過度使用、多數(shù)情況下無需手動觸發(fā)、一次nextTick可捕獲多個更新。

See all articles