Только учусь. Когда пойму что можно отсеять, размер уменьшится
У монги есть прикольное преимущество перед РСУБД - не нужно заранее определять схему данных.
{ ... }
и сложнее ли оно, чем внутренности bind, с которым вообще не просто это посчитать, так как в последних версиях v8 все встроенные функции переписаны с js на torque (свой яп v8, помесь js и плюсов и компилируемый в плюсы).const f = (e, a, b) => { ... };
// loop
.addEventListener('click', e => f(e, 1, 2));
Так наплодим функций из единственного call expression, а все остальное вынесем в единственную f.К примеру, так:
arr = [1,2,3]
arr.forEach((val, index, scope) => {
scope[index] = val * 2;
})
console.log(arr);
// 2,4,6
const arr = [1,2,3]
arr.map((val, index, scope) => {
scope[index] = val * 2;
});
console.log(arr); // 2,4,6
разве движок это не оптимизирует?
Set<EventListener>
под капотом, поэтомуfor(let i = 0; i < 10; i++) {
node.addEventListener('event', () => {});
}
сожрет в 10 раз больше памяти, чемconst f = () => {};
for(let i = 0; i < 10; i++) {
node.addEventListener('event', f);
}
Не говоря уж о том, что каждая из этих функций компилируется и оптимизируется по отдельности.1. Короче (имеется ввиду map короче, чем forEach).а заодно выполняет гораздо больше действий под капотом, среди которых создание нового массива исходного размера, а значит дополнительные аллокации/резервирования памяти и приближение такта сборки мусора.
2. Замыкания и безопасность исходного массива (чтобы внутри цикла не изменить случайно элементы массива, если это массив не просто скаляров, а объектов).Вообще бред. forEach не мутирует исходный массив и замыкание точно такое же делает. В чем безопасность то выше у map?
put<O extends ObserveWrappers = 'body', R extends ResponseTypes = 'json'>(params: Params<O, R>): Result<O, R> {
const {url, body, options} = params;
return this.http.request<any>('PUT', url, {...options, body});
}
filterBox.forEach(elem => {
elem.classList[filterData === 'all' || elem.dataset.filter === check
? 'remove'
: 'add'
]('hide');
});
<p>Hello world!</p>