【发布时间】:2020-07-26 16:41:14
【问题描述】:
我有一个使用d3 的Electron 应用程序,它使用了许多小的(50 x 50 像素)SVG 图标——可能有 100 个或更多,并且有很多重复。
使用fs 从磁盘读取图标并返回到我的d3 创建例程。用户可以在编辑项目时切换图标。他们可以反复使用一个或两个图标,或者使用可供他们选择的 50 个图标中的任何一个。
我以为我很聪明,写了一个“图标管理器”,它将被fs读取后的SVG数据缓存在一个数组中,这样如果图标被多次使用,“内存中”版本可以被返回,而不是再次从磁盘读取。
我一年多前编写了代码,今天不得不去解决一个问题。现在看它,我想这一切都是愚蠢的:与遍历数组相比,fs 访问磁盘是一种毫无意义甚至可能是“负面”的优化——随着数组中项目数量的增加, “成本”越来越高。
我是不是无缘无故在这里工作太辛苦了?
const fs = require('fs');
const iconLib = [];
exports.getIcon = function (iconName, iconPath) {
for (let i = 0; i < iconLib.length; i++) {
if (iconLib[i].iconName == iconName) {
return iconLib[i].iconData;
}
}
if (fs.existsSync(iconPath)) {
let data = fs.readFileSync(iconPath, 'utf8');
iconLib.push({ iconName: iconName, iconData: data })
return data;
} else {
// TODO return something useful
return 0;
}
};
【问题讨论】:
-
我投票结束这个问题,因为这更适合Code Review。
标签: javascript node.js d3.js electron fs