[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-copilot-studio-dotnet-10-wasm-performance-zh":3,"article-related-copilot-studio-dotnet-10-wasm-performance-zh":33,"series-tools-bd960274-ba91-484f-a56e-4c1504665ec5":87},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":26,"views":30,"created_at":31,"published_at":32,"topic_cluster_id":11},"bd960274-ba91-484f-a56e-4c1504665ec5","copilot-studio-dotnet-10-wasm-performance-zh","Copilot Studio 換上 .NET 10 WASM 後更快了","\u003Cp data-speakable=\"summary\">\u003Ca href=\"\u002Ftag\u002Fcopilot\">Copilot\u003C\u002Fa> Studio 把瀏覽器端 WebAssemb\u003Ca href=\"\u002Fnews\u002Fwhy-polyai-kong-deal-right-move-enterprise-ai-zh\">ly\u003C\u002Fa> 引擎升到 .NET 10，執行速度變快，部署流程也少了幾段手工處理。\u003C\u002Fp>\u003Cp>說真的，這種升級很實在。\u003Ca href=\"\u002Fnews\u002Fwhy-midjourney-81-raw-mode-better-default-style-zh\">Mi\u003C\u002Fa>crosoft 把 \u003Ca href=\"https:\u002F\u002Fdotnet.microsoft.com\u002Fen-us\u002Fdownload\u002Fdotnet\u002F10.0\" target=\"_blank\" rel=\"noopener\">.NET 10\u003C\u002Fa> 用到 \u003Ca href=\"https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fmicrosoft-copilot\u002Fmicrosoft-copilot-studio\" target=\"_blank\" rel=\"noopener\">Copilot Studio\u003C\u002Fa> 的瀏覽器端 WebAssembly 引擎上，而且已經上線到正式環境。這代表 C# 直接跑在瀏覽器裡，啟動時間、下載大小、快取處理，都會直接影響\u003Ca href=\"\u002Fnews\u002Fwhy-aws-is-right-to-move-q-developer-users-to-kiro-zh\">使用者\u003C\u002Fa>手感。\u003C\u002Fp>\u003Cp>官方還丟出幾個很具體的數字。套件體積約增加 15%，第一次 AOT 呼叫快了約 20%，之後的 warm call 也快了約 5%。對開發者來說，這種數字比空話有用多了，因為它直接反映出取捨。\u003C\u002Fp>\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>指標\u003C\u002Fth>\u003Cth>.NET 8\u003C\u002Fth>\u003Cth>.NET 10\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>JIT 與 AOT 共用檔案數\u003C\u002Ftd>\u003Ctd>59\u003C\u002Ftd>\u003Ctd>22\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>套件大小變化\u003C\u002Ftd>\u003Ctd>基準\u003C\u002Ftd>\u003Ctd>約增加 15%\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>第一次呼叫執行\u003C\u002Ftd>\u003Ctd>基準\u003C\u002Ftd>\u003Ctd>約快 20%\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>後續呼叫執行\u003C\u002Ftd>\u003Ctd>基準\u003C\u002Ftd>\u003Ctd>約快 5%\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>快速區網 AOT 下載\u003C\u002Ftd>\u003Ctd>基準\u003C\u002Ftd>\u003Ctd>約慢 200 毫秒\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>4G 網路 AOT 下載\u003C\u002Ftd>\u003Ctd>基準\u003C\u002Ftd>\u003Ctd>約慢 5 秒\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>這次升級到底改了什麼\u003C\u002Fh2>\u003Cp>這次遷移其實很單純。根據 \u003Ca href=\"https:\u002F\u002Fdevblogs.microsoft.com\u002Fdotnet\u002F\" target=\"_blank\" rel=\"noopener\">.NET Blog\u003C\u002Fa> 的說法，Copilot Studio 團隊主要就是改專案目標框架，然後確認相依套件都能相容。講白了，就是把專案從 .NET 8 換到 .NET 10，再重建、上線。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778245880937-6sxm.png\" alt=\"Copilot Studio 換上 .NET 10 WASM 後更快了\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這種做法很重要，因為 WebAssembly 專案很容易越做越肥。你一旦自己寫了快取清理、檔名雜湊、完整性驗證，下一次框架升級就可能又要補一堆補丁。Copilot Studio 這次的做法，是盡量吃進 .NET 10 的預設能力，少背自己維護的包袱。\u003C\u002Fp>\u003Cp>我覺得這才是重點。很多團隊在意效能，卻忽略部署成本。結果效能只贏一點點，維運卻多一倍。Copilot Studio 的案例剛好反過來，它把一些手工流程交給框架處理了。\u003C\u002Fp>\u003Cul>\u003Cli>原本就是跑在 .NET 8。\u003C\u002Fli>\u003Cli>新版已經正式上線。\u003C\u002Fli>\u003Cli>原有快取邏輯仍然保留。\u003C\u002Fli>\u003Cli>沒有重寫整個應用架構。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>自動指紋化，少寫一堆部署雜活\u003C\u002Fh2>\u003Cp>.NET 10 對 WebAssembly 最有感的改動之一，是發佈資產自動 fingerprinting。白話一點，就是建置系統會自動在檔名裡加上唯一識別，快取更新和完整性檢查就不用自己拼命補腳本。\u003C\u002Fp>\u003Cp>在舊流程裡，Copilot Studio 需要先讀發佈清單，再把檔案改成 SHA256 雜湊名稱，最後還要從 JavaScript 傳完整性資料去載入資源。這些事不是不能做，但很煩，而且很容易壞。升到 .NET 10 之後，這些步驟少了很多。\u003C\u002Fp>\u003Cp>\u003Ca href=\"\u002Ftag\u002Fmicrosoft\">Microsoft\u003C\u002Fa> 的 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fruntime\u002Fblob\u002Fmain\u002Fsrc\u002Fmono\u002Fwasm\" target=\"_blank\" rel=\"noopener\">.NET WebAssembly runtime\u003C\u002Fa> 也把這套流程整合進去。資源可以直接載入，檔名會自動指紋化，完整性驗證也交給平台處理。這種事看起來不起眼，但對長期維護很有差。\u003C\u002Fp>\u003Cblockquote>“Moving an existing .NET 8 WASM application to .NET 10 is largely a matter of updating the target framework in the .csproj files and ensuring all dependencies are compatible with the new version.” — Daniel Roth, Principal Product Manager, Microsoft\u003C\u002Fblockquote>\u003Cp>這句話很直白，也很有份量。它的意思是，框架開始把原本要靠團隊自己補的東西收回去。你少寫幾段自訂腳本，日後少踩幾次雷。\u003C\u002Fp>\u003Cp>另外還有一個小細節。若你把 .NET WASM runtime 放進 WebWorker，初始化時要設 \u003Ccode>dotnetSidecar = true\u003C\u002Fcode>。這種設定看起來瑣碎，但常常就是你卡住的地方。\u003C\u002Fp>\u003Ch2>AOT 變更，重點其實不是變大一點\u003C\u002Fh2>\u003Cp>另一個值得注意的改動，是 \u003Ccode>WasmStripILAfterAOT\u003C\u002Fcode> 在 AOT 建置下預設開啟。意思很簡單。方法一旦先編譯成 WebAssembly，原本的 IL 在執行時就不需要了，所以 .NET 10 會自動把它剝掉。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778245871139-b6lc.png\" alt=\"Copilot Studio 換上 .NET 10 WASM 後更快了\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>Copilot Studio 用的是混合策略。JIT 先讓使用者快速互動，AOT 再在背景處理比較重的工作。這樣做的好處很明顯，就是先讓介面動起來，再慢慢把重活接上去。使用者不會傻等整包 AOT 下載完。\u003C\u002Fp>\u003Cp>這裡的數字很值得看。JIT 和 AOT 共用的檔案數，從 .NET 8 的 59 個降到 .NET 10 的 22 個。這代表重複內容少了，分工更清楚，但也讓套件體積增加一些。\u003C\u002Fp>\u003Cul>\u003Cli>共用檔案數從 59 降到 22。\u003C\u002Fli>\u003Cli>套件體積約增加 15%。\u003C\u002Fli>\u003Cli>第一次呼叫約快 20%。\u003C\u002Fli>\u003Cli>後續呼叫約快 5%。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果只看下載時間，這看起來像是退步。但要放在使用情境裡看。Microsoft 提到，在快速區網上，AOT 下載大約慢 200 毫秒；在 4G 網路上，大約慢 5 秒。可是在這段時間裡，使用者已經可以先操作 JIT 版內容了。\u003C\u002Fp>\u003Cp>所以這不是單純比大小。這是在比體感。對桌機使用者來說，背景多幾秒通常還能接受。對行動網路使用者來說，就要更仔細評估，但至少你拿到的是更快的執行速度。\u003C\u002Fp>\u003Ch2>這跟其他 WebAssembly 專案相比怎樣\u003C\u002Fh2>\u003Cp>如果拿一般 Blazor 或 WebAssembly 專案來看，Copilot Studio 的做法很像一個成熟團隊該做的選擇。它不是追求最小下載，而是把部署複雜度和執行速度一起算進去。這才符合真實產品，而不是 demo。\u003C\u002Fp>\u003Cp>很多團隊卡在自訂資產流程。你可能有自己的檔名雜湊、完整性驗證、CDN 快取規則，甚至還有一堆 shell script。這些東西一旦散落在 pipeline 裡，升版就會變成考古現場。\u003Ca href=\"https:\u002F\u002Flearn.microsoft.com\u002Faspnet\u002Fcore\u002Fblazor\u002Fhost-and-deploy\u002Fwebassembly\" target=\"_blank\" rel=\"noopener\">Blazor WebAssembly 部署文件\u003C\u002Fa> 一直都在提醒這件事：部署越標準化，維護成本越低。\u003C\u002Fp>\u003Cp>再看競品思路。像 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Femscripten-core\u002Femscripten\" target=\"_blank\" rel=\"noopener\">Emscripten\u003C\u002Fa> 路線偏向把 C++ 生態搬進瀏覽器。\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FWebAssembly\" target=\"_blank\" rel=\"noopener\">WebAssembly\u003C\u002Fa> 本身也不是只服務 .NET。可是 .NET 10 的優勢在於，它把常見的資產處理收進框架，讓 .NET 團隊少寫很多周邊邏輯。\u003C\u002Fp>\u003Cul>\u003Cli>.NET 10：自動 fingerprinting。\u003C\u002Fli>\u003Cli>舊流程：手工雜湊與完整性檢查。\u003C\u002Fli>\u003Cli>JIT 先上，AOT 後補。\u003C\u002Fli>\u003Cli>適合需要互動優先的產品。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果你是做內部工具，這種差異可能更明顯。內部工具常常要求快速上線，也常常沒人想維護一堆自訂腳本。這時候，框架內建能力就很香，因為它少掉很多人肉維護。\u003C\u002Fp>\u003Cp>如果你是做面向大量行動使用者的產品，就要更小心。4G 多出 5 秒，不是小數字。你得自己量測，不能只看官方 \u003Ca href=\"\u002Ftag\u002Fbenchmark\">benchmark\u003C\u002Fa>。這點我會講得很直接，因為很多團隊最愛拿別人的數字當自己的結論。\u003C\u002Fp>\u003Ch2>這次升級透露的產業方向\u003C\u002Fh2>\u003Cp>這件事其實在講一個很現實的方向。WebAssembly 不再只是「能跑就好」，而是開始講求可維護、可部署、可長期迭代。框架如果能幫你處理資產命名、完整性驗證、AOT 剝離，團隊就能把時間花在功能本身。\u003C\u002Fp>\u003Cp>對 Microsoft 來說，Copilot Studio 是很好的示範案例。它不是小玩具，而是實際產品。既然正式環境都能從 .NET 8 升到 .NET 10，代表這套路線已經夠穩，至少對某些工作負載是這樣。\u003C\u002Fp>\u003Cp>更大的意義是，這會影響其他做 Blazor、WebAssembly、甚至內部平台的團隊。你如果還在維護自訂 hash 腳本、手動 integrity 檢查，現在就該拿 staging 環境試一次 .NET 10。別等到下一次大升版才發現自己欠一堆技術債。\u003C\u002Fp>\u003Ch2>接下來該怎麼看\u003C\u002Fh2>\u003Cp>我會把這次更新解讀成一個訊號。未來做 .NET WebAssembly 專案，標準化部署流程會比自己造輪子更重要。效能當然要看，但維護成本也要一起算，不然你只是把問題往後丟。\u003C\u002Fp>\u003Cp>如果你手上有 Blazor 或其他 WASM 專案，建議先做兩件事。第一，升到 \u003Ccode>net10.0\u003C\u002Fcode> 測試。第二，量一下你自己的下載時間、第一次互動時間、後續呼叫時間。別只看平均值，因為行動網路和桌機的差很多。\u003C\u002Fp>\u003Cp>講白了，這種升級最怕紙上談兵。你應該先在 staging 跑一輪，確認資產 fingerprinting、AOT 行為、WebWorker 初始化都正常，再決定要不要全面切換。這樣比較務實，也比較不會翻車。\u003C\u002Fp>","Copilot Studio 把瀏覽器端 WebAssembly 引擎升到 .NET 10，帶來更快執行、較少部署雜活，還公開了實測數字。","devblogs.microsoft.com","https:\u002F\u002Fdevblogs.microsoft.com\u002Fdotnet\u002Fcopilot-studio-dotnet-10-migration\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1778245880937-6sxm.png","tools","zh","78a2a3e2-c355-412d-bdf5-eceea1c3102f",[17,18,19,20,21,22,23,24,25],"Copilot Studio",".NET 10","WebAssembly","WASM","AOT","Blazor","Microsoft","效能優化","部署流程",[27,28,29],"Copilot Studio 已把瀏覽器端 WebAssembly 引擎升到 .NET 10，並且已在正式環境上線。","這次升級讓第一次 AOT 呼叫快約 20%，後續呼叫快約 5%，但套件體積也增加約 15%。",".NET 10 的自動 fingerprinting 和 AOT 預設剝離 IL，能減少自訂部署腳本與維運成本。",4,"2026-05-08T13:10:53.938982+00:00","2026-05-08T13:10:53.727+00:00",{"tags":34,"relatedLang":46,"relatedPosts":50},[35,37,39,42,44],{"name":18,"slug":36},"net-10",{"name":19,"slug":38},"webassembly",{"name":40,"slug":41},"Wasm","wasm",{"name":17,"slug":43},"copilot-studio",{"name":21,"slug":45},"aot",{"id":15,"slug":47,"title":48,"language":49},"copilot-studio-dotnet-10-wasm-performance-en","Copilot Studio gets faster with .NET 10 WASM","en",[51,57,63,69,75,81],{"id":52,"slug":53,"title":54,"cover_image":55,"image_url":55,"created_at":56,"category":13},"bef47dbc-b0b4-439e-bae9-abe9473a321c","wei-shen-me-tether-ba-ben-di-ai-ji-yi-tui-jin-ri-chang-zhuan-zh","為什麼 Tether 把本地 AI 記憶推進日常裝置是對的","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780542170805-opi6.png","2026-06-04T03:02:19.599329+00:00",{"id":58,"slug":59,"title":60,"cover_image":61,"image_url":61,"created_at":62,"category":13},"d3ec03a8-a805-4a21-9826-72a74a72b625","databricks-model-serving-llm-deploy-guide-zh","Databricks Model Serving 讓 LLM 部署變簡單","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780525998117-7ur8.png","2026-06-03T22:32:51.005996+00:00",{"id":64,"slug":65,"title":66,"cover_image":67,"image_url":67,"created_at":68,"category":13},"4dd225a8-bf6c-4768-a486-a27956c7033d","opencode-digitalocean-model-freedom-zh","OpenCode+DigitalOcean 讓你切換模型","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780525116428-1q7g.png","2026-06-03T22:18:06.969758+00:00",{"id":70,"slug":71,"title":72,"cover_image":73,"image_url":73,"created_at":74,"category":13},"4bdcf208-fb80-484e-b4b6-06af035a6df1","modulate-aws-voice-chats-into-signals-zh","Modulate 用 AWS 把語音聊天做成訊號","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780519733892-rxue.png","2026-06-03T20:48:22.697917+00:00",{"id":76,"slug":77,"title":78,"cover_image":79,"image_url":79,"created_at":80,"category":13},"f44a28d3-2305-43de-b5fa-21217d561054","amazon-rekognition-content-moderation-filter-zh","Amazon Rekognition把審核變成過濾器","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780517005409-bxfc.png","2026-06-03T20:02:57.634353+00:00",{"id":82,"slug":83,"title":84,"cover_image":85,"image_url":85,"created_at":86,"category":13},"80f6f40b-3217-45e4-acff-7b2f6d261779","codex-workspace-limits-tell-you-why-zh","Codex 讓工作區限額錯誤說人話","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1780514293711-ltqa.png","2026-06-03T19:17:41.340056+00:00",[88,93,98,103,108,113,118,123,128,133],{"id":89,"slug":90,"title":91,"created_at":92},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":124,"slug":125,"title":126,"created_at":127},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":129,"slug":130,"title":131,"created_at":132},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":134,"slug":135,"title":136,"created_at":137},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]