成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vite 為什么快呢?快在哪?說一下我自己的理解吧

開發(fā)
是真的被Vite強(qiáng)力吸粉了!Vite最大的優(yōu)點(diǎn)就是:快,非常快!那到底是為什么Vite可以做到這么快呢?今天我想用比較通俗易懂的話來講講,希望大家能看一遍就懂。

由于這幾個(gè)月使用了Vue3 + TS + Vite進(jìn)行開發(fā),并且是真的被Vite強(qiáng)力吸粉了!!!Vite最大的優(yōu)點(diǎn)就是:快!!!非常快!!!

說實(shí)話,使用Vite開發(fā)之后,我都有點(diǎn)不想回到以前Webpack的項(xiàng)目開發(fā)了,因?yàn)橹暗捻?xiàng)目啟動(dòng)項(xiàng)目需要30s以上,修改代碼更新也需要2s以上,但是現(xiàn)在使用Vite,差不多啟動(dòng)項(xiàng)目只需要1s,而修改代碼更新也是超級(jí)快!!!

那到底是為什么Vite可以做到這么快呢?官方給的解釋,真的很官方。。所以今天我想用比較通俗易懂的話來講講,希望大家能看一遍就懂。

問題現(xiàn)狀

1.ES模塊化支持的問題

咱們都知道,以前的瀏覽器是不支持ES module的,比如:

// index.js

import { add } from './add.js'
import { sub } from './sub.js'
console.log(add(1, 2))
console.log(sub(1, 2))

// add.js
export const add = (a, b) => a + b 

// sub.js
export const sub = (a, b) => a - b 

你覺得這樣的一段代碼,放到瀏覽器能直接運(yùn)行嗎?答案是不行的哦。那怎么解決呢?這時(shí)候打包工具出場(chǎng)了,他將index.js、add.js、sub.js這三個(gè)文件打包在一個(gè)bundle.js文件里,然后在項(xiàng)目index.html中直接引入bundle.js,從而達(dá)到代碼效果。一些打包工具,都是這么做的,例如webpack、Rollup、Parcel

2.項(xiàng)目啟動(dòng)與代碼更新的問題

這個(gè)不用說,大家都懂:

  • 項(xiàng)目啟動(dòng):隨著項(xiàng)目越來越大,啟動(dòng)個(gè)項(xiàng)目可能要幾分鐘
  • 代碼更新:隨著項(xiàng)目越來越大,修改一小段代碼,保存后都要等幾秒才更新

解決問題

1.解決啟動(dòng)項(xiàng)目緩慢

Vite在打包的時(shí)候,將模塊分成兩個(gè)區(qū)域依賴和源碼:

  • 依賴:一般是那種在開發(fā)中不會(huì)改變的JavaScript,比如組件庫,或者一些較大的依賴(可能有上百個(gè)模塊的庫),這一部分使用esbuild來進(jìn)行預(yù)構(gòu)建依賴,esbuild使用的是 Go 進(jìn)行編寫,比 JavaScript 編寫的打包器預(yù)構(gòu)建依賴快 10-100倍
  • 源碼:一般是哪種好修改幾率比較大的文件,例如JSX、CSS、vue這些需要轉(zhuǎn)換且時(shí)常會(huì)被修改編輯的文件。同時(shí),這些文件并不是一股腦全部加載,而是可以按需加載(例如路由懶加載)。Vite會(huì)將文件轉(zhuǎn)換后,以es module的方式直接交給瀏覽器,因?yàn)楝F(xiàn)在的瀏覽器大多數(shù)都直接支持es module,這使性能提高了很多,為什么呢?

咱們看下面兩張圖:

第一張圖,是以前的打包模式,就像之前舉的index.js、add.js、sub.js的例子,項(xiàng)目啟動(dòng)時(shí),需要先將所有文件打包成一個(gè)文件bundle.js,然后在html引入,這個(gè)多文件 -> bundle.js的過程是非常耗時(shí)間的。

第二張圖,是Vite的打包方式,剛剛說了,Vite是直接把轉(zhuǎn)換后的es module的JavaScript代碼,扔給支持es module的瀏覽器,讓瀏覽器自己去加載依賴,也就是把壓力丟給了瀏覽器,從而達(dá)到了項(xiàng)目啟動(dòng)速度快的效果。

2.解決更新緩慢

剛剛說了,項(xiàng)目啟動(dòng)時(shí),將模塊分成依賴和源碼,當(dāng)你更新代碼時(shí),依賴就不需要重新加載,只需要精準(zhǔn)地找到是哪個(gè)源碼的文件更新了,更新相對(duì)應(yīng)的文件就行了。這樣做使得更新速度非常快。

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

生產(chǎn)環(huán)境

剛剛咱們說的都是開發(fā)環(huán)境,也說了,Vite在是直接把轉(zhuǎn)化后的es module的JavaScript,扔給瀏覽器,讓瀏覽器根據(jù)依賴關(guān)系,自己去加載依賴。

那有人就會(huì)說了,那放到生產(chǎn)環(huán)境時(shí),是不是可以不打包,直接在開個(gè)Vite服務(wù)就行,反正瀏覽器會(huì)自己去根據(jù)依賴關(guān)系去自己加載依賴。答案是不行的,為啥呢:

  • 你代碼是放在服務(wù)器的,過多的瀏覽器加載依賴肯定會(huì)引起更多的網(wǎng)絡(luò)請(qǐng)求
  • 為了在生產(chǎn)環(huán)境中獲得最佳的加載性能,最好還是將代碼進(jìn)行tree-shaking、懶加載和 chunk 分割、CSS處理,這些優(yōu)化操作,目前esbuild還不怎么完善

所以Vite最后的打包是使用了Rollup。

責(zé)任編輯:趙寧寧 來源: 前端之神
相關(guān)推薦

2022-08-17 12:28:14

vite代碼前端

2023-11-08 09:22:14

I/ORedis阻塞

2016-12-14 12:02:01

StormHadoop大數(shù)據(jù)

2017-02-14 14:20:02

StormHadoop

2024-09-27 11:46:51

2020-10-14 18:16:08

Python[]list()

2020-02-27 21:03:30

調(diào)度器架構(gòu)效率

2024-02-26 21:15:20

Kafka緩存參數(shù)

2020-02-27 15:44:41

Nginx服務(wù)器反向代理

2023-06-08 18:25:40

Doris場(chǎng)景查詢

2024-05-27 00:00:01

2020-03-30 15:05:46

Kafka消息數(shù)據(jù)

2021-06-09 09:32:58

Esbuild 工具前端

2022-01-04 08:54:32

Redis數(shù)據(jù)庫數(shù)據(jù)類型

2024-11-26 08:52:34

SQL優(yōu)化Kafka

2020-08-27 08:31:11

DDD可視化模型

2022-10-27 08:31:31

架構(gòu)

2023-08-29 07:46:08

Redis數(shù)據(jù)ReHash

2020-10-15 09:19:36

Elasticsear查詢速度

2021-05-27 20:56:51

esbuild 工具JavaScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品一区二区三区在线视频 | 欧美黑人国产人伦爽爽爽 | 国产精品美女一区二区 | 男人天堂网址 | 久久大 | 中文字幕av免费 | 欧美另类视频在线 | 国产精品久久久久无码av | 成人免费视屏 | 男人天堂av网 | 亚洲一二三在线观看 | 亚洲欧美激情网 | 久久精点视频 | 99精品免费| 国产精品欧美一区二区三区不卡 | 在线成人 | yiren22 亚洲综合 | 中文精品视频 | 国产精品久久久久久久免费观看 | 日韩不卡在线 | 日韩无 | 欧美一级一区 | 亚洲国产精品久久久 | 成人免费在线观看 | 青青草这里只有精品 | 精品久久免费 | 中文字幕一区二区三区在线乱码 | 羞羞的视频在线 | 日韩一区二区三区在线看 | 亚洲一区二区三区在线 | 断背山在线观看 | 欧美视频在线播放 | 亚洲精品色 | 天天天操天天天干 | 久草精品视频 | 国产精品欧美一区二区三区不卡 | 国产一区日韩在线 | 欧美亚洲一区二区三区 | 美日韩中文字幕 | 国产乱码精品一区二区三区中文 | 国产成人av在线 |