У меня есть приложение Electron
, использующее d3
, и оно использует множество маленьких (50 x 50 px) значков SVG - их может быть 100 или более, со множеством дубликатов.
Значки считываются с диска с помощью fs
и возвращаются в мою процедуру создания d3
. Пользователь может переключать значки, когда они редактируют свой проект. Они могли использовать одну или две иконки снова и снова или использовать любую из 50 иконок, доступных для их выбора.
Я думал, что я умен, и написал «менеджер иконок», который кэширует данные SVG. в массиве после того, как он прочитан fs
, так что, если значок используется несколько раз, версия «в памяти» может быть возвращена вместо повторного чтения с диска.
Я написал код поверх год go и сегодня ему пришлось go решить проблему. Глядя на это сейчас, мне интересно, что все это просто глупо: то, что 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;
}
};