這會是一篇簡短的文章......但希望後續能有更長的文章。
寒假期間我有時間做了一個實驗:
使用 C#/.NET 創建的 Web 工具能否產生與 Rust / Go / Zig ...相當的效能?
所以我做了一些編碼...(你可以在 GitHub 上找到)
過程
我從一個粗略的捆綁器邏輯開始:
- 開啟檔案
- 閱讀他們的內容
- 使用正規表示式來偵測,例如 JS 檔案中的 import 語句
- 解析連結模組
- 開啟已解析/現有的 package.json 檔案以識別模組路徑
結果很簡單:使用 AoT(提前編譯).NET 當然可以用於高效能的 Web 專案。
所以我繼續做了一點實驗;用實際的程式碼理解來取代正規表示式。
太長了;結果
答案是:是的! ?
捆綁器目前功能不完整,但第一個結果非常強大。自述文件中顯示的基準表明其性能絕對與其他工具處於同一水平。夠快了。
更多詳情
就我個人而言,我認為 C#/.NET 比 Rust 簡單得多,而且比 Go 更強大。它也有一些缺點 - 不是說謊。
C#/.NET 能夠在該領域可行的主要原因是 AoT。如果沒有 AoT,啟動效能(以及運行時要求)就會扼殺整個想法。
另一方面,AoT 也帶來了一些挑戰。有些庫無法使用或需要進行一些工作才能整合。因此,.NET 的一些彈性無法使用。
對於 rspack 等工具也使用的最大測試項目,我們得到以下結果:
請注意,即使捆綁器的功能不完整,但它的設計足以在專案上產生有效的結果。因此,儘管目前所有結果都是初步的,但至少有一定的有效性。
Test | esbuild | rspack | Vite | 網路封包 |
---|---|---|---|---|
Small lib | 326ms | 611ms | 601ms | 359ms |
Small project | 670ms | 912ms | 1658ms | 418ms |
Medium project | 1931ms | 2877ms | 10601ms | 974ms |
Large project | 2189ms | 2422ms | 13710ms | 1357ms |
所以,是的,網路封包 已經擊敗了競爭對手,甚至有可能獲得更好的性能。雖然它可以進一步優化,但當引入諸如來源映射或樹搖動之類的東西時,它也會損失一些效能。現在我確信,由於潛在的最佳化(例如 JS AST 生成中的串流),總體上應該與現在大致相同。
目前最大的障礙是它只支援 JS(X) - 還沒有 TypeScript (它嘗試解析這些文件,但一旦使用類型就會失敗)。它「相當」容易支持,但我需要為此分叉 Acornima,而且只有當該專案有足夠的討論度時我才會這樣做。
前景
還有很多事情可以參與其中,那就太好了。不過,需要先弄清楚一些基礎知識。諸如來源映射、TypeScript 支援或配置系統之類的東西會很棒。
這個實驗中有一些其他捆綁器沒有做的事情。例如,如果您的 HTML 入口點有一個導入映射,那麼導入映射中的條目將自動視為外部。同樣,您可以將某些依賴項設定為共用 - 在這種情況下,會自動產生導入映射條目/在生成的 HTML 中建立導入映射。相當整潔。
將來,捆綁器將對 SASS、CSS 模組、CSS-in-JS 以及模組聯合和本機聯合提供本機(即開箱即用)支援。
你有什麼想法?您認為這是一個可行的想法還是只是垃圾?我們需要一個具有合理預設值的快速 .NET 原生捆綁器嗎?
以上是網路封包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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