воскресенье, 19 марта 2017 г.

graphql

GraphQL vs REST: Overviewhttps://phil.tech/2017/graphql-vs-rest-overview/

But from my experience: Multiple requests on a RESTful-API for just one thing often indicates a lack in the API design, namely the needed resource was not available and therefore stuff needs to be gathered from different resources to compensate for this.
A REST-API that could be easily replaced by GraphQL indicates, that the API was in fact a CRUD-HTTP-API, what is considered an Anti-Pattern among REST-Evangelists.
Also worth noting is, that GraphQL puts responsibilty on the client, because the backing API is reduced to be a datastore that just needs to be queried. REST on the other hand enforces the behaviour of the client and therefore reduces responsibility on him. The client gets reduced to be something similar to a browser.



GraphQL как универсальный RPC
https://habr.com/en/post/320658/


REST 2.0 уже здесь и его название GraphQL
https://www.sitepoint.com/rest-2-0-graphql/
о GraphQL,
https://graphql.org/
 вас он интересует, но вы ещё не работали с этой технологией
https://www.freecodecamp.org/news/so-whats-this-graphql-thing-i-keep-hearing-about-baf4d36c20cf/


GraphQL — это язык запросов и среда выполнения для API, которые предлагают синтаксис работы с источниками данных, отличающийся описательностью и простотой использования. Вместо создания конечных точек REST, используя GraphQL можно применять синтаксис типизированных запросов, который позволяет JavaScript-клиентам получать именно те данные, которые им нужны. Возможно, это — самая важная инновация в разработке API за последние несколько лет.


В настоящее время существует множество клиентских и серверных реализаций GraphQL. 
Например, 
Apollo
https://www.apollographql.com/
 — популярная библиотека, подходящая и для клиенткой, и для серверной разработки, в которой реализовано продуманное управление кэшем и имеется интеграция со многими популярными библиотеками для разработки интерфейсов вроде React и Vue. 

Популярный фреймворк 
MEAN
https://github.com/linnovate/mean
, охватывающий полный цикл разработки веб-приложений, использует GraphQL в слое API.

За последний год значительно выросло и сообщество GraphQL. Коллективные усилия этого сообщества привели к созданию серверных реализаций GraphQL на более чем 20-ти языках и к выпуску тысяч учебных руководств и прочего подобного. Вот список популярных материалов по GraphQL.

Нужно отметить, что react-starter-kit — самый популярный шаблонный проект на React, так же использует GraphQL.

 



https://risingstars.js.org/2019/en/
Gatsby

Gatsby

Build blazing fast, modern apps and websites with React
+11.5k☆
2
Hasura GraphQL Engine

Hasura GraphQL Engine

Blazing fast, instant realtime GraphQL APIs on Postgres with fine grained access control, also trigger webhooks on database events.
+8.1k☆
3
Prisma

Prisma

Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL & MongoDB)
+4.5k☆
4
Gridsome

Gridsome

️Build modern JAMstack websites with Vue.js
+3.8k☆
5
Apollo client

Apollo client

A fully-featured, production ready caching GraphQL client for every UI framework and GraphQL server
+3.4k☆
6
Apollo Server

Apollo Server

GraphQL server for Express, Connect, Hapi, Koa and more
+2.8k☆
7
GraphiQL

GraphiQL

GraphiQL & the GraphQL LSP Reference Ecosystem for building browser & IDE tools.
+2.4k☆
8
URQL

URQL

A highly customizable and versatile GraphQL client for React
+2.2k☆
9
Relay

Relay

Relay is a JavaScript framework for building data-driven React applications.
+2.1k☆

10
GraphQL Playground

GraphQL Playground

GraphQL IDE for better development workflows (GraphQL Subscriptions, interactive docs & collaboration)
+2.0k☆

четверг, 23 февраля 2017 г.

Микросервисы



Хранилище данных медленное и не справится с большим потоком запросов. В таких случаях можно использовать https://www.elastic.co/elasticsearch/ — он отлично справляется с большими нагрузками и умеет шардироваться и реплицироваться из коробки. Положим в него данные отдельным скриптом для последующего поиска по ним.

Архитектура

https://habrahabr.ru/company/mailru/blog/342526/ - Сервис-ориентированная архитектура (SOA)
https://habrahabr.ru/company/mailru/blog/320962/ - Архитектура микросервисов
https://habrahabr.ru/company/flant/blog/347518/ - Смерть микросервисного безумия в 2018 году

Документация

Мониторинг в микросервисной архитектуре

https://www.youtube.com/watch?v=5rdIbu4hNfQ&index=37&list=PLH-XmS0lSi_ypiqUoKq1eTsh4JvMV_URG

Микросервисы: опыт использования в нагруженном пр

https://www.youtube.com/watch?v=MBZtcNgDXzU&feature=youtu.be

Доставка


Про сборку буду рассказывать в терминах Bamboo (так как мы его у себя используем).
https://www.atlassian.com/software/bamboo

Архитектура микросервисов перевод

https://habr.com/en/company/mailru/blog/320962/

http://basho.com/posts/technical/microservices-please-dont/

http://devopsru.com/news/2016-05-10-microservice-trade-offs.html

Статья на хабре

Статья с описанием плюсов и минусов микросервисной архитектуры

https://habrahabr.ru/post/311208

Разработка web API 

RESTful API: мы всё делаем неправильно
https://habr.com/en/post/331064/

Разные команды

Над микросервисами (в Экосистеме) совместно работают несколько команд (Рублевка/Выписка, АБМ, Клик). Мы понимаем, что это разные команды с различными целями и приоритетами.

Общие сервисы

Каждая команда разрабатывает сервисы под свои собственные проекты.
Однако, мы выделяем некий "корневой" набор сервисов, оперирующий базовыми доменами предметной области. Критериями таких сервисов является:
  • использование более, чем в одном проекте;
  • ориентация на работу с базовыми доменами предметной области;
  • отсутствие функциональности, специфично для какого-либо конкретного проекта;
  • покрытие тестами не менее, чем на 146%;
Примером такого сервиса может служить сервис работы со счетами или организациями.

Pull-request'ы

Разработка "корневых" сервисов ведется по принципам open-source сообщества. Другими словами, за сервисы не отвечает некая выделенная команда. Вместо этого из каждой команды выделяется набор специально обученных людей (maintainer'ов). Когда одной из команд требуется внести изменения в сервис, она создает pull-request и лоббирует его рассмотрение группой maintainer'ов. Такой подход позволяет:
  • каждой их команд принимать участие в разработке;
  • вносить изменения так быстро, как это нужно команде (при определенном навыки мотивации review'еров); 
Кроме того, совместное ревью кода должно более-менее выровнять стиль и техники разработки между командами. С другой стороны, подход потребует некой культуры общения и воли reporter'а для того, что бы его pull-request не "завис".

Репозиторий

Stash является единственным и основным интерфейсом к системе контроля версий (Git). Использование альтернатив (GitLab) увеличивает внутреннюю энтропию Организации и не является целесообразным.

Структура и Naming

Каждый проект (Рублевка, Выписка, АБМ) имеет свой отдельный namespace ("Project")  в системе контроля версий (Stash). Проекты группируются по принадлежности к тому или иному бизнесу / направлению: розница, корпораты, мобильные приложения. Каждая группа имеет свой собственный префикс для имени/ключа проекта в Stash (для удобства группировки и выделении в общей массе других проектов). Например:
  • Corporate RublePayments / CORP-RPAY
  • Retail Transactions / RTL-TRANS
Внутри себя проект содержит все, что необходимо для его функционирования:
  • мидл-слой: corp-rpay-xxx-api
  • front-слой: corp-rpay-xxx-ui (если фронт на проекте один, можно использовать шаблон corp-rpay-ui)
  • скрипты развертки: corp-rpay-scripts
Для сервисов, используемых более, чем в одном проекте создается отдельный репозитарий: CORP-CORE, RTL-CORE. Формат наименования в данном случае изменяется на corp-core-xxx-api.

Индивидуальные инстансы

Каждый проект разворачивает свой собственный инстанс "корневого" сервиса (если таковой требуется). При этом имя экземпляра сервиса становиться отличным: core заменяется на код проекта (e.g., rpay).
Так же при развертке каждого сервиса "тагируется" (с помощью api Consul'а) кодом проекта, в котором он используется (так, что бы проект мог различать "свои" сервисы не только по имен, но и по тагу).
Как только "индивидуальный" сервис начинает использоваться более, чем в одном проекте, и разработчик/архитектор видят потенциал его использования в других проектах, он должен быть перенесён в "корневые". При этом из его имени убирается суффикс проекта, а сам он переезжает в репозитарий "корневых" сервисов.  

RESTful API для сервера – делаем правильно (Часть 1) перевод

RESTFul Api контроллеры в .NET MVC 4 tutorial

Create a REST API with Attribute Routing in ASP.NET Web API 2

Микросервисы: Azure Functions — скажи серверу нет

воскресенье, 9 октября 2016 г.

функциональное программирование


Вы знаете, что такое трансдьюсерыhttps://habr.com/en/post/325388/
https://tproger.ru/translations/functional-js-2/

Алгебраические типы данных http://habrahabr.ru/post/274103/


The State of Reactive in JS: практический обзор FRP библиотек
https://habr.com/en/post/325660/

Функциональное мышление
https://habr.com/company/microsoft/blog/420039/

пятница, 19 августа 2016 г.

SQL Server и Tarantool



  • Пример реализации общего индикатора производительности MS SQL Server
  • https://habrahabr.ru/post/342794/ 

Статья Sharding — patterns and antipatterns.
http://highload.guide/blog/sharding-patterns-and-antipatterns.html 

Блог Анатомия веб-сервиса и не только. 

Блог Разработка надёжных высоконагруженных систем.



пятница, 12 августа 2016 г.

Безопасность web-приложений


Безопасность веб-приложений — доклад Олега Мохова
https://www.youtube.com/watch?v=HqUgIV2FMD8

Как предотвратить ваш сайт от атак повторного воспроизведения (How to Prevent Replay Attacks on Your Website)
https://www.sitepoint.com/how-to-prevent-replay-attacks-on-your-website/

X-XSS-Protectionhttps://www.keycdn.com/blog/x-xss-protection
– предотвращаем атаки межсайтового скриптинга (Preventing Cross-Site Scripting Attacks)

Запущен проект Observatory от Mozilla — он помогает разработчикам, администраторам и специалистам в области безопасности анализировать уровень защищённости сайтов и повышать его
https://www.pcworld.com/article/3112335/mozilla-launches-free-website-security-scanning-service.html
https://observatory.mozilla.org/

Security

Security and its twin sister Privacy have made quite a few headlines in the last few years: Heartbleed, Shellshock, DNCLeaks, and a rash of security breaches for many major online retailers. The consequence? Our personal information leaking out like sewage into the Dark Web.
Those of us building websites probably all need a better working knowledge of common attack vectors: XSS, CSRF, click-jacking, Social Engineering, etc. And how to defend against those dark arts: 
SSL
enable CORS
 on both the client and server, strict 
Content Security Policies
, encrypting all sensitive data, and anonymizing any personally identifiable information (PII). We need to 2-factor authenticate everything. Our sites, its systems, its data, its settings need to be secure by default. Similar to how cars have seatbelts.
Designers may be quick to wring their hands of such a complex and technical responsibility as a problem for neckbeards to solve. However, Security and Privacy start with design. In a talk titled “How Designers Destroyed the World”, Mike Monteiro retells the story of a woman who’s sexual orientation was unintentionally revealed to her conservative father due to a flaw in Facebook’s privacy settings. Monteiro makes a convincing argument that situations like this are not a technical problem, they are a design problem.

So Security and Privacy are actually all of our problems. Personally, I expect this space to heat up now that high profile political and corporate hacks are happening on the regular.

.NET Security — это просто

Как защитить веб-приложение: основные советы, инструменты, полезные ссылки
                         

Уязвимости вашего приложения
https://habr.com/en/company/jugru/blog/349630/


Проверяем сайт на «вшивость»
https://vc.ru/flood/42317-proveryaem-sayt-na-vshivost


Быстрое введение в веб-безопасность
https://www.freecodecamp.org/news/a-quick-introduction-to-web-security-f90beaf4dd41/


Нас атакуют! 23+ лучших практик по безопасности Node.js

nodejs: SSO-авторизация через Kerberos

https://www.pvsm.ru/node-js/243762?fbclid=IwAR2wXhJGgtXiJleG4Bfjm-WkC11FEggpVX00BzFjaML9bWJeIqoGr1ito20


Credentials Processes in Windows Authentication

https://docs.microsoft.com/en-us/windows-server/security/windows-authentication/credentials-processes-in-windows-authentication?fbclid=IwAR0PNIZNGGtUFxXtCaj_0DAOnQ4B3Ruwz_THALy-5tdKLfMrQtT9zk2D9h0


Single sign-on for HTTP requests using SPNEGO web authentication

https://www.ibm.com/docs/en/was-liberty/base?topic=authentication-single-sign-http-requests-using-spnego-web

четверг, 11 августа 2016 г.

HTML5 и веб-компоненты

HTML5 Differences from HTML4
http://www.w3.org/TR/html5-diff/

Парсинг HTML
http://habrahabr.ru/post/273807/

Что такое HTML импорт и как это работает? переводhttps://habrahabr.ru/post/230751/

https://develoger.com/what-is-obsolete-in-html5-ccc6773474c5#.amvsuo6mk

https://www.sitepoint.com/defining-sample-sites-page-structure/

Распространенные ошибки начинающего HTML-верстальщикаhttps://habrahabr.ru/post/307210/


    Релиз html5-boilerplate версии 6.0.0
  • https://github.com/h5bp/html5-boilerplate/releases/tag/6.0.0


  • https://habr.com/en/company/ifree/blog/216045/ - HTML по стандартам


    Что вы знаете о высоте вьюпорта в 2017?
  • https://uxplanet.org/what-do-you-know-about-viewport-height-in-2017-4f25be5b05f

HTML Template — provides HTML markup for the component
Custom Element — provides a mechanism to create a custom HTML element
Shadow DOM — isolates the internals of the component from the context that rendered it
HTML Import — makes it possible to load the Web Component into a page



Разбираемся с Веб Компонентами (Understanding Web Components)
https://medium.com/@luisvieira_gmr/understanding-web-components-d051baa66019

Как можно использовать адаптивные веб-компоненты уже сегодня (How You Can Use Responsive Web Components Today)  
http://www.sitepoint.com/responsive-web-components/

    Данные на фронтенде: шаг к приложениям будущего
      https://habrahabr.ru/company/jugru/blog/283518/
  • Подробный обзор стандартов и возможностей видео в вебе (HTML5 Media Source Extensions: Bringing Production Video To The Web)
  • https://www.smashingmagazine.com/2016/04/html5-media-source-extensions-bringing-production-video-web/

  • Быстрый совет: как правильно использовать элементы Figure и Figcaption (Quick Tip: The Right Way to Use Figure & Figcaption Elements)
  • http://www.sitepoint.com/quick-tip-the-right-way-to-use-figure-and-figcaption-elements/

  • Эффективные HTML-формы. Часть 1
  • http://e-planet.ru/company/blog/effektivnye-html-formy-chast-1.html
  • UX валидация форм с помощью HTML и CSS (Form Validation UX in HTML and CSS)
  • https://css-tricks.com/form-validation-ux-html-css/

  • https://medium.com/@ABatickaya/%D0%B2%D0%B0%D0%BB%D0%B8%D0%B4%D0%B0%D1%86%D0%B8%D1%8F-%D1%84%D0%BE%D1%80%D0%BC-%D0%BD%D0%B0-html-%D0%B8-css-c34c982d42a0
  • Перевод статьи https://css-tricks.com/form-validation-ux-html-css/ Криса Койера.

  • Создание интерактивного видео на HTML5
  • http://frontender.info/building-interactive-html5-videos/



  • Список всего, что может быть в <head>
  • https://eager.io/blog/everything-I-know-about-the-script-tag/


  • Выходит HTML 5.1, готовится HTML 5.2
  • https://habrahabr.ru/post/310706/


  • Welcome to HTML 5.2!
  • http://developer.telerik.com/featured/welcome-to-html-5-2/


  • HTML 5.1 это золотой стандарт (HTML 5.1 is the gold standard)
  • https://www.w3.org/blog/2016/11/html-5-1-is-the-gold-standard/


  • Что нового в HTML 5.1
  • https://www.sitepoint.com/whats-new-in-html-5-1/

  • Использование элемента address в HTML 5.2
  • http://thenewcode.com/1164/Signed-Sealed-Delivered-Using-the-address-Element-in-HTML-52

  • https://diffofhtmls.herokuapp.com/— неофициальный сайт с подробным сравнением стандартов WHATWG HTML и W3C HTML

  • Основные принципы разметки в HTML 5.1 (Document Outlines in HTML 5.1)
  • https://bitsofco.de/document-outlines-in-html-5-1/


  • Разделы документа в HTML 5.1
  • http://frontender.info/document-outlines-in-html-5-1/

  • DIV официально разрешён внутри DL
  • Встречайте HTML5.1: крупное обновление стандарта, которое никто не заметил


  • Кроссбраузерная валидация форм на HTML5 наконец работает! Что теперь?
  • http://developer.telerik.com/topics/web-development/cross-browser-html5-form-validation-finally-now/


  • Создание собственного HTML5 Video проигрывателя и Shadow DOM
  • https://blog.hellojs.org/creating-a-custom-html5-video-player-and-the-shadow-dom-a98f29261be4


  • Семантика HTML5: контентные типы и новые элементы
  • https://www.sitepoint.com/html5s-changed-perspective-on-content-types/

  • Правила использования ARIA в HTML
  • https://bitsofco.de/rules-for-using-aria-in-html/

  • Текущее состояние элементов ввода в HTML5 (The State of HTML5 Input Elements)
  • https://www.sitepoint.com/the-state-of-html5-input-elements/


  • https://www.filamentgroup.com/lab/type-number.html. Зак Лезерман о нюансах полей для чисел и их параметрах в контексте цифровых клавиатур (I Wanted to Type a Number)


  • en Подробная статья о пользовательских элементах, свойствах и вариантах их использования: Part 1Part 2 (The Case for Custom Elements)
  • https://medium.com/@robdodson/the-case-for-custom-elements-part-1-65d807b4b439
  • https://medium.com/dev-channel/the-case-for-custom-elements-part-2-2efe42ce9133#.vy25vs8o2

W3C Wiki и W3C specifications теперь используют протокол «путешествия во времени» (Memento at the W3C)
https://www.w3.org/blog/2016/08/memento-at-the-w3c/


Автозаполнение: что веб-разработчики должны знать, но не знают (Autofill: What web devs should know, but don’t)
http://blog.cloudfour.com/autofill-what-web-devs-should-know-but-dont/
https://habrahabr.ru/company/mailru/blog/301840/



Как мы должны загружать веб-компоненты?https://paul.kinlan.me/loading-web-components/



Разработчики Chromium https://github.com/WICG/async-append/blob/master/EXPLAINER.md описание нового API, цель которого — сделать DOM-операции асинхронными. Для этого представлены функции asyncAppend, finish, cancel.



shadow dom

http://habrahabr.ru/company/plarium/blog/262017/

www.html5rocks.com/en/tutorials/webcomponents/shadowdom/

WEB ANIMATIONS API
http://css-live.ru/articles/rukovodstvo-po-web-animations-api-chast-3-mnozhestvennye-animacii.html
http://css-live.ru/articles/rukovodstvo-po-web-animations-api-chast-4-gruppovye-i-posledovatelnye-effekty.html
http://css-live.ru/articles/web-animations-api-poleznye-ssylki.html


https://developer.mozilla.org/en-US/docs/Web/JavaScript


Техники с DOM
http://prgssr.ru/development/tehniki-raboty-s-dom-roditelskie-dochernie-i-sosednie-elementy.html


  • Использование Paint Timing API
  • https://css-tricks.com/paint-timing-api/

Синхронизация между табами с помощью Web Locks API
https://www.sitepen.com/blog/2018/08/14/cross-tab-synchronization-with-the-web-locks-api/

Как создать простой компонент для работы с камерой
https://frontendnews.io/editions/2018-08-15-simple-camera-component

• Web Payments, Payment Request API и Google Pay
https://medium.com/dev-channel/web-payments-payment-request-api-and-google-pay-a1073e405235
https://www.smashingmagazine.com/2018/01/online-purchase-payment-request-api/


• Использование интерфейса синтеза речи из Web Speech API
https://manu.ninja/using-the-speech-synthesis-interface-of-the-web-speech-api/


• Использование Web Audio API, подробная обновленная информация на MDN
https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Using_Web_Audio_API


• Продвинутые техники использования Web Audio API: создание звука, последовательность, синхронизация, планирование
https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Advanced_techniques


• Вышел новый стандарт аутентификации WebAuthn: биометрические данные вместо паролей
https://tproger.ru/news/web-standard-finger-scan/


• Веб-компоненты в 2018
https://www.sitepen.com/blog/2018/07/06/web-components-in-2018/


• Святой грааль переиспользуемых компонентов: Custom Elements, Shadow DOM и NPM
https://www.smashingmagazine.com/2018/07/reusable-components-custom-elements-shadow-dom-npm/

• 15 методов HTML элементов о которых вы, возможно, никогда не слышали
http://codenative.ru/article/15_metodov_html_elementov_o_kotoryh_vy_vozmozhno_nikogda_ne_slyshali

• О глобальном атрибуте `hidden` в HTML5
https://www.impressivewebs.com/html5-global-hidden-attribute/


• API датчиков для веб
https://mobiforge.com/design-development/the-generic-sensor-api

• Мега-шпаргалка по HTML5
https://medium.com/level-up-web/the-mega-html5-cheatsheet-e8c479b1c521


• Консорциум W3С утвердил средства DRM для Web в качестве стандарта
http://www.opennet.ru/opennews/art.shtml?num=47226


• Консорциум World Wide Web представил вторую редакцию HTML 5.1 
https://tproger.ru/news/w3c-html-5-1-2nd-edition/

• Все, что вы когда-либо хотели знать о защите HTML-форм • 
https://twilioinc.wpengine.com/2017/09/everything-you-ever-wanted-to-know-about-secure-html-forms.html


  • Безболезненное введение в API: использование, интеграция и преимущества
https://snipcart.com/blog/apis-integration-usage-benefits



https://habrahabr.ru/company/htmlacademy/blog/339854/ - Есть две спецификации HTML: W3C и WHATWG, какой из них верить?

   Веб-компоненты: долгая игра
http://css-live.ru/articles/veb-komponenty-dolgaya-igra.html

• Полное руководство по элементам, которые могут быть в секции <head>
http://gethead.info/

https://www.w3.org/2017/11/w3c-highlights/: Web Assembly, WebRTC, Web Payments, WebVR и многое другое           

• Противостояние W3C и WHATWG: Apple, Google, Microsoft, Mozilla возражают против DOM 4.1
https://habrahabr.ru/post/353514/



 Frontend News #2: ускоренный курс по clipboard api
https://frontendnews.io/editions/2018-08-01-copy-and-paste-clipboard-api

Введение в веб-компоненты. Часть 1
https://habr.com/post/152001/

Коротко об HTML 5.2
https://habr.com/post/345388/

A list of everything that *could* go in the head of your document
https://github.com/joshbuchea/HEAD

понедельник, 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...