前端前線 2026 年 6 月 7 日

2026-06-07 — SvelteKit query.live() 訂閱、Zeroserve eBPF 伺服器、CPython JIT 暫停

primary=https://svelte.dev/blog/whats-new-in-svelte-june-2026 primary=https://su3.io/posts/introducing-zeroserve primary=https://github.com/losfair/zeroserve primary=https://discuss.python.org/t/an-announcement-from-the-steering-council-regarding-the-jit-project/107638

SvelteKit 2.61:Remote Query 訂閱、TypeScript 6.0 支援與 query.live() API

Svelte Blog · 2026-06-01

Svelte 於 2026 年 6 月發布 SvelteKit 2.57.02.61.0 系列更新,引入遠端查詢訂閱(query.live())、TypeScript 6.0 語言工具支援,以及多個 remote form API 的破壞性變更。最核心的架構改動是 remote queries 現在可以直接 await,不需要呼叫 .run(),並且在 2.59.0 引入的 query.live()2.61.0 中升為穩定的 async iterable 支援。

Remote Query API 破壞性變更

SvelteKit 2.57.0 移除了 remote queries 的 .run() 方法,統一改為直接 await:

// 舊寫法(已移除)
const result = await query.run();

// 新寫法
const result = await query();

Remote queries 現在在事件處理函式、async callbacks 以及模組作用域中均可 await,並內建共享 cache deduping——相同查詢在相同渲染週期中只發出一次網路請求。query.batch() 方法允許在單次網路往返中合併多個查詢,requested() 更新為必須傳入 limit 參數並回傳 { arg, query } 物件。

query.live():長期訂閱查詢

2.59.0 作為實驗性功能引入、在 2.61.0 升為穩定的 query.live() 啟用「長期存活的遠端查詢訂閱」,以 async iterable 形式傳遞即時更新:

for await (const update of query.live()) {
  items = update;
}

這讓 SvelteKit 元件可以在不引入 WebSocket 或 SSE 函式庫的情況下消費伺服器推送的資料流,底層連線管理由 SvelteKit 框架處理。

TypeScript 6.0 與工具鏈更新

Svelte language tools 全線更新支援 TypeScript 6.0,涵蓋 language server、svelte2tsx、svelte-check 和 svelte-preprocess。TypeScript 6.0 引入的 isolatedDeclarations 選項讓大型 monorepo 的並行型別宣告生成成為可能,對使用 SvelteKit 的大型工程有實際的建構時間改善。vite-plugin-svelte 在開發模式啟用伺服器環境的 optimizer,減少冷啟動時的模組轉換負擔。

Svelte MCP 的 stdio 模式現在直接讀取檔案內容而非透過工具呼叫,減少 AI Agent 輔助開發工作流中的來回往返次數。模板(templates)更新允許在 markup 中直接宣告變數,讓值的定義更靠近使用位置,減少元件頂層的樣板程式碼。

原始來源:Svelte Blog


Zeroserve:以 eBPF 腳本化的零設定 io_uring HTTPS 伺服器

su3.io · 2026-06-07

Zeroserve 是一款基於 io_uring 的單執行緒 HTTPS 伺服器,以 Rust 撰寫,提供零設定部署、內建 TLS 1.3 與 Encrypted Client Hello、以及用戶空間 eBPF 腳本化能力。在單核心測試中,小型檔案(174 B)達到 36,681 req/s,優於 nginx 的 31,226 req/s;反向代理場景也比 nginx 高出 21%。

架構:tarball 直接服務

Zeroserve 以 tarball 作為部署單元:網站打包為單一 tarball,伺服器啟動時建立 path → byte-range 索引,所有請求直接對 tarball 做 byte-range 讀取,不在磁碟上解壓任何暫存檔。非同步 I/O 層使用 monoio(completion-based io_uring 執行環境),TLS 層使用 monoio-rustls。相較於 epoll 模型,io_uring 的 SQ/CQ 共享記憶體佇列避免了每次 I/O 完成所需的額外 syscall,在高 req/s 場景節省大量上下文切換成本。

eBPF 腳本的零 syscall 執行路徑

eBPF 整合採用純用戶空間執行模式.zeroserve/scripts/ 下的 C 檔案在打包時以 clang + llc 編譯為 eBPF bytecode,執行期透過 async-ebpf(內嵌 uBPF)JIT 編譯為 x86-64 機器碼,無需 CAP_BPF 或 root 權限。記憶體安全靠 pointer cage——每個記憶體存取都被遮罩進腳本自身的 arena。預設 2ms 搶佔計時器防止腳本阻塞事件迴圈。

腳本 helper API 涵蓋:SHA-256/HMAC/base64、JSON 解析、token bucket 限速、AWS SigV4、OIDC relying-party,以及 zs_reverse_proxy()(維護最多 128 個上游連線池)。

效能對比

場景zeroservenginxCaddy
小型檔案 174 B(單核)36,681 req/s31,226 req/s12,830 req/s
大型檔案 100 KB8,000 req/s (782 MB/s)7,600 req/s
eBPF 啟用(10ms 搶佔)43,709–46,945 req/s
反向代理26,486 req/s21,761 req/s

閒置記憶體約 15 MB PSS;TLS 1.3、ECH、SNI 選取、JA4 指紋均為內建功能,零設定。

原始來源:su3.ioGitHub losfair/zeroserve


CPython JIT 開發暫停:Steering Council 要求提交正式 PEP 後才能繼續

Python Discussions · 2026-06-07

Python Steering Council 正式公告:CPython 的實驗性 JIT 編譯器在 Standards Track PEP 被接受之前,暫停所有新功能開發。錯誤修復與安全補丁不受影響。這是自 PEP 744 於 2024 年將 JIT 引入 CPython 主分支作為實驗性功能以來,最重大的治理層介入。

暫停背景

Steering Council 坦承,JIT 在未達成社群正式共識的情況下進入了主分支,缺少對幾個關鍵問題的明確答覆:長期維護可持續性、與效能剖析器和除錯器的相容性保證、與 free-threading 的互動、成功指標與效能目標時間表,以及與 CinderX、Numba、PyTorch 等第三方 JIT 方案的共存策略。Council 表示對「這種複雜度與影響範圍的變更」未嚴格執行 PEP 流程,並為此承擔責任。

CPython 目前的 JIT 實作基於 copy-and-patch 技術,已在部分基準測試中對特定 Python 工作負載顯示加速效果,但相容性與 ABI 邊界一直是 core developer 持續辯論的議題。

PEP 要求範圍

即將提交的 PEP 必須涵蓋:

  • 明確的維護計畫與貢獻者影響評估
  • 與現有 CPython 功能的相容性策略(尤其是 free-threading 與 C 擴充 ABI)
  • 可量測的效能目標與平台覆蓋範圍(包含 WASM、iOS、Android)
  • 可支援未來替代 JIT 後端的基礎設施設計

六個月窗口從公告日起算,由 Diego Russo 協調草稿撰寫。Steering Council 表示若 PEP 受阻,不會機械式觸發懲罰措施,保留彈性空間。已啟用 JIT 的 Python 3.14 穩定版本行為不受影響;影響的是 main 分支後續新特性的落地節奏。

原始來源:Python Discussions


End of article
0
Would love your thoughts, please comment.x
()
x