Alex: ты бы хоть посмотрел, что такое pug, прежде чем что-то утверждать. Там шаблон компилируется в функцию, потом в эту функцию передаётся объект переменных, и возвращается html.
msimrial: для работы с разными бинарными данными, и изображения в том числе, или был вроде скрипт декодирования h264 видео. Можно сделать свой протокол передачи данных, передаваемый объем будет заметно меньше, чем текстом.
На сервере Node.js Buffer поверх ArrayBuffer сделана, там сфера применения пошире.
RomanSS: то есть при наличии в адресной строке браузера '/news/1' в одном случае должно отображаться App -> News -> Modal(1), а в другом App -> About -> Modal(1)? Как-то это... не консистентно.
Никита Гущин: что ужасного в хранении данных в элементе? Как минимум по использованию памяти это эффективнее, чем создание по функции на каждую кнопку, да и затраты времени на обращение к свойству объекта исчезающе малы.
Пересоздание обработчиков тоже не так страшно, компилятор скорее всего эти вызовы оптимизирует. В некоторых случаях это может оказаться даже производительнее, чем выполнение shallowCompare в PureComponent.
gmiroslav: наоборот, всегда вторым. Выполняется колбек из очереди фазы timers, добавляются колбеки в очередь фазы timers как минимум следующего тика цикла обработки событий и в очередь фазы check текущего.
gmiroslav: Очень не хочется пересказывать своими словами статью.
process.nextTick здесь только мешает, так как выполняется после текущей фазы цикла обработки событий.
setTimeout и setImmediate добавляют колбеки в очереди разных фазы.
Порядок обработки очередей timers -> I/O -> immediates.
Если к моменту проверки таймера подошло время его выполнения, то сначала выполняется он, если нет, то setImmediate. По документации минимальная задержка 1мс, - в коде
setImmediate(() => console.log('immediate'));
setTimeout(() => console.log('timeout 0'));
const t = Date.now();
while (Date.now() - t <= 1);
первым всегда будет выполняться колбек setTimeout.