vscode 用插件方式提供了多種語言擴(kuò)展接口型将,分成聲明式绊率,編程式兩類光羞,用給予textmate的聲明式接口迅速識別代碼中的詞法,再用編程式接口如LSP提供例如錯(cuò)誤提示稠鼻,代碼補(bǔ)齊御铃,跳轉(zhuǎn)定義等高級功能谎懦。
詞法高亮的本質(zhì)是基于正則的靜態(tài)內(nèi)容分析
聲明式:以特定JSON結(jié)構(gòu)聲明一堆匹配詞法的正則蜕便,無需編寫代碼即可添加例如塊級匹配,自動(dòng)縮進(jìn)哨坪,語法高亮等語言特性
編程式:vscode運(yùn)行過程中監(jiān)聽用戶行為庸疾,在特定行為發(fā)生后觸發(fā)事件回調(diào),編程式語言擴(kuò)展需要監(jiān)聽這些事件当编,動(dòng)態(tài)分析文本內(nèi)容并按特定格式返回代碼信息
聲明式性能高届慈,能力弱,編程式性能高忿偷,能力強(qiáng)金顿。
詞法分析是將字符序列轉(zhuǎn)換成token的過程,token是構(gòu)成源代碼的最小單位鲤桥,
vscode 基于textmate 的正則匹配實(shí)現(xiàn)分詞功能揍拆,運(yùn)行時(shí)逐行掃描文本內(nèi)容,用預(yù)定義的rule集合去測試文本行中是否包含匹配特定正則的內(nèi)容
React fiber
React渲染的過程可以被中斷茶凳,可以將控制權(quán)交回瀏覽器嫂拴,讓位給高優(yōu)先級的任務(wù),瀏覽器空閑后再恢復(fù)渲染
React 16之前通常稱為stack reconclilation 之后被重寫為fiber reconciliation
stack reconclilation 下DOM更新是同步的贮喧,將所有的virtual DOM遍歷完筒狠,才會render,
Fiber reconciliation 重寫了requestIdelCAllback這個(gè)API,(超時(shí)讓出) 思想是react的渲染過程是可以被中斷箱沦,可以將控制權(quán)交回瀏覽器辩恼,讓位給高優(yōu)先級的任務(wù),等瀏覽器空閑后再恢復(fù)渲染
瀏覽器在一幀內(nèi)可能這些的任務(wù):處理用戶輸入事件 -> js執(zhí)行 -> requestAnimation調(diào)用 -> 布局layout -> 繪制paint ; 理想的一幀是16ms,如果瀏覽器完成任務(wù)后還有空閑時(shí)間就會調(diào)用requestIdelCallback,但是如果瀏覽器繁忙的時(shí)候就不會調(diào)用谓形,所以react就利用MessageChannel模擬回調(diào)延時(shí)
Fiber其實(shí)是一種數(shù)據(jù)結(jié)構(gòu)或者執(zhí)行單元灶伊,每次執(zhí)行完一個(gè)執(zhí)行單元,react 就會檢查剩余時(shí)間套耕,如果沒有時(shí)間就把控制權(quán)讓出去谁帕,
virtualDom最大的意義在于開發(fā)方式改變了,聲明式冯袍,數(shù)據(jù)驅(qū)動(dòng),讓開發(fā)者不在關(guān)系DOM操作,解放生產(chǎn)力
Vite
優(yōu)勢 : 基于esbuild實(shí)現(xiàn)極速開發(fā)體驗(yàn)康愤,多框架支持儡循,兼容rollup的插件機(jī)制,ssr支持
vite 運(yùn)行DEV命令之后只做了兩件事情征冷,1. 啟動(dòng)用于承載資源服務(wù)的service,2. 使用esbuild 預(yù)構(gòu)建npm依賴包择膝,瀏覽器以http方式發(fā)送ESM規(guī)范的模塊請求,按需編譯被請求的模塊
Esbuild
優(yōu)勢:基于go編寫检激,多線程肴捉,
缺點(diǎn):不適合直接用于生產(chǎn)環(huán)境,更適合偏底層的模塊打包叔收,因?yàn)樗苯臃艞墝ess ,style齿穗,vue 等資源的支持,放棄TS的類型檢查等功能
閉包
調(diào)用函數(shù)時(shí)饺律,會產(chǎn)生調(diào)用棧窃页,將當(dāng)前函數(shù)上下文入棧,會保存基本類型變量复濒。引用變量會在堆內(nèi)存中創(chuàng)建脖卖,然后在棧內(nèi)存中引用,因?yàn)閖s中函數(shù)是第一公民巧颈,所以當(dāng)發(fā)現(xiàn)內(nèi)部函數(shù)畦木,會創(chuàng)建一個(gè)閉包對象,將其中使用到的外部函數(shù)變量保存到該閉包對象下砸泛,之后內(nèi)部函數(shù)被調(diào)用時(shí)馋劈,就會從閉包里提取變量。如果找不到就從全局上下問提取
函數(shù)式編程
優(yōu)點(diǎn):1. 函數(shù)時(shí)一等公民晾嘶,2. 只用表達(dá)式妓雾,不用語句 3. 沒有副作用 4.不修改狀態(tài) 5. 引用透明
http 相關(guān)緩存(https://juejin.cn/post/7127194919235485733)
http緩存可以減少寬帶流量,加快響應(yīng)速度垒迂。
關(guān)于強(qiáng)緩存械姻,cache-control是Expires的完全替代方案,在可以使用cache-control的情況下不要使用expires
關(guān)于協(xié)商緩存,etag并不是last-modified的完全替代方案机断,而是補(bǔ)充方案楷拳,具體用哪一個(gè),取決于業(yè)務(wù)場景吏奸。
有些緩存是從磁盤讀取欢揖,有些緩存是從內(nèi)存讀取,有什么區(qū)別奋蔚?答:從內(nèi)存讀取的緩存更快她混。
所有帶304的資源都是協(xié)商緩存烈钞,所有標(biāo)注(從內(nèi)存中讀取/從磁盤中讀取)的資源都是強(qiáng)緩存坤按。