Компиляторы — это не совсем Developer eXperience о котором мы говорили в прошлых выпусках. Но они напрямую влияют на DX и входят в набор инструментов, обязательных для современного фреймворка. Так что давайте сегодня обсудим зачем они нужны и что они делают:
Компиляторы компилируют (👨✈️). Фреймворк — это уже не просто JS файл с рантайм движком, это ещё и набор инструментов для разработки и сборки проекта. Всем фреймворкам с DSL темплейтами понадобится их в какой-то момент распарсить, а для некоторых компиляция — это вообще основной шаг создания рантайма.
Angular был одним из первых, получивших Ahead of Time компилятор (на практике "заблаговременно" значит что мы компилируем тогда, когда нужно: при сборке проекта). С Angular и начнём:
Angular при компиляции распарсит темплейт и создаст для него JS код, который отрендерит начальное состояние и будет следить за обновлениями. Помните мы говорили про Change detection и reactivity? Так вот AoT компилятор выделит для dirty checking'а только те свойства состояния, которые используются в темплейте и не будет тратить время на неиспользуемые свойства.
Angular Ivy (с примерами аутпута компиляции темплейта): https://blog.ninja-squad.com/2019/05/07/what-is-angular-ivy/
Vue соберёт свои .vue файлы и переведёт темплейты в vDOM. А ещё и оптимизирует обновление vDOM с помощью специальных инструкций, чтобы при изменении состояния сравнивать не весь vDOM, а только подветви дерева.
Vue template Repl: https://v3.vuejs.org/guide/render-function.html#template-compilation
Svelte вообще не сможет без компилятора: все
Svelte Repl: https://svelte.dev/repl/hello-world?version=3.42.1
SolidJS распарсит JSX и превратит его в инструкции, которые напрямую манипулируют DOM. Solid может напрямую привязывать состояние к DOM, т.к. использует reactive atoms и, как и Svelte, парсит и модифицирует наш JS код.
Solid Repl: https://playground.solidjs.com/
React стоит особняком: ему не нужен компилятор. JSX можно заменить на
.
Для создания приложений нам не обязательно разбираться в компиляторах, но это полезно для общего понимания работы фреймворка. Если разобраться в особенностях реактивности и темплейтов — будет проще понять как их использует компилятор и почему он генерирует такой рантайм. Я добавил ссылки на примеры output'а компиляции, очень советую поиграться.
Вот, это что касается обязательной части компиляторов. Для краткости я опустил сборку JS и CSS — там более-менее одинаковые подходы у всех фреймворков.
Похоже, за компиляторами ближайшее будущее, что думаете?
Оставляйте свои комментарии и подключайтесь к math.random коммьюнити — мы любим говорить о технологиях.
Завтра поговорим об SSG и SSR. До завтра!
#thematicweek #frameworksweek
Компиляторы компилируют (👨✈️). Фреймворк — это уже не просто JS файл с рантайм движком, это ещё и набор инструментов для разработки и сборки проекта. Всем фреймворкам с DSL темплейтами понадобится их в какой-то момент распарсить, а для некоторых компиляция — это вообще основной шаг создания рантайма.
Angular был одним из первых, получивших Ahead of Time компилятор (на практике "заблаговременно" значит что мы компилируем тогда, когда нужно: при сборке проекта). С Angular и начнём:
Angular при компиляции распарсит темплейт и создаст для него JS код, который отрендерит начальное состояние и будет следить за обновлениями. Помните мы говорили про Change detection и reactivity? Так вот AoT компилятор выделит для dirty checking'а только те свойства состояния, которые используются в темплейте и не будет тратить время на неиспользуемые свойства.
Angular Ivy (с примерами аутпута компиляции темплейта): https://blog.ninja-squad.com/2019/05/07/what-is-angular-ivy/
Vue соберёт свои .vue файлы и переведёт темплейты в vDOM. А ещё и оптимизирует обновление vDOM с помощью специальных инструкций, чтобы при изменении состояния сравнивать не весь vDOM, а только подветви дерева.
Vue template Repl: https://v3.vuejs.org/guide/render-function.html#template-compilation
Svelte вообще не сможет без компилятора: все
() => { a = b + c; }
при сборке превратятся во что-то вроде () => { invalidate('a', b + c) }
чтобы сигнализировать об изменении состояния. Svelte даже добавляет специальный синтаксис $: a = b + c;
для computed значений. Так что код, который Вы пишете, — это не тот код, который будет работать в браузере.Svelte Repl: https://svelte.dev/repl/hello-world?version=3.42.1
SolidJS распарсит JSX и превратит его в инструкции, которые напрямую манипулируют DOM. Solid может напрямую привязывать состояние к DOM, т.к. использует reactive atoms и, как и Svelte, парсит и модифицирует наш JS код.
Solid Repl: https://playground.solidjs.com/
React стоит особняком: ему не нужен компилятор. JSX можно заменить на
createElement
и писать на чистом JS, который никак не нужно модифицировать..
Для создания приложений нам не обязательно разбираться в компиляторах, но это полезно для общего понимания работы фреймворка. Если разобраться в особенностях реактивности и темплейтов — будет проще понять как их использует компилятор и почему он генерирует такой рантайм. Я добавил ссылки на примеры output'а компиляции, очень советую поиграться.
Вот, это что касается обязательной части компиляторов. Для краткости я опустил сборку JS и CSS — там более-менее одинаковые подходы у всех фреймворков.
Похоже, за компиляторами ближайшее будущее, что думаете?
Оставляйте свои комментарии и подключайтесь к math.random коммьюнити — мы любим говорить о технологиях.
Завтра поговорим об SSG и SSR. До завтра!
#thematicweek #frameworksweek
🇺🇦 Math.random(): javascript community pinned «Всем привет! Хочу пригласить вас на наш с Андреем Кучеренко math.random стрим! Поговорим о фреймворках, nocode и не только 🙂 Стрим будет уже завтра, в 18:00 по Киеву, приходите! Ссылка без регистрации и смс: https://www.youtube.com/watch?v=v7qVVtjzR1Y 🙌»
Итак, мы написали наше супер-пупер-приложение, скомпилировали и хотим показать миру. А как?
Классический Single Page App (SPA), который генерирует наш фреймворк, — это один
Т.е. когда пользователь откроет адрес
Как решить эти проблемы? Конечно сделать фреймворки фреймворков (ну, или "компиляторы компиляторов")!
В зависимости от типа приложения, есть два основных подхода: SSR и SSG. Рассмотрим их по отдельности:
SSR (server side rendering) — означает что в ответ на запрос определённой страницы, мы на сервере отрисуем и отдадим полностью готовый
SSG (server side generation) — похоже на SSR, только мы заранее генерируем
Такие фреймворки размывают границу между front-end и back-end, расширяют границы где наши приложения могут и должны запускаться.
В целом, SSR и SSG — это набор инструментов и API над нашими "клиентскими" JS фреймворками.
Оставляйте свои комментарии и подключайтесь к math.random коммьюнити — мы любим говорить о технологиях.
———
Для почитать: jamstack.org
Для поковыряться:
React: Next, Gatsby, Blitz, React Server Components
Vue: Nuxt, Gridsome
Svelte: SvelteKit
Angular: Scully
Ещё: Astro — он для всех.
#thematicweek #frameworksweek
Классический Single Page App (SPA), который генерирует наш фреймворк, — это один
index.html
с .css
и .js
.Т.е. когда пользователь откроет адрес
…/about-us
— мы ему отдадим наш index.html, который загрузит .js
, который уже отрендерит about-us
страничку. Ещё хуже обстоят дела когда нам нужно отрисовать, например, список постов, которые нужно взять на сервере: index.html
→ main.js
→ xhr:/api/posts
→ Render . Это особенно нехорошо, если нам нужно чтобы сайт попадал в google. А юзер, посмотря секунду на наш fancy loading indicator, может устать и уйти на другой сайт.Как решить эти проблемы? Конечно сделать фреймворки фреймворков (ну, или "компиляторы компиляторов")!
В зависимости от типа приложения, есть два основных подхода: SSR и SSG. Рассмотрим их по отдельности:
SSR (server side rendering) — означает что в ответ на запрос определённой страницы, мы на сервере отрисуем и отдадим полностью готовый
.html
, который браузер сразу же готов отрисовать. Обычно, после того как у клиента отрисовалась страница, мы подгружаем наше .js
, оживляем отрисованный html (hydration) и переводим сайт в режим CSR'а (client side rendering) — так для навигации по страницам сайта клиенту уже не нужно будет ждать ответ сервера. SSR предполагает наличие рантайм движка на сервере (вроде nodejs) и может генерировать страницы с контекстом пользователя (например, ваш wish list на e-commerce сайте). Некоторые фреймворки (по крайней мере, Next и Nuxt) разрешают написать функцию, которая получит данные для нашей компоненты, но будет выполнена только на сервере и вообще не будет загружаться на клиента. Например, получит список товаров из нашего внутреннего API — клиент эту функцию загружать не будет, а просто получит список товаров.SSG (server side generation) — похоже на SSR, только мы заранее генерируем
.html
файлы на сервере и просто отдаём их как статику. Для этого мы должны заранее знать какие страницы пользователь может запросить. Например, мы можем сгенерировать все страницы со статьями для нашего блога. SSG для работы должен знать список URL, которые ему нужно отрендерить. Некоторые фреймворки предоставляют краулер, который запустит наш сайт и сам соберёт все доступные URL, для которых нужно сгенерировать .html
. SSG хорошо работает с CDN, которые могут сильно сократить время начальной загрузки.Такие фреймворки размывают границу между front-end и back-end, расширяют границы где наши приложения могут и должны запускаться.
В целом, SSR и SSG — это набор инструментов и API над нашими "клиентскими" JS фреймворками.
Оставляйте свои комментарии и подключайтесь к math.random коммьюнити — мы любим говорить о технологиях.
———
Для почитать: jamstack.org
Для поковыряться:
React: Next, Gatsby, Blitz, React Server Components
Vue: Nuxt, Gridsome
Svelte: SvelteKit
Angular: Scully
Ещё: Astro — он для всех.
#thematicweek #frameworksweek
Здравствуйте, друзья! Через неделю состоится конференция OdessaJS!
Специально для наших подписчиков предоставляется возможность выиграть 50% скидки на входной билет, для этого нужно оставить комментарий под этим постом с названием доклада, который вы хотели-бы послушать. Список докладов на сайте - https://odessajs.org/
Победитель будет объявлен в понедельник!
#odessajs #conference #discount
Специально для наших подписчиков предоставляется возможность выиграть 50% скидки на входной билет, для этого нужно оставить комментарий под этим постом с названием доклада, который вы хотели-бы послушать. Список докладов на сайте - https://odessajs.org/
Победитель будет объявлен в понедельник!
#odessajs #conference #discount
🇺🇦 Math.random(): javascript community
Здравствуйте, друзья! Сегодня мы начинаем тематические недели на Math.random(). Хедлайнером и повелителем канала на этой неделе будет Костя Пальчик - замечательный разработчик с большим опытом, любитель реактивного программирования, адепт NoCode решений…
Привет, math.random!
Сегодня заканчивается #frameworksweek и я передаю управление обратно Андрею Кучеренко 🖐
Надеюсь было интересно! Пишите что вы думаете об этой неделе и о чём вы бы хотели узнать в других #thematicweek в комментариях!
Напоследок скажу: не переживайте что ещё не попробовали какой-то фреймворк, если у вас есть опыт с одним — вам будет легко разобраться в другом. А если у вас выпало пару минут свободного времени — для большинства фреймворков есть онлайн плейграунды (даже для SSR), с ними можно быстро ознакомиться.
Да и хорошо бы сначала разобраться в ньюансах фреймворка, который вам сейчас нужен для работы. Как говорят, лучше понять что делать с уткой под кроватью, чем разглядывать всех синиц в небе.
Всем хороших выходных!
🙌
Сегодня заканчивается #frameworksweek и я передаю управление обратно Андрею Кучеренко 🖐
Надеюсь было интересно! Пишите что вы думаете об этой неделе и о чём вы бы хотели узнать в других #thematicweek в комментариях!
Напоследок скажу: не переживайте что ещё не попробовали какой-то фреймворк, если у вас есть опыт с одним — вам будет легко разобраться в другом. А если у вас выпало пару минут свободного времени — для большинства фреймворков есть онлайн плейграунды (даже для SSR), с ними можно быстро ознакомиться.
Да и хорошо бы сначала разобраться в ньюансах фреймворка, который вам сейчас нужен для работы. Как говорят, лучше понять что делать с уткой под кроватью, чем разглядывать всех синиц в небе.
Всем хороших выходных!
🙌
В субботу на VinnytsiaJS поговорили про обрасти применения JavaScript.
Обратите внимание на закрепленный пост, есть шанс попасть на OdessaJS
Презентация по ссылке:
🔗 https://slides.com/andreykucherenko/deck-39f096
#slides #conference #vinnytsajs
Обратите внимание на закрепленный пост, есть шанс попасть на OdessaJS
Презентация по ссылке:
🔗 https://slides.com/andreykucherenko/deck-39f096
#slides #conference #vinnytsajs
Slides
JavaScript Everywhere!
A presentation created with Slides.
Forwarded from Node.js Recipes
30 seconds of code – сборник код-снипетов
#list #code_pattern
В начале лета я делился ссылкой на 1loc.dev. В комментариях была ссылка на аналогичный ресурс – 30 seconds of code. Примеры кода чуть длинней, но суть та же самая. Есть раздел отдельно по #nodejs сниппетам.
#list #code_pattern
В начале лета я делился ссылкой на 1loc.dev. В комментариях была ссылка на аналогичный ресурс – 30 seconds of code. Примеры кода чуть длинней, но суть та же самая. Есть раздел отдельно по #nodejs сниппетам.
www.30secondsofcode.org
30 seconds of code
Browse 664 coding articles to level up your coding skills on 30 seconds of code.
Статья с размышлениями на тему, что лучше использовать
TL;DR
В большинстве случаев разницы нет, но если вы хотите отлавливать rejected promise в
🔗 https://dmitripavlutin.com/return-await-promise-javascript/
#promise #article #javascript
return await promise
или return promise
.TL;DR
В большинстве случаев разницы нет, но если вы хотите отлавливать rejected promise в
try/catch
, тогда используйте return await promise
.🔗 https://dmitripavlutin.com/return-await-promise-javascript/
#promise #article #javascript
Здравствуйте, друзья!
Вот и заканчивается лето и мы начинаем новый сезон вебинаров на Math.random()!
А начнем мы с открытого собеседования на Node.js разработчика, которое состоится второго сентября в 18:00!
Подробности и регистрация по ссылке:
🔗 https://www.mathrandom.com/events/public-interview-for-nodejs-developer/
P.S. обратите внимание, у нас новый сайт и мы больше не просим заполнять большую форму, чтобы получить уведомление о вебинарие, достаточно одного e-mail и событие можно добавить в календарь!
#event #publicinterview #newseason #nodejs
Вот и заканчивается лето и мы начинаем новый сезон вебинаров на Math.random()!
А начнем мы с открытого собеседования на Node.js разработчика, которое состоится второго сентября в 18:00!
Подробности и регистрация по ссылке:
🔗 https://www.mathrandom.com/events/public-interview-for-nodejs-developer/
P.S. обратите внимание, у нас новый сайт и мы больше не просим заполнять большую форму, чтобы получить уведомление о вебинарие, достаточно одного e-mail и событие можно добавить в календарь!
#event #publicinterview #newseason #nodejs
medusa - молодой проект API-first/headless движек для интернет-магазинов. Проект написан на javascript, использует redis, postgres, sqlite. Рекомендуем обратить внимание на проект, если разработчики будут продолжать активную разработку, то проект может стать strapi для e-commerce проектов.
🔗 https://github.com/medusajs/medusa
🔗 https://www.medusa-commerce.com/
🔗 https://github.com/medusajs/nextjs-starter-medusa
🔗 https://github.com/medusajs/gatsby-starter-medusa
#ecommerce #github #repo #javascript #headless #opensource
🔗 https://github.com/medusajs/medusa
🔗 https://www.medusa-commerce.com/
🔗 https://github.com/medusajs/nextjs-starter-medusa
🔗 https://github.com/medusajs/gatsby-starter-medusa
#ecommerce #github #repo #javascript #headless #opensource
🔥 Вышла новая версия TypeScript 4.4!
Поробности релиза по ссылке:
🔗 https://devblogs.microsoft.com/typescript/announcing-typescript-4-4/
#release #typescipt #news
Поробности релиза по ссылке:
🔗 https://devblogs.microsoft.com/typescript/announcing-typescript-4-4/
#release #typescipt #news
This media is not supported in your browser
VIEW IN TELEGRAM
Мы уже писали о github.dev, в который можно попасть нажав "." находясь в любом репозитории на github.
Сегодня у нас статья, в которой описаны 10 прикольных штук, которые можно получить на github.dev. Да да, там могут быть и редакторы картинок и диаграмм, и песочницы кода, wiki и многое другое.
🔗 https://dev.to/lostintangent/10-awesome-things-you-can-do-with-github-dev-5fm7
#article #github #githubdev
Сегодня у нас статья, в которой описаны 10 прикольных штук, которые можно получить на github.dev. Да да, там могут быть и редакторы картинок и диаграмм, и песочницы кода, wiki и многое другое.
🔗 https://dev.to/lostintangent/10-awesome-things-you-can-do-with-github-dev-5fm7
#article #github #githubdev
Здравствуйте, друзья!
Хочу пригласить вас на нашу следующую встречу Math.random() сообщества, в этот раз к нам в гости придет Саша Питкевич, Blockchain Lead из EPAM Systems. Она расскажет какие популярные и полезные технологии есть в сфере Blockchain для JavaScript специалистов!
Регистрация по ссылке:
🔗 https://www.mathrandom.com/events/blockchain-trends-2021/
Обратите внимание, что стрим будет утром в 11:00.
#event #blockchain
Хочу пригласить вас на нашу следующую встречу Math.random() сообщества, в этот раз к нам в гости придет Саша Питкевич, Blockchain Lead из EPAM Systems. Она расскажет какие популярные и полезные технологии есть в сфере Blockchain для JavaScript специалистов!
Регистрация по ссылке:
🔗 https://www.mathrandom.com/events/blockchain-trends-2021/
Обратите внимание, что стрим будет утром в 11:00.
#event #blockchain
@JStify_Community - молодое JS сообщество, с интересным контентом и регулярными подкастами на YouTube (https://www.youtube.com/c/jstifycommunity), по моему мнению сообщество имеет все шансы стать самым большим во Львове или даже в Украине.
@vinjs - канал очень атмосферной конференции VinnytsiaJS (https://vinnytsiajs.org/) в канале найдете доклады, анонсы событий, интересных спикеров.
@beerJSZhytomyr - канал сообщества BeerJS в Житомире, харизма и вовлеченность организаторов делают сообщество одним из самых привлекательных в Украине, о их offline встречах ходят легенды.
#channels #friends #tofollow
@vinjs - канал очень атмосферной конференции VinnytsiaJS (https://vinnytsiajs.org/) в канале найдете доклады, анонсы событий, интересных спикеров.
@beerJSZhytomyr - канал сообщества BeerJS в Житомире, харизма и вовлеченность организаторов делают сообщество одним из самых привлекательных в Украине, о их offline встречах ходят легенды.
#channels #friends #tofollow
HyperFormula - движок для создания вычислений как в Excel. Можно очень круто интегрироваться со множеством пользовательских приложений, где есть таблицы. Работает в ноде и браузерах, имеет интерфейсы и примеры для работы с популярными фронтенд фреймворкми.
Пример кода:
🔗 https://handsontable.github.io/hyperformula/
🔗 https://github.com/handsontable/hyperformula
#repo #github #typescript #excel
Пример кода:
// define the data
const data = [['10', '20', '3.14159265359', '=SUM(A1:C1)']];
// build an instance with defined options and data
const hfInstance = HyperFormula.buildFromArray(data, options);
🔗 https://handsontable.github.io/hyperformula/
🔗 https://github.com/handsontable/hyperformula
#repo #github #typescript #excel
🔥 Все сервисы из google cloud на одной картинке.
🔗 https://github.com/priyankavergadia/google-cloud-4-words
#repo #github #cloud #gcp
🔗 https://github.com/priyankavergadia/google-cloud-4-words
#repo #github #cloud #gcp