[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-spidermonkey-retiring-asmjs-firefox-148-zh":3,"article-related-spidermonkey-retiring-asmjs-firefox-148-zh":32,"series-tools-5b2cd70c-920f-4d62-bda2-a482b5e069f8":85},{"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":24,"views":28,"created_at":29,"published_at":30,"topic_cluster_id":31},"5b2cd70c-920f-4d62-bda2-a482b5e069f8","spidermonkey-retiring-asmjs-firefox-148-zh","Firefox 148 開始收掉 asm.js","\u003Cp data-speakable=\"summary\">Firefox 148 預設關閉 asm.js 最佳化，SpiderMonkey 之後會移除相關程式碼，舊專案還能跑，但該轉 WebAssembly 了。\u003C\u002Fp>\u003Cp>說真的，這不是小改動。\u003Ca href=\"https:\u002F\u002Fwww.mozilla.org\u002Ffirefox\u002F148.0\u002Freleasenotes\u002F\" target=\"_blank\" rel=\"noopener\">Firefox 148\u003C\u002Fa> 已經把 asm.js 的特殊最佳化關掉了。\u003C\u002Fp>\u003Cp>Mozilla 的 \u003Ca href=\"https:\u002F\u002Fspidermonkey.dev\u002Fblog\u002F2026\u002F05\u002F20\u002Fsaying-goodbye-to-asmjs.html\" target=\"_blank\" rel=\"noopener\">SpiderMonkey\u003C\u002Fa> 團隊也講得很直白。這條路會在之後移除。\u003C\u002Fp>\u003Cp>你可能會想問，asm.js 又不是不能跑了，幹嘛急著收？答案很簡單。因為 \u003Ca href=\"https:\u002F\u002Fwebassembly.org\u002F\" target=\"_blank\" rel=\"noopener\">WebAssembly\u003C\u002Fa> 已經接手大部分工作。\u003C\u002Fp>\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>項目\u003C\u002Fth>\u003Cth>數值\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Firefox 148\u003C\u002Ftd>\u003Ctd>預設關閉 asm.js 最佳化\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Firefox 22\u003C\u002Ftd>\u003Ctd>asm.js 首次進入 Firefox\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Firefox 52\u003C\u002Ftd>\u003Ctd>WebAssembly 進入 Firefox\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>2026-05-20\u003C\u002Ftd>\u003Ctd>SpiderMonkey 公告日期\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003Ch2>Firefox 到底關掉了什麼\u003C\u002Fh2>\u003Cp>先講白了。asm.js 沒有直接消失。它還是 JavaScript 的嚴格子集合，所以舊碼還能照常執行。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779505553107-vyde.png\" alt=\"Firefox 148 開始收掉 asm.js\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>真正拿掉的是 SpiderMonkey 那條專門辨識 asm.js 的最佳化路徑。以前引擎會特別對待這種碼，現在不會了。\u003C\u002Fp>\u003Cp>這差很多。對網站維護者來說，程式還能跑，不代表效能還在。你少了那層特殊處理，速度就回到一般 JavaScript 的 JIT 路徑。\u003C\u002Fp>\u003Cul>\u003Cli>Firefox 148：asm.js 最佳化預設關閉\u003C\u002Fli>\u003Cli>舊 asm.js 程式：仍可執行\u003C\u002Fli>\u003Cli>特殊編譯管線：後續會移除\u003C\u002Fli>\u003Cli>官方建議：改成 WebAssembly\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>asm.js 當年為什麼這麼紅\u003C\u002Fh2>\u003Cp>要懂這次調整，得回頭看 2010 年代初期。那時候瀏覽器還不太能扛重型應用。\u003C\u002Fp>\u003Cp>Mozilla 推 asm.js，是為了讓 C 和 C++ 類型的工作負載，能在瀏覽器裡接近原生速度跑。這在當年很猛，因為它不用額外 runtime。\u003C\u002Fp>\u003Cp>Mozilla 也不是空口說白話。像 \u003Ca href=\"https:\u002F\u002Funity.com\u002F\" target=\"_blank\" rel=\"noopener\">Unity\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwww.unrealengine.com\u002F\" target=\"_blank\" rel=\"noopener\">Unreal Engine\u003C\u002Fa> 都玩過這條路。\u003Ca href=\"https:\u002F\u002Fwww.ea.com\u002F\" target=\"_blank\" rel=\"noopener\">EA\u003C\u002Fa> 的 Epic Citadel 甚至被移到網頁上，而且只花了 4 天。\u003C\u002Fp>\u003Cblockquote>“asm.js shipped in Firefox 22 back in 2013 and was a success.” — Ryan Hunt, SpiderMonkey\u003C\u002Fblockquote>\u003Cp>這句話很有意思。asm.js 不是終點，它比較像過橋用的工具。\u003C\u002Fp>\u003Cp>它證明了一件事。瀏覽器可以承載嚴肅工作負載，不必額外裝一套獨立執行環境。\u003C\u002Fp>\u003Ch2>WebAssembly 為什麼把它擠下去\u003C\u002Fh2>\u003Cp>後來輪到 WebAssembly 上場。這東西的定位更直接，也更乾淨。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779505555730-9ku6.png\" alt=\"Firefox 148 開始收掉 asm.js\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>Mozilla 說得很明白。asm.js 幫 WebAssembly 開路，而 WebAssembly 在 Firefox 52 就已經進來了。從那時起，舊管線的存在價值就一直在縮。\u003C\u002Fp>\u003Cp>講白了，維持兩套編譯路徑很傷。工程時間要花，測試要做，\u003Ca href=\"\u002Fnews\u002Frust-memes-compiler-pain-jokes-zh\">安全\u003C\u002Fa>面也多一塊要顧。當大多數內容都已經搬去 wasm，留著 asm.js 只是在吃維護成本。\u003C\u002Fp>\u003Cul>\u003Cli>asm.js：Firefox 22 進入\u003C\u002Fli>\u003Cli>WebAssembly：Firefox 52 進入\u003C\u002Fli>\u003Cli>Firefox 148：asm.js 最佳化關閉\u003C\u002Fli>\u003Cli>後續方向：直接移除 asm.js 程式碼\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>這對開發者代表什麼\u003C\u002Fh2>\u003Cp>如果你還在用 asm.js，現在該盤點了。Mozilla 已經很清楚地在告訴你，這條路不會再被優先照顧。\u003C\u002Fp>\u003Cp>最務實的做法，就是重編成 WebAssembly。這不是\u003Ca href=\"\u002Fnews\u002Fscalise-floor-message-gop-playbook-zh\">口號\u003C\u002Fa>，而是很實際的工程決策。你會拿到更好的執行路徑，也比較容易接上現在的工具鏈。\u003C\u002Fp>\u003Cp>對產品面來說，這件事也很實在。載入更快，\u003Ca href=\"\u002Fnews\u002Ffield-of-memories-memorial-day-action-zh\">行動\u003C\u002Fa>裝置壓力更小，弱網路下也比較不痛苦。說真的，現在還死守 asm.js，通常只是技術債越堆越高。\u003C\u002Fp>\u003Cul>\u003Cli>舊專案：還能跑，但不再有特殊最佳化\u003C\u002Fli>\u003Cli>新專案：直接選 WebAssembly\u003C\u002Fli>\u003Cli>維護成本：雙管線很難看\u003C\u002Fli>\u003Cli>實務建議：先做轉譯與效能測試\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>這其實是瀏覽器演進的老故事\u003C\u002Fh2>\u003Cp>很多人看到這種消息，會以為 Mozilla 在砍舊東西。其實不是。這比較像把已經完成任務的零件收起來。\u003C\u002Fp>\u003Cp>asm.js 的價值，在於它證明瀏覽器能跑重型程式。WebAssembly 接手後，這個任務就不需要兩套解法並存了。\u003C\u002Fp>\u003Cp>我覺得這件事很合理。平台演進就是這樣，先靠舊方案撐住，再把流量和工具慢慢移到新標準。現在輪到 asm.js 退場，下一個該看的就是你手上的舊建置流程還剩多少包袱。\u003C\u002Fp>\u003Ch2>接下來你該做什麼\u003C\u002Fh2>\u003Cp>如果你的產品還有 asm.js，先別拖。先找出哪些模組還在用，接著評估轉成 WebAssembly 的成本。\u003C\u002Fp>\u003Cp>如果你已經全站 wasm，那這次變動對你影響不大。你只是少了一個老舊分支要顧。\u003C\u002Fp>\u003Cp>我會建議團隊現在就排一次檢查。不是因為 Firefox 148 會立刻讓舊碼壞掉，而是因為官方已經開始收尾了。等到真的移除時，才回頭補洞，通常都比較痛。\u003C\u002Fp>","Firefox 148 預設關閉 asm.js 最佳化，SpiderMonkey 之後會移除相關程式碼。舊專案還能跑，但建議盡快轉到 WebAssembly。","spidermonkey.dev","https:\u002F\u002Fspidermonkey.dev\u002Fblog\u002F2026\u002F05\u002F20\u002Fsaying-goodbye-to-asmjs.html",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779505553107-vyde.png","tools","zh","31d56ff6-2ea2-4c8d-b7be-fea1bb11405d",[17,18,19,20,21,22,23],"Firefox 148","asm.js","SpiderMonkey","WebAssembly","Mozilla","JavaScript","瀏覽器效能",[25,26,27],"Firefox 148 預設關閉 asm.js 特殊最佳化。","舊 asm.js 程式還能跑，但效能路徑已經縮水。","Mozilla 明確建議把相關工作負載轉到 WebAssembly。",4,"2026-05-23T03:05:32.433769+00:00","2026-05-23T03:05:32.385+00:00","c3c88dd2-a940-438a-b359-0e5a24562273",{"tags":33,"relatedLang":44,"relatedPosts":48},[34,36,38,40,42],{"name":18,"slug":35},"asmjs",{"name":19,"slug":37},"spidermonkey",{"name":20,"slug":39},"webassembly",{"name":21,"slug":41},"mozilla",{"name":17,"slug":43},"firefox-148",{"id":15,"slug":45,"title":46,"language":47},"spidermonkey-retiring-asmjs-firefox-148-en","SpiderMonkey is retiring asm.js in Firefox 148","en",[49,55,61,67,73,79],{"id":50,"slug":51,"title":52,"cover_image":53,"image_url":53,"created_at":54,"category":13},"5656a6ab-9e07-41be-9cea-3440fb8846e2","nvidia-lg-ai-collaboration-playbook-zh","Nvidia 和 LG 把 AI 合作變成模板","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781056994999-8eng.png","2026-06-10T02:02:46.590133+00:00",{"id":56,"slug":57,"title":58,"cover_image":59,"image_url":59,"created_at":60,"category":13},"e48be66d-d7de-419e-b5fd-805f0784ef15","ollama-best-free-ai-path-2026-zh","Ollama 是 2026 年真正適合工作的免費 AI 路徑","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781056077878-11pc.png","2026-06-10T01:47:24.632993+00:00",{"id":62,"slug":63,"title":64,"cover_image":65,"image_url":65,"created_at":66,"category":13},"9b53427c-8c2a-4960-a773-f14d4528caae","awesome-production-ml-turns-chaos-into-stack-zh","這份 MLOps 清單把混亂拆成堆疊","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781055220958-dmar.png","2026-06-10T01:33:14.850634+00:00",{"id":68,"slug":69,"title":70,"cover_image":71,"image_url":71,"created_at":72,"category":13},"d5af1522-28aa-4cfb-8779-1ecf168bc0b5","bentoml-turns-model-serving-into-python-apis-zh","BentoML 把模型服務變成 Python API","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781054310299-c1gm.png","2026-06-10T01:17:56.193093+00:00",{"id":74,"slug":75,"title":76,"cover_image":77,"image_url":77,"created_at":78,"category":13},"63d8b456-ad6b-475e-86e9-d4677ca226aa","magenta-realtime-2-score-inside-daw-zh","Magenta RealTime 2 讓你在 DAW 裡即時改曲","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781046204038-8tox.png","2026-06-09T23:02:55.9651+00:00",{"id":80,"slug":81,"title":82,"cover_image":83,"image_url":83,"created_at":84,"category":13},"f60261ff-a42e-4cfb-9f90-97785e633289","open-source-ai-tools-beat-claude-paid-tiers-zh","開源 AI 工具在價值上已經贏過 Claude 付費方案","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781045266035-on7t.png","2026-06-09T22:47:20.195939+00:00",[86,91,96,101,106,111,116,121,126,131],{"id":87,"slug":88,"title":89,"created_at":90},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":92,"slug":93,"title":94,"created_at":95},"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":97,"slug":98,"title":99,"created_at":100},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":102,"slug":103,"title":104,"created_at":105},"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":107,"slug":108,"title":109,"created_at":110},"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":112,"slug":113,"title":114,"created_at":115},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":117,"slug":118,"title":119,"created_at":120},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":122,"slug":123,"title":124,"created_at":125},"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":127,"slug":128,"title":129,"created_at":130},"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":132,"slug":133,"title":134,"created_at":135},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]