понедельник, 6 июня 2016 г.

JavaScript

https://risingstars.js.org/2019/en/
фреймворки

ECMAScript 6
https://habr.com/en/post/305900/
https://github.com/mbeaudru/modern-js-cheatsheet/blob/master/translations/ru-RU.md

https://fossbytes.com/wp-content/uploads/2015/09/infographic-the-entire-javascript-language-in-one-single-image-491250-2.jpg

Императивный Функциональный ООП
https://habr.com/en/post/274415/

https://habr.com/en/post/243403/ - конспект по JavaScript 

https://www.w3.org/TR/hr-time/ - high resolution time 

https://www.w3.org/TR/navigation-timing/ - navigation timing


INTERNALIZATION
JavaScript Internationalization API 

Как научить веб-приложение говорить на 100 языках: особенности локализации
https://habr.com/en/company/badoo/blog/317484/

Объемная шпаргалка по JavaScript (The Ultimate JavaScript Cheat Sheet) 
https://www.codementor.io/johnnyb/tutorials/javascript-cheatsheet-fb54lz08k 


Четыре типа утечек памяти в JS и как от них избавиться (4 Types of Memory Leaks in JavaScript and How to Get Rid Of 
 
Правильная обработка ошибок в JavaScript 
https://habr.com/en/company/mailru/blog/282149/

Руководство по качественной обработке ошибок в JavaScript (A Guide to Proper Error Handling in 

Список того, что появится в ECMAScript 2016 (ES7)

Книга заклинаний современного веб-разработчика: большая картинка, тезаурус и таксономия современного веб-разработки JavaScript 
 
ES8 вышел и вот его основные новые возможности

Что за черт, Javascript
https://habr.com/en/company/mailru/blog/335292/
 
Как работает JS: управление памятью, четыре вида утечек памяти и борьба с ними
https://habr.com/en/company/ruvds/blog/338150/

Многоликий this в JS

Что нового в ES2018 

Обзор новшеств ECMAScript 2016, 2017, и 2018 с примерами
https://habr.com/en/company/ruvds/blog/353174/

Полный современный справочник по JavaScript
https://www.freecodecamp.org/news/the-complete-javascript-handbook-f26b2c71719c/

http://stepansuvorov.com/blog/2013/04/все-для-обработки-javascript-error-в-проекте/

https://habr.com/en/company/oleg-bunin/blog/433318 - Garbage Collect

// Таски и микротаски
https://habr.com/en/company/oleg-bunin/blog/417461/
https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/#test-it
// Придержим ссылки на эти элементы var outer = document.querySelector('.outer'); var inner = document.querySelector('.inner'); // Послушаем изменения атрибутов внешнего // элемента с классом outer new MutationObserver(function() { console.log('mutate'); }).observe(outer, { attributes: true }); // А вот и колбек… function onClick() { console.log('click'); setTimeout(function() { console.log('timeout'); }, 0); Promise.resolve().then(function() { console.log('promise'); }); outer.setAttribute('data-random', Math.random()); } // …который мы повесим на оба элемента inner.addEventListener('click', onClick); outer.addEventListener('click', onClick);


ОТВЕТ (по нажатию на кнопку)
click js-стек завершен
promise - микрозадача mutate - микрозадача
click
js-стек завершен promise - микрозадача mutate - микрозадача timeout - задача timeout - задача

ОТВЕТ (программно inner.Click())
click
JS стек ещё не завершен, поэтому микрозадачи не запускаются click
js стек завершен promise - микрозадача mutate - микрозадача promise - задача
мутация второй раз не выполняется timeout - задача timeout

Задачи и микрозадачи исполняются по порядку
Браузер может рендерить в промежутках между задачами

Микрозадачи исполняются после каждого колбека, если только это не часть выполнения какого-то другого сценария (стек не пустой) и конце каждой задачи и после очистки стека.


Мы выполняем все микротаски, которые у нас есть в очереди до конца 
Еще можно порождать новые микротаски в процессе, и они будут выполнены в этом же microtask checkpoint.

requestAnimationFrame, и даже уже его используют. Он выполняется перед рендером. Его прелесть в том, что, во-первых, он старается выполняться каждые 60 fps (или 30 fps), вo-вторых, это все выполняется непосредственно перед созданием CSS Object Model
RequestIdleCallback работает таким образом, что если браузер понимает, что у него между фреймами (60 fps) есть время, чтобы выполнить что-то полезное, и при этом они уже все сделал — таску сделал, requestAnimationFrame сделал — вроде бы все классно, то он может выдать маленькие кванты, скажем, по 50 мс, чтобы вы что-то сделали (режим IDLE).


  • Если это изменение DOM, то используем requestAnimationFrame.
  • Если это неприоритетная, недолгая и не тяжелая задача, которая будет не слишком нагружать CPU, то requestIdleCallback.
  • Если у нас большая мощная задача, которую надо исполнять постоянно, тогда мы выходим за пределы Event Loop и используем WebWorkers.

Фазы Event Loop в Node.js:

  • timers;
  • pending callback;
  • idle, prepare; - ничего не можем сделать
  • poll; IO Здесь круто делать setImmediate
  • check; Здесь исполняется setImmediate Фаза прекрасна тем, что setImmediate, вызванный в poll-фазе, выполнится гарантированно раньше, чем таймер. Потому что таймер будет только на следующем тике в самом начале, а из poll-фазы раньше. 
  • close callbacks.

Алгоритм Event Loop
  • Берем свободную таску из нашей очереди,
  • Выполняем ее,
  • Выполняем microtask checkpoint  .
  • Обновляем рендеринг (если необходимо), и возвращаемся   

Комментариев нет:

Отправить комментарий

mlops

  . Почти вся информация по вопросу собрана в гитхабе  awesome-mlops , который курирует Лариса Висенгериева, главный эксперт сайта ml-ops.or...