可以看看優化后的開發情況,不僅和應用一樣,速度還比較快,也不會生成臨時目錄,修改實時生效。
這是 v2.0 和 v1.0 的根本性變化,也是整體架構升級帶來的巨大優勢。
當然,這一塊并不是功能的新增,除了架構升級之外,我們還提供了更多的能力。主要分成下面四大方面。
v2.0 純函數增強
首先,我們在純函數開發的場景下,對 HTTP 場景的函數,包括(HTTP觸發器,API 網關等)做了額外的增強支持。
???v2.0 升級 - 裝飾器統一
v1.0 時期,我們將觸發器的各個參數定義在 f.yml 中,雖然在云原生看來是標準的,但是實際在編寫代碼的時候,用戶覺得非常繁瑣,特別是加上我們的依賴注入容器中?@Func 裝飾器和類的命名,函數名 + handler 名 + 類名 + 方法名用戶需要命名多遍。
v2.0 版本開始,我們直接沿用應用的開發方式,使用原有的?@Controller 裝飾器應用到 HTTP 函數的開發中。
同時,原有 f.yml 里的 functions 字段將不再需要填寫,我們的發布工具會自動從代碼中分析路由,注冊函數。
除了?@Controller 裝飾器,我們也支持傳統應用的參數裝飾器,比如?@Query ,?@Body 等常用的從請求中獲取參數的裝飾器,也支持例如 SetHeader , ContentType 等對響應操作的裝飾器。
除了裝飾器統一之外,我們將原有的?@midwayjs/faas 框架也接入到了新的 Framework 體系,現在?@midwayjs/faas 成為了函數 Framework,它也擁有和應用相同的 Application , Context 定義。比如下面的 app 方法,和應用完全一致。
為了更好的支持函數式的寫法,我們對入口的 configuration.ts 增加了函數式寫法,這樣在一體化等函數式場景也可以選擇函數是寫法來編寫。
???v2.0 升級 - 工具鏈升級
從 midway v2.0 開始,我們使用?@midwayjs/cli 作為我們的基礎 cli 工具,原有的函數 cli(@midwayjs/faas-cli)將逐步完成它的歷史使命,也將統一到 @midwayjs/cli 中。
傳統的 cli 是把所有的功能都組合成一個大包,放到一個 npm 包下,這樣每個應用都要裝一份,比較占用硬盤空間和資源。新版本我們做了一個按需加載能力,按照場景進行區分,比如函數和應用場景安裝的 cli 工具就會不同。
這樣的好處是,新版本的 cli 安裝的包比較少,自然速度就快。同時,也能夠自由的去組合其中的插件,將其更合理的應用到不同的場景中。
???v2.0 升級 - 單元測試
針對原有函數的單元測試的情況,我們也做了調整。
原來的 invoke 方法,雖然簡單,但是很難跟創建應用的流程結合,每次 invoke 都是一次完整的初始化邏輯和調用,而且在 HTTP 的場景下,要填寫的參數眾多,難以模擬實際的效果。
新版本,我們沿用了應用的思路,既然能用應用模式啟動,那自然也使用應用的開發方式,使用 supertest 來做測試,比原來簡單和自然多了。
???v2.0?升級 - Web 模式
在 v1.0 時期,我們針對業界常用的 egg/koa/express,做了將應用代碼無縫遷移到 Serverless 環境的功能,這三種框架都可以在 f.yml 中增加 deployType 的方式,通過構建自動化生成入口,支持傳統應用上彈性容器的訴求。
之前也有用戶問道,如果我代碼不希望再跑在函數環境了怎么辦?v2.0 的答案是,你可以將那些代碼,通過應用的模式部署到自己的傳統容器,或者 Docker。
部署的方式很簡單,由于使用了?@midwayjs/serverless-app (上面測試提到過),和應用一樣的編碼模式,就可以啟動一個 HTTP 應用了。
****v2.0?一體化能力增強
去年 6 月,我們向社區開放了一體化編碼的方案,使用函數式編碼,類 React Hooks 的編碼方式,讓前端開發的同學無比熟悉。
在 v2.0 之中,我們進一步增強了這套一體化方案,讓前端開發的體驗進一步提升。從下面這四個方面,我們將一一為大家介紹。
???一體化增強 - 極速啟動
首先是極速模式,傳統的 React/Vue 開發/構建的時間大家也都了解,Webpack 的工作時間往往接近 20s,而得益于最近新出的 vite,經過我們的測試和使用,傳統的 20s 將縮減到了 2s 以下,可以說前端再一次得以飛躍。
而 vite 良好的兼容性,可以包容非常多的前端框架,雖然 vite 剛出不久,相信過不了多久,就會在全前端場景鋪開。
???一體化增強 -?單元測試
第二個方面是單測,傳統的一體化,由于編譯的存在,我們的單測十分困難,有用戶不止一次的問我們,怎么做單測,怎么優雅的做前后端調用。
在新的 v2 中,我們采用了兩種方案做測試。
即可使用 supertest 來執行傳統的 HTTP 行為模擬做單測,也可以使用我們提供的 runFunction 函數來做單測。
???一體化增強 -?支持應用
最后
前端CSS面試題文檔,JavaScript面試題文檔,Vue面試題文檔,大廠面試題文檔
542a68eded2007a1385c260.png “image.png”)
???一體化增強 -?支持應用
最后
前端CSS面試題文檔,JavaScript面試題文檔,Vue面試題文檔,大廠面試題文檔
[外鏈圖片轉存中…(img-xf4oBwSw-1720097754337)]
[外鏈圖片轉存中…(img-MCnvZO4d-1720097754338)]