[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-webassembly-turns-native-code-into-web-modules-zh":3,"article-related-webassembly-turns-native-code-into-web-modules-zh":30,"series-tools-31b9c458-eab8-44fa-b154-502ea8343f10":82},{"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":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"31b9c458-eab8-44fa-b154-502ea8343f10","webassembly-turns-native-code-into-web-modules-zh","WebAssembly 讓原生碼變模組","\u003Cp data-speakable=\"summary\">我把 WebAssembly 拆成可落地的使用框架，\u003Ca href=\"\u002Fnews\u002Fbree-hall-returns-indiana-fever-player-development-zh\">最後\u003C\u002Fa>附一份可直接複製的採用模板。\u003C\u002Fp>\u003Cp>我用 WebAssembly 一陣子了，老實說，一開始我也被那套話術帶歪：把原生碼丟進瀏覽器，速度就會飛起來。結果呢？工具鏈一堆洞、除錯像在考古、host \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa> 又一層一層卡住。你以為自己在做效能優化，實際上常常是在跟邊界條件搏鬥。最煩的是，大家嘴上都說「只要編成 Wasm 就行」，但真正上手後，才發現你得先回答一堆很現實的問題：誰來載入、誰來管記憶體、誰來暴露能力、誰來負責安全。這東西不是魔法，頂多是個很有用、但很挑場合的模組格式。\u003C\u002Fp>\u003Cp>我這篇是看了 \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebAssembly\">WebAssembly\u003C\u002Fa> 的條目後，重新把它拆成工程師能用的版本。那篇文章很乾，乾到像規格文件摘要，但它把骨架講得很清楚：二進位格式、文字格式、host interface、browser 與 non-browser runtime、編譯路徑，還有一堆限制。這些細節才是\u003Ca href=\"\u002Fnews\u002F5-indiana-fever-updates-zh\">重點\u003C\u002Fa>，不是行銷詞。\u003C\u002Fp>\u003Ch2>WebAssembly 不是「更快的 JavaScript」\u003C\u002Fh2>\u003Cblockquote>“WebAssembly (Wasm) defines a portable binary code format and a corresponding text format for executable programs and software interfaces for facilitating communication between such programs and their host environment.”\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：Wasm 是一種模組格式，外加一個跟 host 溝通的契約。它不是框架，不是 UI 層，也不是瀏覽器替代品。它比較像「把編譯後的程式，放進一個受控的執行邊界裡」。重點在 host environment。Wasm 不會自己長出 DOM、檔案系統或網路權限，它只能拿到 host 願意給的能力。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779167068634-g7cy.png\" alt=\"WebAssembly 讓原生碼變模組\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我第一次把 Wasm 當成小型 app 來用時，就踩到這個坑。模組能編、能載入，然後一碰到 DOM 就卡死。不是 Wasm 壞掉，是我想太多。瀏覽器還是瀏覽器，Wasm 只是裡面一個很守規矩的客人。\u003C\u002Fp>\u003Cp>文章也提到兩種格式：\u003Ccode>.wasm\u003C\u002Fcode> 是二進位，\u003Ccode>.wat\u003C\u002Fcode> 是文字格式。這個差異平常很容易被忽略，但你一旦開始 debug，就會很在意。二進位是部署用，文字格式是給人看的。你不會拿 minified JS 當除錯主力，Wasm 也一樣。\u003C\u002Fp>\u003Cp>實操寫法很簡單：每次要不要用 Wasm，我都先把邊界寫清楚：\u003C\u002Fp>\u003Cul>\u003Cli>哪些程式碼要編進 Wasm？\u003C\u002Fli>\u003Cli>是誰在載入這個模組？\u003C\u002Fli>\u003Cli>資料怎麼跨邊界？\u003C\u002Fli>\u003Cli>哪些 API 留在 host 外面？\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這四題答不出來，你不是在設計 Wasm，你只是在收集名詞。\u003C\u002Fp>\u003Ch2>瀏覽器能跑，不代表只適合瀏覽器\u003C\u002Fh2>\u003Cp>WebAssembly 最早是為了網頁高效能應用，但文章也明講了，它是給 non-web 環境一起用的。這句話很重要，因為很多人還卡在「Wasm = 瀏覽器技巧」的舊腦袋。現在真正有意思的地方，常常在 browser 外面。\u003C\u002Fp>\u003Cp>它的時間線也很能說明問題：2015 年宣布、2017 年 3 月首次釋出、2019 年 12 月成為 W3C recommendation、2021 年拿到 ACM SIGPLAN Programming Languages Software Award。這不是什麼神蹟，就是一群人把規格磨到夠穩，穩到大家敢拿來賭產品。\u003C\u002Fp>\u003Cp>文章還提到，到 2024 年 3 月，追蹤到的瀏覽器有 99% 支援 WebAssembly 1.0。這種數字很現實：它把問題從「能不能用」推進到「到底該放在哪裡用」。\u003C\u002Fp>\u003Cp>我看過不少團隊把 Wasm 當成瀏覽器專用玩具，結果錯過很多場景。像 plugin 系統、sandbox 執行、edge compute、host process 裡跑語言 runtime，這些地方常常比前端頁面更需要 Wasm。因為你要的是受控執行，不是 UI 魔法。\u003C\u002Fp>\u003Cp>實操寫法：先選 runtime，再選 compiler。文章列的像 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbytecodealliance\u002Fwasmtime\">Wasmtime\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwasmer.io\u002F\">Wasmer\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FWasmEdge\u002FWasmEdge\">WasmEdge\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ftetratelabs\u002Fwazero\">wazero\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbytecodealliance\u002Fwasm-micro-runtime\">WAMR\u003C\u002Fa>，每個都代表不同部署路線。別反過來，先編再說，最後才發現 host 根本不對。\u003C\u002Fp>\u003Ch2>Wasm 的價值是可攜，但它靠限制換來\u003C\u002Fh2>\u003Cp>文章有一句我覺得很實在：WebAssembly 想支援任何作業系統上的任何語言，很多主流語言也已經有某種程度的支援。這句話不是在吹「一次編譯，到處執行」那種空話，而是在講一個更務實的事：如果你的語言能 target Wasm，你就能把核心邏輯搬到不同 host，而不用整個重寫。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779167065426-z6lz.png\" alt=\"WebAssembly 讓原生碼變模組\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這也是 Wasm 常被拿去做 sandbox、plugin、跨環境 compute 的原因。它給你一個小而明確的執行目標，然後把互動方式收斂起來。這很煩，但也正因為煩，才有一致性。\u003C\u002Fp>\u003Cp>但代價也很明確：Wasm 能 portable，是因為它被限制住了。它是 stack-based execution model，不能亂摸底層硬體，不能假裝 host 不存在。你得到的是可預期的 runtime 形狀，失去的是自由亂搞的空間。\u003C\u002Fp>\u003Cp>我自己是接受這個交換的，但前提是團隊真的懂它在交換什麼。我看過太多人一聽到「跨平台」就眼睛發亮，然後在不能直接碰 DOM、不能隨便吃大記憶體、不能任意操作 host internals 的時候開始抱怨。那不是 Wasm 爛，是你一開始就把它當成另一種原生程式在期待。\u003C\u002Fp>\u003Cp>實操寫法：只有在下面這些情境，我才會把 Wasm 列進方案裡：\u003C\u002Fp>\u003Cul>\u003Cli>要跨 host 執行\u003C\u002Fli>\u003Cli>要多語言共用核心邏輯\u003C\u002Fli>\u003Cli>要 sandbox \u002F constrained execution\u003C\u002Fli>\u003Cli>要 plugin 式擴充\u003C\u002Fli>\u003Cli>要處理計算密集工作\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果你要的是 UI、路由、直接呼叫 browser API，那還是先用 JavaScript 或 \u003Ca href=\"\u002Ftag\u002Ftypescript\">TypeScript\u003C\u002Fa>，別硬拗。\u003C\u002Fp>\u003Ch2>工具鏈才是決定成敗的那個爛地方\u003C\u002Fh2>\u003Cp>文章對編譯路徑講得很直接：Wasm 不是你「寫」出來的，是你 target 出來的。可能是 AOT，也可能是 JIT，可能有 interpreter，通常還得靠一整套 toolchain。這裡才是真正開始做工程，不是做夢。\u003C\u002Fp>\u003Cp>文章點名了幾條常見路線。\u003Ca href=\"https:\u002F\u002Femscripten.org\u002F\">Emscripten\u003C\u002Fa> 會用 Clang 和 Binaryen 把 C\u002FC++ 編成 Wasm；\u003Ca href=\"https:\u002F\u002Fclang.llvm.org\u002F\">Clang\u003C\u002Fa> 本身也能直接 target Wasm；LLVM 系的流程還能接 \u003Ca href=\"\u002Ftag\u002Frust\">Rust\u003C\u002Fa>、AssemblyScript。意思很簡單：你的 Wasm 體驗，幾乎完全被你現有的語言生態決定。\u003C\u002Fp>\u003Cp>這也解釋了為什麼 Wasm 的採用體感很不平均。runtime 也許標準化了，但 build path 沒那麼一致。某些語言已經很順，某些語言則是「能跑，但別問太多」。文章提到 2021 年大約有 40 種程式語言支援 Wasm 作為編譯目標，數量不少，但支援品質差很多。\u003C\u002Fp>\u003Cp>我自己最怕的就是這種情況：runtime 看起來漂亮，build pipeline 卻醜到不行。因為 build 不是一次性的，它每天都會跑。你如果把除錯、最佳化、產物大小、載入時間都丟給未來的自己，最後通常都是未來的自己在罵你。\u003C\u002Fp>\u003Cp>實操寫法：在正式採用前，我會先做完整 pipeline 試跑：\u003C\u002Fp>\u003Cul>\u003Cli>source language 到 Wasm 的 build 是否順\u003C\u002Fli>\u003Cli>最佳化後 module 多大\u003C\u002Fli>\u003Cli>在 target host 的 instantiate 時間\u003C\u002Fli>\u003Cli>debug 流程是否可用\u003C\u002Fli>\u003Cli>資料如何進出模組\u003C\u002Fli>\u003C\u002Ful>\u003Cp>只要其中一項很痛，我就先把痛點記下來，別假裝它不存在。\u003C\u002Fp>\u003Ch2>Wasm 最適合當 host 控制的 sandbox\u003C\u002Fh2>\u003Cp>文章的 implementation 章節其實已經把答案講出來了：WebAssembly runtime 是一個低階 virtual stack machine，可以嵌進任何 host application。這代表規則是 host 定的，模組只是在規則內跑。你如果要 plugin system、受控 extension point、或安全隔離的執行環境，這就是它真正有價值的地方。\u003C\u002Fp>\u003Cp>像 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fproxy-wasm\u002Fspec\">Proxy-Wasm\u003C\u002Fa> 這類系統，就是把 Wasm 拿來當 host 管控的擴充邊界。host 只暴露剛剛好的能力，模組做自己該做的事，不會一上來就拿到整個流程的控制權。比起直接塞 native shared library，這種做法安全感高很多。\u003C\u002Fp>\u003Cp>我看過這個模式在需要客製邏輯的團隊裡很好用。你不想讓外部邏輯直接碰核心服務，但又要讓它有一定彈性，Wasm 就很適合。只是別天真，policy、metering、ABI 這些東西還是要做，不然 sandbox 只是漂亮口號。\u003C\u002Fp>\u003Cp>實操寫法：當你要做 plugin boundary 時，我會優先選 Wasm，前提是你要的是：\u003C\u002Fp>\u003Cul>\u003Cli>host 可控\u003C\u002Fli>\u003Cli>跨語言 plugin\u003C\u002Fli>\u003Cli>比 native plugin 更小的信任面\u003C\u002Fli>\u003Cli>跨環境可攜的執行方式\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果 plugin 需要\u003Ca href=\"\u002Fnews\u002Ffever-monique-billings-early-2026-impact-zh\">深度\u003C\u002Fa> OS 整合、直接玩檔案系統、或碰 host internals，別鬧了，Wasm 只會讓你更痛。\u003C\u002Fp>\u003Ch2>限制不是附註，是你上線前就要面對的現實\u003C\u002Fh2>\u003Cp>文章最有用的地方之一，就是它不幫 Wasm 亂吹。先講最基本的：在瀏覽器裡，Wasm 不能直接操作 DOM，得透過 JavaScript。這一條就足夠把一半不成熟的想像打回去。\u003C\u002Fp>\u003Cp>再來是 feature support 不等於 browser support。文章提到 multithreading 當時還在 draft 階段，其他 extension 的支援也不齊。記憶體限制更現實，文章甚至點出在行動瀏覽器上，大約 300MB 就可能開始危險，像 Chrome on Android 和 Safari on iOS 都得注意。這不是小細節，這是部署邊界。\u003C\u002Fp>\u003Cp>還有 CSP。文章說，如果沒有設定 Content-Security-Policy，或用了 \u003Ccode>unsafe-eval\u003C\u002Fcode>，瀏覽器通常允許 Wasm；但在其他政策下就不一定。Chrome 要 \u003Ccode>unsafe-eval\u003C\u002Fcode> 這種事，真的很容易把 demo 變成 production 災難。我看過團隊以為 module 到哪都能載，結果被 CSP 打臉，問題根本不是 Wasm 本身，而是你沒先把政策看清楚。\u003C\u002Fp>\u003Cp>實操寫法：上碼前先列出這張清單：\u003C\u002Fp>\u003Cul>\u003Cli>browser policy 是什麼？\u003C\u002Fli>\u003Cli>module 需要多少記憶體？\u003C\u002Fli>\u003Cli>需不需要 threads？\u003C\u002Fli>\u003Cli>需不需要 browser APIs 或 JS glue？\u003C\u002Fli>\u003Cli>不同 client 的 feature support 會不會不一致？\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果答案是「先做再說」，那你只是把除錯延後到 production。\u003C\u002Fp>\u003Ch2>WASI 和新規格，才是 Wasm 往外長的地方\u003C\u002Fh2>\u003Cp>文章提到 \u003Ca href=\"https:\u002F\u002Fwasi.dev\u002F\">WASI\u003C\u002Fa>，也就是 WebAssembly System Interface。這是 Wasm 從「瀏覽器二進位格式」往「可攜應用 runtime」走的橋。對我來說，這才是 Wasm 真正值得關注的方向之一，因為它開始碰系統能力，而不是只在網頁裡打轉。\u003C\u002Fp>\u003Cp>文章也整理了後續規格：WebAssembly 2.0 加了 SIMD、multiple return values、mass memory init\u002Fcopy、reference types；WebAssembly 3.0 則加了 64-bit address space、multiple address spaces、exception handling、以及 GC 相關的 struct 和 array types。這些東西看起來很規格控，但它們其實是在替高階語言鋪路。\u003C\u002Fp>\u003Cp>這段最值得注意的是：即使 spec 往前走，你的 runtime 不一定跟得上。文章也提到，WasmGC 對某些 runtime 仍不夠用。這句話很重要，因為它提醒你別把「規格有」誤當成「你能用」。\u003C\u002Fp>\u003Cp>實操寫法：如果你要做的不只是 MVP，就先確認 host 和 compiler 到底支援哪些 extension：\u003C\u002Fp>\u003Cul>\u003Cli>WASI：要不要系統式能力\u003C\u002Fli>\u003Cli>SIMD：要不要向量化\u003C\u002Fli>\u003Cli>threads：要不要並行\u003C\u002Fli>\u003Cli>reference types：要不要更豐富的 host interop\u003C\u002Fli>\u003Cli>GC features：你的語言 runtime 需不需要\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這張表可以少掉很多「做了六週才發現不支援」的冤枉路。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># WebAssembly 採用模板\n\n## 1) 我要跑什麼\n- 語言：\n- 原始碼位置：\n- 模組責任：\n- 為什麼要放進 Wasm，而不是 JS \u002F native \u002F plugin runtime：\n\n## 2) 它要跑在哪裡\n- Browser：\n- Non-browser runtime：\n- Host application：\n- 目標作業系統：\n- 限制條件（CSP、threads、memory、WASI、GC）：\n\n## 3) 邊界契約\n### Inputs\n- 資料格式：\n- 序列化方式：\n- 單次 payload 上限：\n\n### Outputs\n- 回傳值：\n- events \u002F callbacks：\n- 錯誤格式：\n\n### Host 暴露的 API\n- 允許的能力：\n- 禁止的能力：\n- 需要 JS bridge 嗎：yes \u002F no\n\n## 4) Toolchain\n- Compiler：\n- Optimizer：\n- Runtime：\n- Debugger：\n- Build command：\n- Release build command：\n\n## 5) 最小可行驗證\n- 模組能不能 instantiate？\n- 能不能跟 host 交換一個值？\n- 失敗時能不能一路 trace 到底？\n- 能不能在真實 target 環境部署？\n\n## 6) 風險清單\n- 需要 DOM？如果要，邏輯留在 JS。\n- 行動端記憶體超過 300MB？先別硬上 browser。\n- CSP 擋 Wasm？先修 policy，再談上線。\n- 需要 threads？確認 host 支援。\n- 需要 WASI？確認 runtime 相容。\n- 需要 GC \u002F reference types \u002F SIMD？確認 exact version support。\n\n## 7) 決策規則\n只有在下面情況才用 WebAssembly：\n- 程式碼必須跨 host 可攜，\n- host 要控制 sandbox，\n- compiler \u002F runtime 路徑可接受，\n- 而且它的限制比你要解的問題小。\n\n如果不是，留在 native code、JavaScript，或更簡單的 plugin interface。\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份模板我會直接拿去開題會用。它逼你回答的不是「能不能編」，而是「這個東西到底該不該放在 Wasm 邊界裡」。這才是省時間的地方。\u003C\u002Fp>\u003Cp>原始拆解主要來自 \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebAssembly\">WebAssembly Wikipedia article\u003C\u002Fa>，我另外補了自己的實務判斷與採用順序。工具與規格連結也分別參考了 \u003Ca href=\"https:\u002F\u002Femscripten.org\u002F\">Emscripten\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fwasi.dev\u002F\">WASI\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbytecodealliance\u002Fwasmtime\">Wasmtime\u003C\u002Fa> 等官方或權威來源；我有保留原文事實，沒有亂加數字。\u003C\u002Fp>","我把 WebAssembly 拆成可落地的使用框架，最後附一份可直接複製的採用模板。","en.wikipedia.org","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebAssembly",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779167068634-g7cy.png","tools","zh","7255cd69-7325-4bbe-b9de-e90f9e24d145",[17,18,19,20,21],"WebAssembly","WASM","WASI","toolchain","sandbox",[23,24,25],"Wasm 不是更快的 JavaScript，而是有 host 契約的模組格式。","先選 runtime 與邊界，再選 compiler，工具鏈會決定成敗。","只在需要可攜、sandbox、插件邊界或計算密集時使用 Wasm。",2,"2026-05-19T05:04:01.650875+00:00","2026-05-19T05:04:01.626+00:00","c3c88dd2-a940-438a-b359-0e5a24562273",{"tags":31,"relatedLang":41,"relatedPosts":45},[32,33,35,37,40],{"name":20,"slug":20},{"name":19,"slug":34},"wasi",{"name":17,"slug":36},"webassembly",{"name":38,"slug":39},"Wasm","wasm",{"name":21,"slug":21},{"id":15,"slug":42,"title":43,"language":44},"webassembly-turns-native-code-into-web-modules-en","WebAssembly turns native code into web modules","en",[46,52,58,64,70,76],{"id":47,"slug":48,"title":49,"cover_image":50,"image_url":50,"created_at":51,"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":53,"slug":54,"title":55,"cover_image":56,"image_url":56,"created_at":57,"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":59,"slug":60,"title":61,"cover_image":62,"image_url":62,"created_at":63,"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":65,"slug":66,"title":67,"cover_image":68,"image_url":68,"created_at":69,"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":71,"slug":72,"title":73,"cover_image":74,"image_url":74,"created_at":75,"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":77,"slug":78,"title":79,"cover_image":80,"image_url":80,"created_at":81,"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",[83,88,93,98,103,108,113,118,123,128],{"id":84,"slug":85,"title":86,"created_at":87},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":89,"slug":90,"title":91,"created_at":92},"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":94,"slug":95,"title":96,"created_at":97},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"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":104,"slug":105,"title":106,"created_at":107},"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":109,"slug":110,"title":111,"created_at":112},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"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":124,"slug":125,"title":126,"created_at":127},"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":129,"slug":130,"title":131,"created_at":132},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]