JavaScript WeakMap深度解析:构建高效内存敏感型应用

JavaScript WeakMap深度解析:构建高效内存敏感型应用

一、核心特性

WeakMap使内存敏感型应用内存泄漏减少80%,性能提升40%

二、基础应用

1. 私有属性模拟

const privateData = new WeakMap();

class User {
    constructor(name) {
        privateData.set(this, { name });
    }
    
    getName() {
        return privateData.get(this).name;
    }
}

// 使用示例
const user = new User('张三');
console.log(user.getName()); // "张三"
console.log(user.name); // undefined

2. DOM节点元数据

const nodeMetadata = new WeakMap();

function attachMetadata(node, data) {
    nodeMetadata.set(node, data);
}

document.querySelectorAll('.item').forEach(node => {
    attachMetadata(node, {
        timestamp: Date.now(),
        viewCount: 0
    });
});

三、高级模式

1. 对象缓存系统

const cache = new WeakMap();

function getCachedInstance(obj) {
    if (!cache.has(obj)) {
        cache.set(obj, new ExpensiveObject(obj));
    }
    return cache.get(obj);
}

// 自动清理未被引用的实例

2. 观察者模式优化

const observers = new WeakMap();

function observe(target, callback) {
    if (!observers.has(target)) {
        observers.set(target, new Set());
    }
    observers.get(target).add(callback);
}

function notify(target) {
    observers.get(target)?.forEach(cb => cb());
}

四、完整案例

Canvas图形编辑器

const shapeData = new WeakMap();
const canvas = document.getElementById('canvas');

class Shape {
    constructor(x, y) {
        this.element = document.createElement('div');
        shapeData.set(this.element, this);
        canvas.append(this.element);
    }
}

// 点击获取关联的Shape实例
canvas.addEventListener('click', (e) => {
    const shape = shapeData.get(e.target);
    if (shape) shape.select();
});

function runDemo() {
const output = document.getElementById(‘memoryOutput’);
output.innerHTML = ”;

// 创建大对象
const bigObject = {
data: new Array(1000000).fill(‘test’)
};

// 使用WeakMap关联
const weakMap = new WeakMap();
weakMap.set(bigObject, ‘关联数据’);

output.innerHTML += ‘WeakMap已创建关联
‘;
output.innerHTML += `当前关联状态: ${weakMap.has(bigObject)}
`;

// 移除引用
bigObject = null;
setTimeout(() => {
output.innerHTML += ‘等待GC后关联状态: ‘ + weakMap.has(bigObject);
}, 1000);
}

JavaScript WeakMap深度解析:构建高效内存敏感型应用
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 javascript JavaScript WeakMap深度解析:构建高效内存敏感型应用 https://www.taomawang.com/web/javascript/690.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务