gpt4 book ai didi

javascript - 将 element.id 设置为副作用是不好的做法吗?

转载 作者:数据小太阳 更新时间:2023-10-29 05:56:05 26 4
gpt4 key购买 nike

我正在插件/库中编写一个小的缓存函数。它接受一个 HTMLElement 并返回一个 Decorator。

return function _cache(elem) {
if (elem.id === "") {
elem.id = PLUGIN_NAME + "_" + uid++;
}
if (cache[elem.id] === void 0) {
cache[elem.id] = _factory(elem);
}
return cache[elem.id];
}

在这里,我通过 HTMLElementid 将一些昂贵的操作存储在缓存中。这是一个 O(1) 查找,但它使用了设置 elem.id 并产生副作用的“不良做法”。

另一种方法是在缓存中查找O(N)

return function _cache(elem) {
for (var i = 0, ii = cache.length; i++) {
var o = cache[i];
if (o.elem == elem) return o.data;
}
var ret = _factory(elem);
cache.push({ elem: elem, data: ret });
return ret;
}

但这意味着我缓存的昂贵方法对 HTMLElement 没有任何副作用。

问题:

这种“副作用”是无辜的吗?值得对我的装饰器进行优化吗?

真实代码:

Gist of plugin template where I use this snippet

编辑:

我显然太累了,忘记了 data-foo 的存在。下面是它应该如何实现

var attr = "data-" + PLUGIN_NAME + "-cache";

return function _cache(elem) {
var val = elem.getAttribute(attr);
if (val === null || val === "") {
val = PLUGIN_NAME + "_" + uid++;
elem.setAttribute(attr, val);
}
if (cache[val] === undefined) {
cache[val] = _factory(elem);
}
return cache[val];
}

最佳答案

不使用 id,而是使用 data-x - 这就是它的创建目的。

id 有一个特定的含义,看到它自动生成会让人感到困惑(即使有适当的记录,这几乎永远不会。)你也有轻微的覆盖机会。

关于javascript - 将 element.id 设置为副作用是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6272128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com