IS
Все заметки
#performance#canvas#react

Canvas обходит DOM на тысячах ячеек

Отрисовка сетки Life Calendar как ~4680 <div> заставляла мобильный лейаут заикаться на целую секунду при каждом ресайзе. Переход на один <canvas> свёл всё к одному проходу отрисовки вообще без затрат на лейаут.

const ctx = canvas.getContext('2d')!;
for (let i = 0; i < weeks; i++) {
  const x = (i % perRow) * cell;
  const y = Math.floor(i / perRow) * cell;
  ctx.fillStyle = i < lived ? accent : line;
  ctx.fillRect(x, y, cell - gap, cell - gap);
}

Правило, которому я теперь доверяю: за пределами пары сотен простых неинтерактивных фигур перестань тянуться к DOM-узлам. Один canvas, один цикл — и оно масштабируется до десятков тысяч ячеек без напряга.