[{"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":77},{"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。",9,"2026-05-23T03:05:32.433769+00:00","2026-05-23T03:05:32.385+00:00","c3c88dd2-a940-438a-b359-0e5a24562273",{"tags":33,"relatedLang":36,"relatedPosts":40},[34],{"name":20,"slug":35},"webassembly",{"id":15,"slug":37,"title":38,"language":39},"spidermonkey-retiring-asmjs-firefox-148-en","SpiderMonkey is retiring asm.js in Firefox 148","en",[41,47,53,59,65,71],{"id":42,"slug":43,"title":44,"cover_image":45,"image_url":45,"created_at":46,"category":13},"7bed70e8-39cf-45bb-8f71-6ddd31ad2317","openai-screenless-speaker-turns-chatgpt-companion-zh","OpenAI 無螢幕喇叭把 ChatGPT 變陪伴","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784289800548-z10g.png","2026-07-17T12:02:53.189236+00:00",{"id":48,"slug":49,"title":50,"cover_image":51,"image_url":51,"created_at":52,"category":13},"2151fdfb-10ca-419c-b4f6-ce36d6ff435f","scale-turns-cuda-code-into-portable-gpu-builds-zh","SCALE 讓 CUDA 變可攜 GPU 編譯","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784210602836-wqlf.png","2026-07-16T14:02:55.366575+00:00",{"id":54,"slug":55,"title":56,"cover_image":57,"image_url":57,"created_at":58,"category":13},"194cb6f2-9263-4fe4-93f5-20f44ca1bdeb","2027-ai-ml-internship-jobs-daily-zh","2027 AI\u002FML 實習職缺每天更新","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784192579088-va17.png","2026-07-16T09:02:31.951176+00:00",{"id":60,"slug":61,"title":62,"cover_image":63,"image_url":63,"created_at":64,"category":13},"a4781236-56a1-4b87-b223-df328fd3a0e9","mimo-code-free-trial-not-production-ready-zh","MiMo Code 免費不等於生產力：先試用，再決定是否上車","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784169179259-qkyr.png","2026-07-16T02:32:25.375192+00:00",{"id":66,"slug":67,"title":68,"cover_image":69,"image_url":69,"created_at":70,"category":13},"44eead66-c13e-48e9-919e-2dede91d44aa","ollama-raises-65m-14-people-8-9m-users-zh","Ollama 拿下 6500 萬美元，14 人撐起 890 萬用戶","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784167385501-huif.png","2026-07-16T02:02:29.250726+00:00",{"id":72,"slug":73,"title":74,"cover_image":75,"image_url":75,"created_at":76,"category":13},"0c51ae94-4e52-4b2b-81ab-436aed7b7b85","databricks-query-foundation-models-guide-zh","Databricks 讓你用同一套方式查模型","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1784144051476-1d82.png","2026-07-15T19:33:44.882507+00:00",[78,83,88,93,98,103,108,113,118,123],{"id":79,"slug":80,"title":81,"created_at":82},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":84,"slug":85,"title":86,"created_at":87},"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":89,"slug":90,"title":91,"created_at":92},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"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":99,"slug":100,"title":101,"created_at":102},"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":104,"slug":105,"title":106,"created_at":107},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"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":119,"slug":120,"title":121,"created_at":122},"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":124,"slug":125,"title":126,"created_at":127},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]