当前位置: 首页 > news >正文

深圳优质网站建设案例域名服务器ip查询网站

深圳优质网站建设案例,域名服务器ip查询网站,网站手机客户端开发教程,河南省工程建设信息网一体化平台ES12 (ECMAScript 2021) 特性总结:WeakRef 1. WeakRef 概述 描述 WeakRef 是 ES12 引入的一个新特性,用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象,即使该对象仍然被弱引用持有。WeakRef 通常与 FinalizationRegistry 结合使…

ES12 (ECMAScript 2021) 特性总结:WeakRef

1. WeakRef 概述

描述

WeakRef 是 ES12 引入的一个新特性,用于创建对对象的弱引用。弱引用不会阻止垃圾回收器回收对象,即使该对象仍然被弱引用持有。WeakRef 通常与 FinalizationRegistry 结合使用,用于在对象被垃圾回收时执行清理操作。

语法

const weakRef = new WeakRef(targetObject);

主要方法

  • deref():返回弱引用指向的目标对象。如果目标对象已被垃圾回收,则返回 undefined

2. WeakRef 的用法

创建弱引用

const obj = { name: "Alice" };
const weakRef = new WeakRef(obj);// 访问目标对象
const target = weakRef.deref();
console.log(target); // { name: "Alice" }

检查对象是否被回收

let obj = { name: "Bob" };
const weakRef = new WeakRef(obj);// 解除对 obj 的强引用
obj = null;// 强制触发垃圾回收(仅用于演示,实际环境中不应手动调用)
global.gc();// 检查对象是否被回收
setTimeout(() => {const target = weakRef.deref();console.log(target); // undefined(对象已被回收)
}, 1000);

3. WeakRef 的使用场景

1. 缓存系统

在缓存系统中,可以使用 WeakRef 来缓存对象。当内存不足时,垃圾回收器会自动回收这些对象,从而避免内存泄漏。

示例
const cache = new Map();function getCachedData(key) {let cachedRef = cache.get(key);if (cachedRef) {const cachedData = cachedRef.deref();if (cachedData) {return cachedData;}}// 重新获取数据并缓存const newData = fetchData(key);cache.set(key, new WeakRef(newData));return newData;
}

2. 监听对象生命周期

结合 FinalizationRegistry,可以在对象被垃圾回收时执行清理操作。

示例
const registry = new FinalizationRegistry((heldValue) => {console.log(`Object with value ${heldValue} has been garbage collected.`);
});let obj = { name: "Charlie" };
const weakRef = new WeakRef(obj);// 注册清理回调
registry.register(obj, "some metadata");// 解除对 obj 的强引用
obj = null;// 当 obj 被垃圾回收时,会触发清理回调

3. 避免内存泄漏

在需要持有对象引用但又不想阻止垃圾回收的场景中,WeakRef 是一个理想的选择。

示例
class EventListener {constructor(target) {this.targetRef = new WeakRef(target);this.handleEvent = this.handleEvent.bind(this);target.addEventListener("click", this.handleEvent);}handleEvent(event) {const target = this.targetRef.deref();if (target) {console.log("Event triggered on:", target);} else {// 目标对象已被回收,清理事件监听器event.currentTarget.removeEventListener("click", this.handleEvent);}}
}

4. 注意事项

  1. 垃圾回收的不确定性

    • 垃圾回收的时机由 JavaScript 引擎决定,无法手动控制。
    • 即使对象不再被强引用,垃圾回收也可能不会立即执行。
  2. 避免滥用

    • WeakRefFinalizationRegistry 是高级特性,通常只在特定场景下使用。
    • 过度使用可能导致代码难以理解和维护。
  3. 兼容性

    • 确保目标运行环境支持 WeakRefFinalizationRegistry

5. 总结

特性描述使用场景
WeakRef创建对对象的弱引用,不会阻止垃圾回收器回收对象缓存系统、监听对象生命周期、避免内存泄漏
deref()返回弱引用指向的目标对象,若对象已被回收则返回 undefined检查对象是否仍然可用
结合 FinalizationRegistry在对象被垃圾回收时执行清理操作对象生命周期管理、资源清理

http://www.khdw.cn/news/68587.html

相关文章:

  • 洛阳霞光企业网站建设公司文山seo
  • 网站建设都包括什么科目青岛网站建设制作公司
  • 大连网站建设培训班百度关键词搜索次数
  • 济南做网站的高端品牌seo如何优化
  • 昆山市住房和建设局网站网络营销专业是学什么的
  • 哪家做的濮阳网站建设上海网络推广培训机构
  • 怎么样做网站优化最近刚发生的新闻
  • jsp电子商务网站建设实验广州百度关键词推广
  • wordpress推荐链接廊坊seo关键词排名
  • 有趣的网站名百度网站下载
  • 用angular做的网站重庆seo网站系统
  • 网站服务费怎么做凭证北京广告公司
  • 自己做网站投放有流量么成都互联网公司排名
  • 内容型网站公司网站设计
  • 宁晋网站开发网页生成器
  • 门户网站开发怎么查权重查询
  • 网站建设服务费发票最新最好的磁力搜索
  • 企业网站模版网页设计与制作软件
  • 南开做网站的公司举例说明seo
  • 梅州网站制作行业关键词搜索排名
  • wordpress怎么取当前点击的tagseo搜索引擎优化工资薪酬
  • 视频网站怎么做外链家电企业网站推广方案
  • 国外网站搭建平台南宁seo标准
  • 餐饮网站程序网站建设需要多少钱
  • 政府 门户 网站建设深圳网络推广建站
  • 广州模板建站哪家好软文推广公司有哪些
  • 如何在网上注册公司网站百度营销后台
  • wordpress json 时间石家庄seo网络推广
  • 做网站有兼职吗2023年中国进入一级战备状态了吗
  • 自己做网站视频教程深圳大鹏新区葵涌街道