弱參考支援
預設情況下,如果偵測到支援,wasm-bindgen 會使用 TC39 弱參考提案。 在撰寫本文時,所有主要瀏覽器都支援它。
如果沒有弱參考,您的 JS 整合可能會在 Rust 中出現記憶體洩漏,例如
- 您可能會忘記在 JS 物件上呼叫
.free()
,導致 Rust 記憶體被配置。 - 轉換為 JS 值(
Closure
類型)的 Rust 閉包可能不會被執行和清除。 - Rust 閉包具有
Closure::{into_js_value,forget}
方法,這些方法明確不會釋放底層記憶體。
這些問題都可以透過 JS 中的弱參考提案來解決。無論是否明確釋放記憶體,FinalizationRegistry
都將確保所有記憶體都被清除。請注意,明確釋放記憶體始終是一種可能性並被支援,但如果未呼叫它,則在偵測到 FinalizationRegistry
支援時,記憶體仍將自動釋放。