Safari Technology Preview 242:IndexedDB getAllRecords、CSS attr() 第五層級、dialog closedby
WebKit Blog · 2026-04-23
Safari Technology Preview 242(commit 範圍 310187@main…310599@main)針對 macOS Tahoe 與 macOS Sequoia 發布,帶來多項 Web 平台標準的實作進展。
Web API:IndexedDB getAllRecords
IndexedDB API 新增 getAllRecords() 方法與 IDBGetAllOptions 介面。與既有的 getAll() 不同,getAllRecords() 一次回傳包含 key 與 value 的完整記錄物件,省去逐一呼叫 getKey() 的往返開銷。IDBGetAllOptions 提供 query、count、direction 等選項,覆蓋既有 getAll(key, count) 的功能並加以泛化。
CSS:attr() 第五層級與 font-synthesis-style
CSS Values Level 5 的 attr() 函數現已獲支援。相較於 CSS 2.1 僅限於 content 屬性中使用字串,新版 attr() 可指定型別(<number>、<color>、<length> 等),並可用於任意 CSS 屬性,例如 width: attr(data-w px)。同時新增 CSS Fonts Level 4 的 oblique-only 值用於 font-synthesis-style,讓瀏覽器在字型缺少斜體變體時僅產生傾斜合成版本,而不合成完整斜體。
本版本亦修復了數個 CSS 迴歸:@media (prefers-color-scheme: dark) 在 iframe 設有 color-scheme: dark 時的匹配問題;position-try-order 應使用 containing block 的書寫方向而非元素自身書寫方向;錨點定位元素無法跟隨 sticky 定位子元素的問題;連字(ligature)造成零寬文字產生非零 layout 寬度的問題。
HTML:dialog closedby 屬性
<dialog> 元素新增 closedby 屬性,允許作者宣告性地控制對話框的關閉觸發方式,可選值為 any(點擊任意處或按 Escape)、closerequest(僅 Escape 或瀏覽器的關閉請求)以及 none(僅程式碼控制)。此設計移除了開發者長期需要自行附加 click 事件監聽器模擬 light-dismiss 行為的需求。
WebRTC 與 SVG
WebRTC 新增 RTCRtpReceiver.jitterBufferTarget,開放對抖動緩衝區目標延遲的直接控制,有助於即時通訊應用在延遲與流暢度之間進行細粒度調整;同時統計資料中新增視訊來源的 width/height 屬性。SVG 方面新增 lang 與 xml:lang 屬性支援;修復了 <image> 元素的 SMIL href/xlink:href 動畫問題、漸層動畫需要明確 y1/y2 屬性的問題,以及 <tspan> 在 xml:space="preserve" 時的多行定位錯誤。
安全性與其他
Secure cookies 現在在 loopback 主機(127.0.0.1、::1)上正常作用,解決本機開發環境中 Secure Cookie 測試的問題。document.open() 不再錯誤地將呼叫者的安全來源別名至文件;structuredClone() 可正確序列化 Object.prototype;VideoFrame I420 BT.709 編碼至 VP9 時的色彩空間錯誤一併修正。
原始來源:WebKit Blog
TC39 Stage 3 新增提案:Atomics.pause、Import Text、Joint Iteration
TC39 Proposals · 2026-05
TC39 Stage 3 提案清單近期新增三項與效能、模組系統及迭代器相關的規格,分別填補 JavaScript 在底層並發控制、靜態資源引入與多路迭代上的空缺。
Atomics.pause(提案人:Shu-yu Guo)
proposal-atomics-microwait 新增 Atomics.pause([iterCount]) 靜態方法,在 SharedArrayBuffer 上進行自旋等待(spin-wait)時插入 CPU 停頓提示(x86 上對應 PAUSE 指令,ARM 上對應 YIELD)。這讓 JavaScript 在多執行緒場景(SharedArrayBuffer + Worker)中能有效降低自旋迴圈的功耗與流水線衝突,而無需回退到 Atomics.wait() 的完整睡眠機制。iterCount 參數作為提示,引擎可選擇性地映射到重複的 PAUSE 指令數量,以更精細地控制退讓時間。
Import Text(提案人:Eemeli Aro)
proposal-import-text 允許以靜態語法將文字檔案引入為 JavaScript 字串:
import text from "./template.html" with { type: "text" };此提案與 Module Attributes 工作組協調,使用 with { type: "text" } 斷言區分文字引入與模組引入。與 fetch 或 fs.readFileSync 相比,靜態宣告讓打包工具可在編譯期解析依賴並進行 tree-shaking,HTML、CSS、WGSL shader 等文字資源因此具備與 JavaScript 模組相同的快取語義。
Joint Iteration(提案人:Michael Ficarra)
proposal-joint-iteration 在 Iterator 上新增 Iterator.zip(iterables, options),以同步方式迭代多個可迭代物件。提供三種 mode 選項:shortest(預設,任一耗盡即停止)、longest(以填充值補齊)、strict(長度不一致即拋出 TypeError);paddingValue 選項可在 longest 模式指定填充值而非預設的 undefined。
Pollen:無控制平面的分散式 WASM 執行環境
github.com/sambigeara · 2026-05-03
Pollen 是一個以 Go 撰寫的自組織網格與 WebAssembly 執行環境,讓工作負載在異質機器間自動擴散執行,完全不依賴中央排程器或控制平面。目前版本 v0.0.1-dev.16,Hacker News 獲 103 點討論。
無控制平面設計
傳統分散式系統(Kubernetes、Nomad)依賴專門的控制器做排程決策。Pollen 改採 CRDT(Conflict-free Replicated Data Type)實現節點狀態同步:每個節點維護一份收斂的 gossip 文件,排程決策由各節點在本地依此文件進行確定性計算,不需要向中心節點請求授權。
傳輸層:QUIC over UDP
節點間連線使用 QUIC 協定,提供多路複用加密連線。Pollen 支援 NAT 穿透:公開節點自動成為 relay;節點間優先嘗試直接打洞連線,若失敗則通過最短路徑的 relay 中繼。所有連線使用 mTLS 零信任模型,不需要共享金鑰或額外防火牆設定。
工作負載模型
工作負載(稱為「seeds」)以 WASM 二進制的形式發布,透過內容雜湊(content hash)進行點對點分發。節點依本地容量、快取的工件與流量鄰近性,自主決定是否承載副本。當節點故障時,存活節點自動接手其工作負載。支援的工作負載型別包含:WASM 模組(透過 Extism 執行)、Mesh Service(TCP/UDP)、靜態站台以及內容定址 blob。