欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Project?Reference優(yōu)化TypeScript編譯性能示例

 更新時間:2022年08月08日 09:15:24   作者:zxg_神說要有光  
這篇文章主要為大家介紹了Project?Reference優(yōu)化TypeScript編譯性能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

TypeScript 給 JavaScript 添加了一套類型系統(tǒng),可以在編譯期間檢查出類型錯誤,這增加了代碼的健壯性,但也多了一個編譯的過程。

ts 編譯速度與項目規(guī)模有關(guān),如果項目比較大,代碼很多,那就需要編譯很長一段時間。

有沒有什么辦法可以提升 tsc 編譯的性能呢?

還真有,TypeScript 3.0 的時候?qū)崿F(xiàn)了 Project Reference 的特性,就是用于優(yōu)化編譯和類型檢查的性能的。

那 Project Reference 是干什么的呢?

Project Reference

想象這樣一個場景。項目目錄下有兩個相對獨立的模塊 aaa 和 bbb

它們是用同一個 tsconfig.json 來配置編譯方式的:

執(zhí)行 tsc 就會編譯所有 include 的文件到 dist 目錄下:

假設(shè) aaa 和 bbb 都很大,編譯要很久,但是兩者的關(guān)聯(lián)還不是特別大。

aaa 模塊下的變動基本和 bbb 模塊下的沒啥關(guān)系,但是 aaa 變了,bbb 也要重新編譯一遍,bbb 變了 aaa 也要重新編譯一遍,這就很沒必要。

有的同學(xué)說,那在 aaa 和 bbb 下分別放一個 tsconfig.json,各自編譯各自的不就行了?

這樣是可以,但是這樣就是多次編譯了,比較麻煩。

能不能還是一次編譯,但是對一些相對獨立的模塊做下緩存,不要跟隨別的模塊一起編譯呢?

可以的,這就是 Project Reference 做的事情了。

在 aaa 和 bbb 下各自創(chuàng)建一個 tsconfig.json,放各自的編譯配置。注意這里要加一個 composite: true,這是 Project Reference 需要的:

然后在根目錄的 tsconfig.json 里加上一個 references 的配置,引入 aaa 和 bbb:

這樣再執(zhí)行 tsc --build 進行編譯,你會發(fā)現(xiàn)編譯結(jié)果多了 .d.ts 的聲明,還多了 tsconfig.tsbuildinfo 的文件:

打開 tsconfig.tsbuildinfo 看一下,會發(fā)現(xiàn)它記錄了編譯了哪些文件,還記錄了這些文件的 hash 值:

看到這里,你是不是就知道為啥它能實現(xiàn)緩存了?

沒錯,就是對比文件的 hash,當(dāng)編譯到這個 project 的時候,會對比下 hash 有沒有變化,變了才去編譯。沒變的就直接跳過了。

而且,別的地方可能用到這個 project 的類型,所以需要生成 d.ts 聲明文件,這就是為啥我們沒有指定 declaration: true 的配置,但是編譯產(chǎn)物里還是有 d.ts。其實這是 composite 選項做的,它設(shè)置了 Project Reference 需要的一些編譯選項:

現(xiàn)在當(dāng)你修改了 aaa 下某個模塊的代碼,重新編譯的時候就不會編譯 bbb 了,只會編譯 aaa 下的那個模塊。

這就是 Project Reference 的作用。

當(dāng)然,這種編譯模式和常規(guī)的編譯模式不同,所以不是直接用 tsc 來編譯,而是用 tsc --build 或者 tsc -b。

此外,Project Reference 還支持通過 prepend 指定編譯順序,比如給 bbb 添加 prepend: true,那么就會先編譯 bbb,再編譯當(dāng)前項目,然后編譯 aaa:

其實很容易想到,monorepo 里就可以用 Project Reference 來提升 tsc 的編譯性能。因為 monorepo 下的多個 project 相互之間都比較獨立,一個模塊的改動一般不會影響另一個模塊,所以編譯的時候也應(yīng)該各自做緩存。

總結(jié)

TypeScript 3.0 時實現(xiàn)了 Project Reference 來優(yōu)化性能。

如果項目下有一些相對獨立的模塊,別的模塊的變動不影響它,但是它卻要跟著重新編譯一次,這時就可以用 Project Reference 來優(yōu)化了。

在獨立的模塊下添加 tsconfig.json,加上 composite 的編譯選項,在入口的 tsconfig.json 里配置 references 引用這些獨立的模塊。然后執(zhí)行 tsc --build 或者 tsc -b 來編譯。

這時候就實現(xiàn)了編譯和類型檢查的性能優(yōu)化。

原理是編譯時會生成 tsconfig.tsbuildinfo 的文件,記錄著編譯的文件和它們的 hash,當(dāng)再次編譯的時候,如果文件 hash 沒變,那就直接跳過,從而提升了編譯速度。

這是 TypeScript 提供的編譯性能優(yōu)化機制,當(dāng)項目比較大,tsc 執(zhí)行的速度比較慢的時候,不妨嘗試一下。

以上就是Project Reference優(yōu)化TypeScript編譯性能示例的詳細(xì)內(nèi)容,更多關(guān)于Project Reference優(yōu)化tsc的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 前端Website?sitemap.xml文件搜索引擎優(yōu)化

    前端Website?sitemap.xml文件搜索引擎優(yōu)化

    這篇文章主要為大家介紹了前端Website的sitemap.xml文件和搜索引擎優(yōu)化實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 以JS開發(fā)為例詳解版本號的作用與價值

    以JS開發(fā)為例詳解版本號的作用與價值

    這篇文章主要為大家介紹了以JS開發(fā)為例詳解版本號的作用與價值詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 關(guān)于JavaScript輪播圖的實現(xiàn)

    關(guān)于JavaScript輪播圖的實現(xiàn)

    這篇文章主要介紹了關(guān)于JavaScript輪播圖的實現(xiàn),下面文章主要是利用利用html 和 css 代碼實現(xiàn)輪播圖,詳細(xì)內(nèi)容請參考下面詳細(xì)內(nèi)容,希望對你有所幫助
    2021-11-11
  • 直觀詳細(xì)的typescript隱式類型轉(zhuǎn)換圖文詳解

    直觀詳細(xì)的typescript隱式類型轉(zhuǎn)換圖文詳解

    這篇文章主要為大家介紹了直觀詳細(xì)的typescript隱式類型轉(zhuǎn)換圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 從原生JavaScript到React深入理解

    從原生JavaScript到React深入理解

    這篇文章主要為大家介紹了從原生JavaScript到React深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • 前端的狀態(tài)管理(上)

    前端的狀態(tài)管理(上)

    這篇文章主要講解前端的狀態(tài)管理,狀態(tài)管理李娜就想到:Vuex、Redux、Flux、Mobx等等方案,不論哪種方案只要內(nèi)容一多起來似乎都是令人頭疼的問題,今天來聊一聊前端的狀態(tài)管理,感興趣的小伙伴可以參考參考下面文字具體內(nèi)容
    2021-10-10
  • JS中的every()對空數(shù)組總返回true原理分析

    JS中的every()對空數(shù)組總返回true原理分析

    這篇文章主要為大家介紹了JS中的every()對空數(shù)組總返回true原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • JS?ES新特性之變量的解耦賦值

    JS?ES新特性之變量的解耦賦值

    這篇文章主要介紹了JS?ES新特性變量的解耦賦值,ECMAScript?2015中允許按照一定模式,從數(shù)組和對象中提取值,對變量進行賦值,這被稱為?解耦賦值?,下面一起進入文章學(xué)習(xí)該內(nèi)容,需要的朋友也可以參考一下
    2021-12-12
  • 小程序開發(fā)踩坑:頁面窗口定位(相對于瀏覽器定位)(推薦)

    小程序開發(fā)踩坑:頁面窗口定位(相對于瀏覽器定位)(推薦)

    這篇文章主要介紹了小程序開發(fā)頁面窗口定位,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 微信小程序 參數(shù)傳遞詳解

    微信小程序 參數(shù)傳遞詳解

    這篇文章主要介紹了微信小程序 參數(shù)傳遞詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10

最新評論