Немного расскажу про обновление формата данного канала.
Если кратко: тут будут активно выходить новости.
Я часто их отправляю в различные тематические чаты и ко мне разумно прилетело требование: "а почему у тебя контент размазывается между сообществами, когда у тебя на канале тишина".
Подумал, что пора это исправлять.
Теперь вы тут сможете наблюдать интересные новости для меня из области разработки. Интересные для меня технические особенности с которыми пришлось столкнуться.
Надеюсь, что интересно будет всем
Если кратко: тут будут активно выходить новости.
Я часто их отправляю в различные тематические чаты и ко мне разумно прилетело требование: "а почему у тебя контент размазывается между сообществами, когда у тебя на канале тишина".
Подумал, что пора это исправлять.
Теперь вы тут сможете наблюдать интересные новости для меня из области разработки. Интересные для меня технические особенности с которыми пришлось столкнуться.
Надеюсь, что интересно будет всем
👍22🔥1
Вчера опубликовали тестовую версию для обновления сайта ноды.
Дизайн у ноды действительно не менялся много лет и старый сайт выглядел морально устаревшим.
И вот новая версия сайта
Что я заметил (сам дизайн разбирать не буду):
1) Отношение между Current / LTS кнопками загрузки
- раньше было на главном экране только 2 равнозначные кнопки: скачать LTS / скачать Current
- теперь кнопка лишь у LTS версии, а вот "Current" уехала скромненько в ссылочку под кнопкой (я ее даже не сразу заметил)
Чем это интересно? Ну как минимум, что у ноды изначально необычное использование semver-а
по факту имеем, что четные мажоры - это stable версии
нечетные мажоры - это unstable версии (хотя, конечно, они не называют его так, но он по сути им и является)
те основная доля новых фичей приходится на нечетные мажоры (например сейчас это node 21), а к четному релизу они стремятся исправить как можно больше багов.
Подробнее можно почитать о релизном цикле node.js тут и тут
И вот решили большинство пользователей огородить от потенциальных проблем таким интересным способом, предлагая явно лишь LTS версии. Я с ними полностью согласен
2) На главной появились примерчики с кодом.
Интересно... но бесполезно. Как заметили уже в отзывах, то хочется видеть их интерактивными, те добавить интеграции с любой песочницей и будет пушка
3) Страница загрузок
- Больше не пугает новичков страшной таблицей в которой нужно сделать выбор, а сделали интерактивный селектор
- Добавили готовые скрипты установки для инструментов NVM / Docker etc
4) Контент
Контент между сайтами одинаковый. Но добавили несколько фишек:
- навигация справа по контенту
- ссылочка на страничку в гитхабе (мастхев, если делаете доку, то лучше всегда такое добавлять)
- в конце статьи Prev / Next ссылки
5) Документация
А вот сама документация пока осталось прежней, но она ссылается на старый сайт, так что может и его тоже обновят
PS. Что по стеку?
Можно почитать тут
Кратко: остался прежним (Next + tailwind + radix ui)
переезд на Next был пошаговым более года назад, до этого момента они сидели на metalsmith
Дизайн у ноды действительно не менялся много лет и старый сайт выглядел морально устаревшим.
И вот новая версия сайта
Что я заметил (сам дизайн разбирать не буду):
1) Отношение между Current / LTS кнопками загрузки
- раньше было на главном экране только 2 равнозначные кнопки: скачать LTS / скачать Current
- теперь кнопка лишь у LTS версии, а вот "Current" уехала скромненько в ссылочку под кнопкой (я ее даже не сразу заметил)
Чем это интересно? Ну как минимум, что у ноды изначально необычное использование semver-а
по факту имеем, что четные мажоры - это stable версии
нечетные мажоры - это unstable версии (хотя, конечно, они не называют его так, но он по сути им и является)
те основная доля новых фичей приходится на нечетные мажоры (например сейчас это node 21), а к четному релизу они стремятся исправить как можно больше багов.
Подробнее можно почитать о релизном цикле node.js тут и тут
И вот решили большинство пользователей огородить от потенциальных проблем таким интересным способом, предлагая явно лишь LTS версии. Я с ними полностью согласен
2) На главной появились примерчики с кодом.
Интересно... но бесполезно. Как заметили уже в отзывах, то хочется видеть их интерактивными, те добавить интеграции с любой песочницей и будет пушка
3) Страница загрузок
- Больше не пугает новичков страшной таблицей в которой нужно сделать выбор, а сделали интерактивный селектор
- Добавили готовые скрипты установки для инструментов NVM / Docker etc
4) Контент
Контент между сайтами одинаковый. Но добавили несколько фишек:
- навигация справа по контенту
- ссылочка на страничку в гитхабе (мастхев, если делаете доку, то лучше всегда такое добавлять)
- в конце статьи Prev / Next ссылки
5) Документация
А вот сама документация пока осталось прежней, но она ссылается на старый сайт, так что может и его тоже обновят
PS. Что по стеку?
Можно почитать тут
Кратко: остался прежним (Next + tailwind + radix ui)
переезд на Next был пошаговым более года назад, до этого момента они сидели на metalsmith
👍4🤔4🔥1
"ЯЛЮБЛЮJS"
я уже 10+ лет углубленно погружаюсь в дебри языка JS. Но все равно каждый раз находится что-то что меня поражает.
В этот раз речь пойдет о кое чем затертом до дыр: this. И если вы думаете, что вас им не удивить, то либо вы наивны, либо мне остается вам позавидовать.
Возьмем очень простой пример:
Что мы увидим в результате?
Дам вам некоторое время на подумать, а потом дам объяснение
PS. задача без особого подвоха. Никакие стандартные методы не патчились. Прототипы не изменялись и без прочих уловок
#js
я уже 10+ лет углубленно погружаюсь в дебри языка JS. Но все равно каждый раз находится что-то что меня поражает.
В этот раз речь пойдет о кое чем затертом до дыр: this. И если вы думаете, что вас им не удивить, то либо вы наивны, либо мне остается вам позавидовать.
Возьмем очень простой пример:
const a = []
function b() { a.push(this) }
b.call(4)
b.call(4)
console.log(a[0] === a[1])
Что мы увидим в результате?
Дам вам некоторое время на подумать, а потом дам объяснение
PS. задача без особого подвоха. Никакие стандартные методы не патчились. Прототипы не изменялись и без прочих уловок
#js
👍1
Что выведет код?
Anonymous Quiz
33%
true
32%
false
13%
а черт его знает
22%
к черту JS (посмотреть результаты)
🤯4
zede code
Что выведет код?
Ответ:
Как мы видим, большинство запутались с ответом. Прям ровненько 50/50 разделились
И это не просто так, ибо поведение хоть и без особого подвоха, но 1 особенность в JS есть которая может повлиять на все происходящее: это strict mode.
Да, strict mode это вам не только "больше нельзя перезаписать arguments у функций и this по-умолчанию undefined". Там список изменений прям неплохой и неплохо бы его изучить.
Что же сейчас должно зацепить наш взгляд? А вот этот пункт, который нам уже частично знаком (сделал для удобства ленивых сразу с переводом)
Те мы все знаем первую часть про то что мы не берем глобальный объект по-умолчанию, а вот то что меняется поведение для других примитивов - большинство не знает. Те в strict mode у this может быть значение `4` / `"string"` / `Symbol` и тп, а вот без него там окажутся результаты выражений `"new Number(4) / new String("string") / (ага, а вот для Symbol так не прокатит, у него нет вызова через new :D)"`. Вот и получается, что не зная в каком режиме запущен код, то вы не знаете какой будет результат у выражения. Забавно, что это реально приводило к багам на проде(например, такая проблема всплывала у автора эффектора@ZeroBias ). На всякий случай напомню, что в некторых случаях strict mode включается автоматически: внутри es-модулей, классов и тд
Еще занимательный момент вытекающий из пунктов выше, что 'use strict' должен быть внешний. Те
```
function a() { return this }
function b() { 'strict mode'; return this }
```
разницы никакой не несет в этом плане
И это не просто так, ибо поведение хоть и без особого подвоха, но 1 особенность в JS есть которая может повлиять на все происходящее: это strict mode.
Да, strict mode это вам не только "больше нельзя перезаписать arguments у функций и this по-умолчанию undefined". Там
Что же сейчас должно зацепить наш взгляд? А вот этот пункт, который нам уже частично знаком (сделал для удобства ленивых сразу с переводом)
Если this оценивается в strict mode, то значение this не преобразуется в объект. Значение this, равное undefined или null, не преобразуется в глобальный объект, а примитивные значения не преобразуются в объекты-обертки. Значение this, переданное через вызов функции (включая вызовы с использованием Function.prototype.apply и Function.prototype.call ), не преобразует переданное значение this к объекту ( 10.2.1.2 , 20.2.3.1 , 20.2.3.3 ).
Те мы все знаем первую часть про то что мы не берем глобальный объект по-умолчанию, а вот то что меняется поведение для других примитивов - большинство не знает. Те в strict mode у this может быть значение `4` / `"string"` / `Symbol` и тп, а вот без него там окажутся результаты выражений `"new Number(4) / new String("string") / (ага, а вот для Symbol так не прокатит, у него нет вызова через new :D)"`. Вот и получается, что не зная в каком режиме запущен код, то вы не знаете какой будет результат у выражения. Забавно, что это реально приводило к багам на проде(например, такая проблема всплывала у автора эффектора
Еще занимательный момент вытекающий из пунктов выше, что 'use strict' должен быть внешний. Те
```
function a() { return this }
function b() { 'strict mode'; return this }
```
разницы никакой не несет в этом плане
👍7🤯5🔥1
Очередная жутко холливарная тема то и дело поднимающаяся в кругах JS-еров.
Многопоточность и JS. И если все еще нет однозначного ответа, то значит в чем-то есть подвох. А он вполне себе есть... терминология.
Любой спор о многопоточности в JS неминуемо скатится в битве по натягиванию совы на глобус и вопросам курица или яйцо.
Если в рамках данной заметки рассматривать все аспекты, то разбор потянет на нехилую статью. Поэтому я буду швыряться различными мыслями, а там уже сами разберемся, может реально нужна статья или доклад.
Проблема: понятие многопоточности. Вообще если погуглить многопоточность, то это будет свойствами системы/программы и тд. На язык как-то прямым образом это не ложится. Значит, что это косвенный параметр для языка. В случае JS он обеспечивается чем-то внешним: Host-средой. Именно она определяет это свойство.
Идем дальше. Если посмотрим спецификацию ecma. То там будут упоминаться потоки... но в контексте другого термина Agent(агент). Что это за фрукт такой? Если упрощенно, то по факту это примитив для описания процессов исполнения. И там прям же написано, что агенты не обязаны владеть своим потоком. Вполне возможны сценарии, когда все агенты запущены в рамках 1 потока. Далее, вся спека строится как раз от идеи оперирования агентами.
И вот тут и начинается проблема. Спека нас привязывает к понятию агента и именно им мы должны оперировать. Что уже сказать можно точно: агенты дают нам возможность распараллелить исполнение. Но верно ли говорить, что параллелизм = многопоточность? Решайте сами
Идем к следующей интересной модели, которая уже ближе к прикладному коду: Worker-ы. И вот опять какой-то свой термин, который для мира не JS-еров непонятен. Вот есть процессы, потоки, корутины, а тут воркеры всплывают, все не как у людей. Но и на это своя причина. Понятие воркера никак нас не привязывает к механизму его работы. Это дает возможность авторов браузеров волю в реализации.
Рассмотрим это на примере Blink-а. У нас есть вот такой замечательный документ. В нем описание архитектуры и внутренней имплементации воркеров (и даже таскаться по исходникам не надо). И там есть очень крутой параграф: Process and Thread Model. В нем расписан механизм реализации различных типов воркеров (можете полистать до таблички). И там прям четкое разделение: In-process/Out-of-process. Причем используется сочетание "may", те опять же поведение может меняться в некоторых случаях. Часть воркеров могут быть запущены в отдельном процессе(Service Worker/Shared Worker), часть в текущем процессе (Dedicated Worker), а другие вообще в текущем потоке отрисовки(Isolated Worker). Кстати, не поленитесь прочитать главу целиком, там весьма хорошо поясняются различия между этими механизмами и даже есть схема как они работают в браузере.
Еще одним интересным моментом является то, что агенты и соответственно воркеры не имеют общей памяти... за исключением некоторых механизмов шаринга и синхронизации, но и они никак особо не привязаны к механизмам относительно выбора между процессом и потоком(в том же блинке они вполне синхронизируются вне зависимости от способа реализации воркера). Но определением потока зачастую является то, что потоки в отличие от процессов имеют общий скоуп памяти, что по спеке никак не гарантируется и в этом случае это сближает их скорее с процессами, которые скорее независимы друг от друга.
Вот теперь и вопрос. Как натягивать это все на язык? Механизмы есть различные, но они ни к чему не привязаны. Можно ли сказать, что JS может в параллелизм - однозначно да. Стоит ли это расширять до понятие "многопоточность"... вопрос куда более неоднозначный.
От себя: мне просто не хочется привязывать к языку понятия потока как механизма параллелизма, только как потока исполнения. Если язык чешется: назову многоагентовым, остальное лишь создает поводы для холливаров без однозначных ответов.
Многопоточность и JS. И если все еще нет однозначного ответа, то значит в чем-то есть подвох. А он вполне себе есть... терминология.
Любой спор о многопоточности в JS неминуемо скатится в битве по натягиванию совы на глобус и вопросам курица или яйцо.
Если в рамках данной заметки рассматривать все аспекты, то разбор потянет на нехилую статью. Поэтому я буду швыряться различными мыслями, а там уже сами разберемся, может реально нужна статья или доклад.
Проблема: понятие многопоточности. Вообще если погуглить многопоточность, то это будет свойствами системы/программы и тд. На язык как-то прямым образом это не ложится. Значит, что это косвенный параметр для языка. В случае JS он обеспечивается чем-то внешним: Host-средой. Именно она определяет это свойство.
Идем дальше. Если посмотрим спецификацию ecma. То там будут упоминаться потоки... но в контексте другого термина Agent(агент). Что это за фрукт такой? Если упрощенно, то по факту это примитив для описания процессов исполнения. И там прям же написано, что агенты не обязаны владеть своим потоком. Вполне возможны сценарии, когда все агенты запущены в рамках 1 потока. Далее, вся спека строится как раз от идеи оперирования агентами.
И вот тут и начинается проблема. Спека нас привязывает к понятию агента и именно им мы должны оперировать. Что уже сказать можно точно: агенты дают нам возможность распараллелить исполнение. Но верно ли говорить, что параллелизм = многопоточность? Решайте сами
Идем к следующей интересной модели, которая уже ближе к прикладному коду: Worker-ы. И вот опять какой-то свой термин, который для мира не JS-еров непонятен. Вот есть процессы, потоки, корутины, а тут воркеры всплывают, все не как у людей. Но и на это своя причина. Понятие воркера никак нас не привязывает к механизму его работы. Это дает возможность авторов браузеров волю в реализации.
Рассмотрим это на примере Blink-а. У нас есть вот такой замечательный документ. В нем описание архитектуры и внутренней имплементации воркеров (и даже таскаться по исходникам не надо). И там есть очень крутой параграф: Process and Thread Model. В нем расписан механизм реализации различных типов воркеров (можете полистать до таблички). И там прям четкое разделение: In-process/Out-of-process. Причем используется сочетание "may", те опять же поведение может меняться в некоторых случаях. Часть воркеров могут быть запущены в отдельном процессе(Service Worker/Shared Worker), часть в текущем процессе (Dedicated Worker), а другие вообще в текущем потоке отрисовки(Isolated Worker). Кстати, не поленитесь прочитать главу целиком, там весьма хорошо поясняются различия между этими механизмами и даже есть схема как они работают в браузере.
Еще одним интересным моментом является то, что агенты и соответственно воркеры не имеют общей памяти... за исключением некоторых механизмов шаринга и синхронизации, но и они никак особо не привязаны к механизмам относительно выбора между процессом и потоком(в том же блинке они вполне синхронизируются вне зависимости от способа реализации воркера). Но определением потока зачастую является то, что потоки в отличие от процессов имеют общий скоуп памяти, что по спеке никак не гарантируется и в этом случае это сближает их скорее с процессами, которые скорее независимы друг от друга.
Вот теперь и вопрос. Как натягивать это все на язык? Механизмы есть различные, но они ни к чему не привязаны. Можно ли сказать, что JS может в параллелизм - однозначно да. Стоит ли это расширять до понятие "многопоточность"... вопрос куда более неоднозначный.
От себя: мне просто не хочется привязывать к языку понятия потока как механизма параллелизма, только как потока исполнения. Если язык чешется: назову многоагентовым, остальное лишь создает поводы для холливаров без однозначных ответов.
👍9🔥7
Прежде чем писать некоторые новости, то хочется сделать к ним небольшие подводки, чтобы на них можно было ссылаться при обсуждении дальнейших новостей/записей. Так я буду уверен, что вы точно понимаете что я имею ввиду.
Для начала нужно определиться с базовым понятием реактивности. Тоже много уже копий на этом поломали и каких трактовок только не существует. Тут будет то как я понимаю реактивность.
Реактивность - это свойство системы автоматически поддерживать себя относительно заданных правил. Правила могут быть как для входов, так и для выходов. И в зависимости от того на что рассчитаны правила, то реактивность можно разделить на: ориентированную на реактивное состояние, ориентированная на реактивные процессы(реакции).
Давайте возьмем самый простой пример, который только может быть для описания реактивного состояния.
что мы здесь видим? у нас есть состояние заданное 3мя ячейками: a/b/c. Если это императивный код, то изменение
С другой стороны, если мы напишем что-то такое, чтобы обновить
то скорее всего внутри
Те если система сама следит за изменениями и поддерживает заданные правила, то ее можно считать реактивной. Способов реализации такого великое множество. Стоит заметить, что так как абсолютное большинство языков программирований сами по себе не является реактивными, то каждая реактивная система задает свои правила игры в рамках которой она является реактивной. Это может доходить даже до некоторого подобия DSL для того чтобы указывать правила. С помощью данного подхода мы можем разложить все реактивные системы на различные группы, однако это совершенно отдельная тема.
Это все о реактивном состоянии. Однако, важны и реактивные процессы, которые указывают как одни действия влекут за собой какие-то последствия. Они чуть сложнее. Проще всего их представить на знакомых большинству Event emitter-ах/Event Bus-ах. Те есть некоторая сущность на которую можно подписываться множеству слушателей, и ее можно триггерить. Только чаще всего подписываются не на какое-то событие, а вот прям на сам эффект триггера. Концепция простая, но невероятно мощная если вокруг нее накрутить сверху побольше "мясца". Те такая система будет реактивной, так как она будет автоматически преобразовывать "раздражители" в последствия. Важно, что реактивная система себя показывает в "реальном времени", те это не просто вызов функции. А как создание организма, которое будет реагировать на раздражители. Оставлю как основной пример такого подхода: Rx
Значит ли что если мы реализуем реактивное состояние, то исключаем реактивность процессов. Нет. Но чаще всего библиотеки сосредотачиваются на чем-то одном, а второй элемент оставляют побочным. Например, в Rx удобно описывать процессы, но вот работа с состояниями вызывает затруднения (а особенно, если мы хотим, чтобы код оставался производительным). Обратный пример это реактивная система Vue: в ней легко описывать данные и их соотношения, но вот процессы приходится писать весьма в императивном стиле, реактивные процессы задаются только для прослушивания изменений в данных. Однако, некоторые системы стараются быть одинаково удобны и для данных и для процессов. Такими примерами могут быть Reatom и Effector. (Если вам известны другие такие системы буду рад дополнить). Есть случаи, когда фреймворки просто оставляют 1 систему для данных, другую для процессов (например Angular).
Надеюсь, что в некотором роде прояснил 2 основных подхода к реактивности и с какой стороны их можно рассматривать. На самом деле подходов и тонкостей гораздо больше, но пусть это будет отправной точкой.
Для начала нужно определиться с базовым понятием реактивности. Тоже много уже копий на этом поломали и каких трактовок только не существует. Тут будет то как я понимаю реактивность.
Реактивность - это свойство системы автоматически поддерживать себя относительно заданных правил. Правила могут быть как для входов, так и для выходов. И в зависимости от того на что рассчитаны правила, то реактивность можно разделить на: ориентированную на реактивное состояние, ориентированная на реактивные процессы(реакции).
Давайте возьмем самый простой пример, который только может быть для описания реактивного состояния.
a = 2
b = 5
c = a + b
что мы здесь видим? у нас есть состояние заданное 3мя ячейками: a/b/c. Если это императивный код, то изменение
a
/b
не повлечет за собой обновление с
. А вот для реактивной парадигмы если оказывается, что с
перестал быть равен а + b
. Если это произошло, то по сути мы нарушили заданные правила. Такая система не является реактивнойС другой стороны, если мы напишем что-то такое, чтобы обновить
с
:a = 10
systemActualize()
то скорее всего внутри
systemActulize
произойдет нечто, что заставит обновиться и с
. Только вот автоматизма в этом не особо много, так как мы должны вручную следить за обновлениями и вызывать эту функцию. Такая система тоже не является реактивной.Те если система сама следит за изменениями и поддерживает заданные правила, то ее можно считать реактивной. Способов реализации такого великое множество. Стоит заметить, что так как абсолютное большинство языков программирований сами по себе не является реактивными, то каждая реактивная система задает свои правила игры в рамках которой она является реактивной. Это может доходить даже до некоторого подобия DSL для того чтобы указывать правила. С помощью данного подхода мы можем разложить все реактивные системы на различные группы, однако это совершенно отдельная тема.
Это все о реактивном состоянии. Однако, важны и реактивные процессы, которые указывают как одни действия влекут за собой какие-то последствия. Они чуть сложнее. Проще всего их представить на знакомых большинству Event emitter-ах/Event Bus-ах. Те есть некоторая сущность на которую можно подписываться множеству слушателей, и ее можно триггерить. Только чаще всего подписываются не на какое-то событие, а вот прям на сам эффект триггера. Концепция простая, но невероятно мощная если вокруг нее накрутить сверху побольше "мясца". Те такая система будет реактивной, так как она будет автоматически преобразовывать "раздражители" в последствия. Важно, что реактивная система себя показывает в "реальном времени", те это не просто вызов функции. А как создание организма, которое будет реагировать на раздражители. Оставлю как основной пример такого подхода: Rx
Значит ли что если мы реализуем реактивное состояние, то исключаем реактивность процессов. Нет. Но чаще всего библиотеки сосредотачиваются на чем-то одном, а второй элемент оставляют побочным. Например, в Rx удобно описывать процессы, но вот работа с состояниями вызывает затруднения (а особенно, если мы хотим, чтобы код оставался производительным). Обратный пример это реактивная система Vue: в ней легко описывать данные и их соотношения, но вот процессы приходится писать весьма в императивном стиле, реактивные процессы задаются только для прослушивания изменений в данных. Однако, некоторые системы стараются быть одинаково удобны и для данных и для процессов. Такими примерами могут быть Reatom и Effector. (Если вам известны другие такие системы буду рад дополнить). Есть случаи, когда фреймворки просто оставляют 1 систему для данных, другую для процессов (например Angular).
Надеюсь, что в некотором роде прояснил 2 основных подхода к реактивности и с какой стороны их можно рассматривать. На самом деле подходов и тонкостей гораздо больше, но пусть это будет отправной точкой.
🔥3
PS. тут можно было бы оставить целую кучу ссылок на замечательные статьи от других авторов, но их так много, что это достоино отдельного поста
Если есть желание, то можете покидать в комментарии те, которые вы считаете наилучшими или полными по данной тематике
Если есть желание, то можете покидать в комментарии те, которые вы считаете наилучшими или полными по данной тематике
Reatom
async
Reatom for async
Сегодня расскажу про небольшой лайфхак. О котором просто несправедливо мало людей знают/применяют.
Часто полноценная реализация стилизации в браузере это неоптимальный выбор:
1) Вы не фронтендер и трогать CSS это последнее, что вам хочется делать(и я вас прекрасно пониманию), а накидать что-то на страничке надо
2) Вам нет смысла тратить на это много времени (напр в песочнице, при разработке PoC версий и тд)
3) Ставить полноценную библиотеку компонентов слишком запарно и не стоит того
4) да, даже накидывать подключать классы tailwind / bootstrap слишком муторно
А что-то +- адекватное все равно хочется (так как дефолтные стили браузера ну уж слишком никакие)
Какое решение? classless библиотеки стилей.
Происходит в них ровно то что написано: не пишите никаких классов для стилизации, только семантические теги. Да, просто пишите верстку, а библиотека сама делает все красивенько по мере возможности.
Вам не нужно учить такие библиотеки, макс слегка попривыкнуть к тому что в них реализовано. Вы просто подключаете 1 css-ник и накидываете фактически голый HTML. Конечно, полноценные сайты реализовать чисто на них будет сложновато, но как базовый стартер для чего-то минималистичного они просто прекрасно подойдут
Это экономит КУЧУ времени и позволяет не резать глаза, сосредоточившись на конкретной задаче которую вам надо реализовать.
Чтобы не мучаться с поиском таких решений есть вот такой репозиторий. Он активно пополняется различными вариантами и весьма подробен. Выбираете любую библиотеку на свой вкус и подключаете 1 строкой
Моим же фаворитом является PicoCSS (демка),
Если же вам привычен вид бутстрапа то обрабтите внимание на Holiday.css
PS. Если вы любите песочницы, то скорее всего вам будет полезно куда-то сохранить все равно минимальный пресет-стартер.
Можете сделать это в закладки / заметку / сниппет
Напр, для Vue playground вы можете подключить его так
В случае Vite и плейграундах основанных на нем быстрее всего закидывать в
Будьте продуктивны и тратьте меньше времени на ненужные задачи!
Часто полноценная реализация стилизации в браузере это неоптимальный выбор:
1) Вы не фронтендер и трогать CSS это последнее, что вам хочется делать(и я вас прекрасно пониманию), а накидать что-то на страничке надо
2) Вам нет смысла тратить на это много времени (напр в песочнице, при разработке PoC версий и тд)
3) Ставить полноценную библиотеку компонентов слишком запарно и не стоит того
4) да, даже накидывать подключать классы tailwind / bootstrap слишком муторно
А что-то +- адекватное все равно хочется (так как дефолтные стили браузера ну уж слишком никакие)
Какое решение? classless библиотеки стилей.
Происходит в них ровно то что написано: не пишите никаких классов для стилизации, только семантические теги. Да, просто пишите верстку, а библиотека сама делает все красивенько по мере возможности.
Вам не нужно учить такие библиотеки, макс слегка попривыкнуть к тому что в них реализовано. Вы просто подключаете 1 css-ник и накидываете фактически голый HTML. Конечно, полноценные сайты реализовать чисто на них будет сложновато, но как базовый стартер для чего-то минималистичного они просто прекрасно подойдут
Это экономит КУЧУ времени и позволяет не резать глаза, сосредоточившись на конкретной задаче которую вам надо реализовать.
Чтобы не мучаться с поиском таких решений есть вот такой репозиторий. Он активно пополняется различными вариантами и весьма подробен. Выбираете любую библиотеку на свой вкус и подключаете 1 строкой
Моим же фаворитом является PicoCSS (демка),
Если же вам привычен вид бутстрапа то обрабтите внимание на Holiday.css
PS. Если вы любите песочницы, то скорее всего вам будет полезно куда-то сохранить все равно минимальный пресет-стартер.
Можете сделать это в закладки / заметку / сниппет
Напр, для Vue playground вы можете подключить его так
В случае Vite и плейграундах основанных на нем быстрее всего закидывать в
index.html
Будьте продуктивны и тратьте меньше времени на ненужные задачи!
GitHub
GitHub - dbohdan/classless-css: A list of classless CSS themes/frameworks with screenshots
A list of classless CSS themes/frameworks with screenshots - dbohdan/classless-css
🔥12👍3
Раз уже закинул инфу про ленивые стили, то теперь расскажу про вторую ультимативную фишку для скорости и простоты разработки: https://icones.js.org
На данный момент это поисковик по самой крупной на данный момент OpenSource базе иконок (их более 200 000).
Заходим, выбираем нужный пресет, натыкиваем опций и копируем/сохраняем как нам нравится
Бонусы:
- глобальный поиск по названию / сету
- копирование через кучу возможных форматов (не хватает только формата для Android, так что это шанс сделать шаг в OpenSource)
- установка цвета и стиля иконки
- сбор иконок в бандл нужного формата (в том числе и в иконочный шрифт)
Можно пойти и серьезным путем встроив интеграцию себе прямо в сборщик благодаря unplugin-icons (советую отдельно разобраться с этим инструментом, так как он в целом предоставляет очень мощные опции для работы с иконками в проекте)
Тогда можно вообще не запариваться и писать вот такой код
Уже не раз спасало, когда какому-то пету нужны иконки, а искать в очередной раз в гугле нет желания
На данный момент это поисковик по самой крупной на данный момент OpenSource базе иконок (их более 200 000).
Заходим, выбираем нужный пресет, натыкиваем опций и копируем/сохраняем как нам нравится
Бонусы:
- глобальный поиск по названию / сету
- копирование через кучу возможных форматов (не хватает только формата для Android, так что это шанс сделать шаг в OpenSource)
- установка цвета и стиля иконки
- сбор иконок в бандл нужного формата (в том числе и в иконочный шрифт)
Можно пойти и серьезным путем встроив интеграцию себе прямо в сборщик благодаря unplugin-icons (советую отдельно разобраться с этим инструментом, так как он в целом предоставляет очень мощные опции для работы с иконками в проекте)
Тогда можно вообще не запариваться и писать вот такой код
import IconAccessibility from '~icons/carbon/accessibility'
import IconAccountBox from '~icons/mdi/account-box'
function App() {
return (
<div>
<IconAccessibility />
<IconAccountBox style={{ fontSize: '2em', color: 'red' }} />
</div>
)
}
Уже не раз спасало, когда какому-то пету нужны иконки, а искать в очередной раз в гугле нет желания
🔥11👍4
Итак, уж не знаю в честь чего такой символизм, но в этот день нам всем вне зависимости от пола сделали большой подарок: Rolldown вышел в публичный доступ (репозиторий / сайт)!
Пояснения для тех кто не в теме:
На данный момент vite один из лучших, если не самый лучший, выбор сборщика для проектов в мире JS/TS. Однако он не был лишен заложенных архитектурных проблем:
- относительно медленный продакшен билд
- неконсистентная дев и прод сборка (так как сборщик для дев и прод сборки отличаются)
- проблемы с чрезмерной загрузкой ESM модулей по сети
- неприятные проблемы для SSR
- ограниченный контроль над разбиением на чанки
- отсутствует Module Federation из коробки (вариация кастомная для vite все-таки существует)
И вот Rolldown это решение призванное устранить часть этих проблем.
1) Оно будет написано на Rust, что даст решению высокую производительность
2) Оно заменит и esbuild и Rollup 1 собой
3) заменить собой часть внешнего туллинга в перспективе
4) Это НЕ ЗАМЕНА Vite, а замена для сердца Vite (esbuild + rollup -> rolldown)
Это будет означать новый рассвет для vite. Однако, решение пока находится в разработке. Но у него уже есть дорожная карта развития с которой можно ознакомиться
Из важного:
- Планируется полная совемстимость с Rollup
- Поддержка системы плагинов, в том числе на JS
- Тесная интеграция с oxc (интересно что покажет этот дует, учитывая что oxc стремится к полной самодостаточности)
Пока нигде не нашел каких-то обещаний по датам до полноценного выпуска и тем более до внедрения в Vite, но раз он вышел в OpenSource, то это становится лишь вопросом времени (моя ставка, что к концу года точно будут эксперементальные сборки vite с подкапотмным rolldown-ом)
PS. С праздником всех для кого сегодня это праздник 🥳🎉
Пояснения для тех кто не в теме:
На данный момент vite один из лучших, если не самый лучший, выбор сборщика для проектов в мире JS/TS. Однако он не был лишен заложенных архитектурных проблем:
- относительно медленный продакшен билд
- неконсистентная дев и прод сборка (так как сборщик для дев и прод сборки отличаются)
- проблемы с чрезмерной загрузкой ESM модулей по сети
- неприятные проблемы для SSR
- ограниченный контроль над разбиением на чанки
- отсутствует Module Federation из коробки (вариация кастомная для vite все-таки существует)
И вот Rolldown это решение призванное устранить часть этих проблем.
1) Оно будет написано на Rust, что даст решению высокую производительность
2) Оно заменит и esbuild и Rollup 1 собой
3) заменить собой часть внешнего туллинга в перспективе
4) Это НЕ ЗАМЕНА Vite, а замена для сердца Vite (esbuild + rollup -> rolldown)
Это будет означать новый рассвет для vite. Однако, решение пока находится в разработке. Но у него уже есть дорожная карта развития с которой можно ознакомиться
Из важного:
- Планируется полная совемстимость с Rollup
- Поддержка системы плагинов, в том числе на JS
- Тесная интеграция с oxc (интересно что покажет этот дует, учитывая что oxc стремится к полной самодостаточности)
Пока нигде не нашел каких-то обещаний по датам до полноценного выпуска и тем более до внедрения в Vite, но раз он вышел в OpenSource, то это становится лишь вопросом времени (моя ставка, что к концу года точно будут эксперементальные сборки vite с подкапотмным rolldown-ом)
PS. С праздником всех для кого сегодня это праздник 🥳🎉
🔥15
Вообще не секрет, что Vue единственный популярный фронтенд-фреймворк за которым не стоит ни одна корпорация и Vue очень гордится этим (на самом деле Solid.js тоже может в эту категорию попасть, но ему нужно подрасти по популярности). Что же это значит? Что разработчики фреймворка сами вольны выбирать чем заниматься и определять вектор развития. Но это и значит, что финансы целиком зависят от поддержки других.
Существует и другой вектор получения прибыли: платные курсы и Vue вполне активно этот вектор развивает взаимодействуя с порталами vueschool и vuemastery.
Однако чтобы не вынуждать работяг тратить только свои кровные (ну и завлечь новых клиентов, конечно), несколько раз в году они делают акцию "бесплатные выходные". В это время все курсы доступны совершенно бесплатно. Их достаточно много и они хорошо покрывают всю экосистему целиком (там и Nuxt и Pinia и работа с firebase/vite/vitest и тд и тп так что даже опытные вьюшники найдут чем поживиться).
Вот 23-24 марта будет проводиться этот ивент вновь от vueschool.
Что нужно?
1) Регистрируемся на событие (если не успеете к началу, то ничего страшного, присоединиться во время ивента тоже можно)
2) Ждем указанных дат
3) Уходим в запой просмотра различных курсиков
В целом для меня, это отличный способ подтянуть знания пару раз в год, чтобы не растерять хватку работая в 1 компании с 1 окружением, так как позволяет увидеть новые тенденции и технологии завоевавшие популярность в экосистеме
Если вы искали достойные курсы по Vue или ждали момента, когда начать его изучить, то вот оно самое время
Существует и другой вектор получения прибыли: платные курсы и Vue вполне активно этот вектор развивает взаимодействуя с порталами vueschool и vuemastery.
Однако чтобы не вынуждать работяг тратить только свои кровные (ну и завлечь новых клиентов, конечно), несколько раз в году они делают акцию "бесплатные выходные". В это время все курсы доступны совершенно бесплатно. Их достаточно много и они хорошо покрывают всю экосистему целиком (там и Nuxt и Pinia и работа с firebase/vite/vitest и тд и тп так что даже опытные вьюшники найдут чем поживиться).
Вот 23-24 марта будет проводиться этот ивент вновь от vueschool.
Что нужно?
1) Регистрируемся на событие (если не успеете к началу, то ничего страшного, присоединиться во время ивента тоже можно)
2) Ждем указанных дат
3) Уходим в запой просмотра различных курсиков
В целом для меня, это отличный способ подтянуть знания пару раз в год, чтобы не растерять хватку работая в 1 компании с 1 окружением, так как позволяет увидеть новые тенденции и технологии завоевавшие популярность в экосистеме
Если вы искали достойные курсы по Vue или ждали момента, когда начать его изучить, то вот оно самое время
vueschool.io
Vue School Free Weekend: 48 Hours of Unlimited Access
Sign up for Vue School's Free Weekend on Nov 2-3, 2024. Get unlimited access to 65+ premium Vue.js courses for 48 hours. Learn from industry experts!
🔥17👍5
Вот слежу я за последними тенденциями в мире JS. И не может не складываться ощущение, что курс весьма интересный наметился.
И вот мое мнение: если вы планируете погружаться в мир JS на уровень туллинга серьезно, то учите Rust. Я не собираюсь заниматься рекламой языка, ибо суть вообще не в этом. Тенденции уже достаточно много лет, что инструменты на JS для JS достаточно забагованные и медленные. И если первое решить системно сложновато. То второе поддается решением используя туллинга на компилируемом языке. Да JS может быть быстрым, но все больше и больше это не "good enough" в некоторых сценариях. И вот было 2 основных фаворита: Golang и Rust. Первый хорошо вписался в ряды фронтов/фуллстаков благодаря своей простоте и дружелюбности (сервера поднимать на гошке к своим фронтам не менее приятно). Но вот все равно инструменты все больше и больше кочуют в сторону Rust.
Главное: на Rust уже формируется полноценная экосистема для создания инструментов на Rust для JS. Примером служит как раз Rolldown, который показал, что oxc может стать прекрасным основанием для ваших инструментов. Я четко уверен, что тенденция будет развиваться как минимум ближайшие лет 5.
Поэтому если вы присматриваете себе какой-то дополнительный язык окромя JS(если вы JS-разработчик да и не только), то Rust будет замечательным вложением
Из плюсов: ниша все еще достаточно просторная, так что если вы хотите прогреметь в OpenSource, то Rust+JS позволят вам этого добиться при желании
Для тех кто заинтересовался оставлю чуточку информации: лучший способ изучение Rust это замечательный rustbook (ru). А на сайте можно ознакомиться с другими книгами для различных задач в Rust.
PS. Сам я тоже начал только вкатываться в данный язык. Поэтому если есть какие-то ресурсы позволяющие следить за жизнью Rust(подкасты, дайджесты, сайты и тп), то буду благодарен им в комментах
И вот мое мнение: если вы планируете погружаться в мир JS на уровень туллинга серьезно, то учите Rust. Я не собираюсь заниматься рекламой языка, ибо суть вообще не в этом. Тенденции уже достаточно много лет, что инструменты на JS для JS достаточно забагованные и медленные. И если первое решить системно сложновато. То второе поддается решением используя туллинга на компилируемом языке. Да JS может быть быстрым, но все больше и больше это не "good enough" в некоторых сценариях. И вот было 2 основных фаворита: Golang и Rust. Первый хорошо вписался в ряды фронтов/фуллстаков благодаря своей простоте и дружелюбности (сервера поднимать на гошке к своим фронтам не менее приятно). Но вот все равно инструменты все больше и больше кочуют в сторону Rust.
Главное: на Rust уже формируется полноценная экосистема для создания инструментов на Rust для JS. Примером служит как раз Rolldown, который показал, что oxc может стать прекрасным основанием для ваших инструментов. Я четко уверен, что тенденция будет развиваться как минимум ближайшие лет 5.
Поэтому если вы присматриваете себе какой-то дополнительный язык окромя JS(если вы JS-разработчик да и не только), то Rust будет замечательным вложением
Из плюсов: ниша все еще достаточно просторная, так что если вы хотите прогреметь в OpenSource, то Rust+JS позволят вам этого добиться при желании
Для тех кто заинтересовался оставлю чуточку информации: лучший способ изучение Rust это замечательный rustbook (ru). А на сайте можно ознакомиться с другими книгами для различных задач в Rust.
PS. Сам я тоже начал только вкатываться в данный язык. Поэтому если есть какие-то ресурсы позволяющие следить за жизнью Rust(подкасты, дайджесты, сайты и тп), то буду благодарен им в комментах
www.rust-lang.org
Rust Programming Language
A language empowering everyone to build reliable and efficient software.
👍15🔥4🤔3
Итак сегодня 12 марта. Что это значит? А значит, что обманывать метрики в Core Web Vitals станет сложнее (да-да не удивляйтесь если у вас упадут в скором времени циферки в Lighthouse).
Что же там такого произошло? А все достаточно просто: одну метрику(FID) признают устаревшей, а новую метрику(INP) наоборот добавят.
А причина изменений проста: FID слишком легко подделывалась. Напомню, что FID это первый момент, когда можно будет впервые повзаимодействовать с контентом на сайте. Что же делали люди? Просто откладывали часть вычислений на момент после вычислений FID, в итоге и циферки красивые и директора довольные.
Сейчас на смену ей приходит метрика которая больше расчитана на общий пользовательский опыт работы со страницей: плавность скролла, скорость отклика на кнопках и тп. Поэтому если вам важны высокие метрики лучше ознакомиться получше с рекомендациями от google. Там целый раздел посвящен теперь только метрике INP(внимание в левую часть сайта, там целая куча ссылок по различным вопросам).
Как сильно изменится от этого выдача в поисковиках большой вопрос. Но вот директора/менеджеры могут прибежать с "у нас упали показатели Lightouse!!". Так что будьте готовы к такому повороту событий.
Посмотреть показатели можно тут: https://pagespeed.web.dev/?hl=ru
Что же там такого произошло? А все достаточно просто: одну метрику(FID) признают устаревшей, а новую метрику(INP) наоборот добавят.
А причина изменений проста: FID слишком легко подделывалась. Напомню, что FID это первый момент, когда можно будет впервые повзаимодействовать с контентом на сайте. Что же делали люди? Просто откладывали часть вычислений на момент после вычислений FID, в итоге и циферки красивые и директора довольные.
Сейчас на смену ей приходит метрика которая больше расчитана на общий пользовательский опыт работы со страницей: плавность скролла, скорость отклика на кнопках и тп. Поэтому если вам важны высокие метрики лучше ознакомиться получше с рекомендациями от google. Там целый раздел посвящен теперь только метрике INP(внимание в левую часть сайта, там целая куча ссылок по различным вопросам).
Как сильно изменится от этого выдача в поисковиках большой вопрос. Но вот директора/менеджеры могут прибежать с "у нас упали показатели Lightouse!!". Так что будьте готовы к такому повороту событий.
Посмотреть показатели можно тут: https://pagespeed.web.dev/?hl=ru
web.dev
Web Vitals | Articles | web.dev
Основные показатели для здорового сайта
🔥12
Раз уж подняли тему производительности, то вчера было еще одно важное событие в мире web perf-а. Под началом команды WebKit команды других браузеров (Google Chrome / Mozilla / Edge) и даже Intel объединились для прокачки бенчмарка для браузеров Speedometer 3,0.
1) Были улучшены способы замеры для более честной оценки производительности браузеров (подробнее можно ознакомиться в статье пункт Improved Test Harness)
2) Сместили очки: с предыдущей школой результаты могли улетать за 500. Теперь норма в 20-30 пунктах
3) Для всех популярных фреймворков на данный момент добавлены демки с замерами
4) Для приложения TODO сделаны 2 версии: с простым DOM и специально усложненным, чтобы лучше оценить как браузер с фреймворками справляются
5) 2 демки приложений имитирующих новостной сайт на Next и Nuxt
6) Несколько демок для визуализации данных (как D3 так и chart.js)
7) Из любопытного к бенчу добавлена демка с WYSIWYG-редактором
Каких-то конкретных результатов пока с замерами основных браузеров я не нашел, но, думаю, что это вопрос времени.
Вы можете позапускать у себя эти тесты тут.
Так же в репе замечено что уже многое запланировано на 4-ую версию и даже 3.1
1) Были улучшены способы замеры для более честной оценки производительности браузеров (подробнее можно ознакомиться в статье пункт Improved Test Harness)
2) Сместили очки: с предыдущей школой результаты могли улетать за 500. Теперь норма в 20-30 пунктах
3) Для всех популярных фреймворков на данный момент добавлены демки с замерами
4) Для приложения TODO сделаны 2 версии: с простым DOM и специально усложненным, чтобы лучше оценить как браузер с фреймворками справляются
5) 2 демки приложений имитирующих новостной сайт на Next и Nuxt
6) Несколько демок для визуализации данных (как D3 так и chart.js)
7) Из любопытного к бенчу добавлена демка с WYSIWYG-редактором
Каких-то конкретных результатов пока с замерами основных браузеров я не нашел, но, думаю, что это вопрос времени.
Вы можете позапускать у себя эти тесты тут.
Так же в репе замечено что уже многое запланировано на 4-ую версию и даже 3.1
WebKit
Speedometer 3.0: The Best Way Yet to Measure Browser Performance
As announced on browserbench.org today, in collaboration with other browser engine developers, Apple’s WebKit team is excited to introduce Speedometer 3.0, a major update that better reflects the Web of today.
🔥6👍2🤯1
Хех. апрель выдастся жарким :D
Чтобы не мучаться придумывая 3 доклада разом, то на Стачку поедет переосмысление доклада с UfaDevConf-а: JS которого нет
Поговорим о уровнях погружения в язык и какие есть особенности у этих этапов
А эта конфа: Стачка. В городе Ульяновск 12-13 апреля. Буквально через неделю после нее уже лететь на Holy.js
Чтобы не мучаться придумывая 3 доклада разом, то на Стачку поедет переосмысление доклада с UfaDevConf-а: JS которого нет
Поговорим о уровнях погружения в язык и какие есть особенности у этих этапов
А эта конфа: Стачка. В городе Ульяновск 12-13 апреля. Буквально через неделю после нее уже лететь на Holy.js
👍10🔥2
Если раньше шутили что фронтенд фреймворки растут как грибы после дождя, то теперь это же можно сказать про рантаймы для JS. Чувствуется уже усталость народа от node.js, все так и норовят от него уйти (как и от v8 в частности).
Сейчас я хочу поведать о релизе нового рантайма WinterJS. Чем он примечателен? Да, это очередной Blazing-fast рантайм для JS/WASM на Rust на основе движка SpiderMonkey (это тот что у мозиллы под капотом); при этом заявлено что он WinterCG совместимый.
Начну с WinterCG. Это рабочая группа на основе объединения множества компаний, которые хотят обеспечивать совместимое API для рантаймов вне браузера, но разработанное для веба. Те есть спека в которой описано поведение fetch в браузерах, но как быть node.js/bun/deno и другим решениям? А они тоже пишут свои спеки относительно спецификаций Web-платформы, как для того же fetch. Таким образом разработчикам библиотек проще поддерживать решения которые будут совместимы между рантаймами, да и в целом разработчикам жизнь заметно упрощается, когда есть стандартизация. Ну вот WinterCG совместимая -- та что соответствует спецификациям этой рабочей группы.
Важный момент WinterCG не имеет прямого отношения к WinterJS!
Есть еще одна не неменее интересная тема, которая достойна отдельного разбора: WinterJS может быть собрана полностью в WASM и работать через WASIX. Это расширение для WASI. Так, не пугаться. Давайте по порядку. Начнем кратко с WASM. WASM - это особый формат для стековой виртуальной машины, которая почти идет придатком к JS рантаймам (JS движки также обеспечивают поддержку WASM). Но этот бинарный формат беззубый, те сам по себе у него нет никакого I/O, работы с системой и тп. Для того чтобы вооружить WASM и был инициирован проект WASI (его разрабатывает подгруппа WebAssembly CG, которая отвечает и за WASM). Ок, а WASIX это еще дополнительное расширение вокруг WASI, но уже уже от wasmer-а (Wasmer это рантайм для WASM приложений).
Итак, пока все не вылетело из головы. Мы имеем новый рнтайм от команды Wasmer и он обещает быть чертовски быстрым (до 150к запросов в секунду). Он направлен на облачные решения. Совместим с основными Web фреймворками (пункт Compatibility with existing Web frameworks. там же демки и стартеры).
Завоюет ли он какую-то популярность сказать сложно, но людям точно пора отвыкать что JS вне браузера = только Node.js. Уж больно много альтернатив повылезало для специфичных задач. Планирую подробнее подрасписать какие вообще сейчас есть решения и для чего они, ибо запутаться в них уже ой как не сложно. Точно также можно сказать и про v8: JS это не обязательно V8. Рантаймы активно пробуют другие решения: SpiderMonkey, JavaScriptCore. QuickJS etс...
Сейчас я хочу поведать о релизе нового рантайма WinterJS. Чем он примечателен? Да, это очередной Blazing-fast рантайм для JS/WASM на Rust на основе движка SpiderMonkey (это тот что у мозиллы под капотом); при этом заявлено что он WinterCG совместимый.
Начну с WinterCG. Это рабочая группа на основе объединения множества компаний, которые хотят обеспечивать совместимое API для рантаймов вне браузера, но разработанное для веба. Те есть спека в которой описано поведение fetch в браузерах, но как быть node.js/bun/deno и другим решениям? А они тоже пишут свои спеки относительно спецификаций Web-платформы, как для того же fetch. Таким образом разработчикам библиотек проще поддерживать решения которые будут совместимы между рантаймами, да и в целом разработчикам жизнь заметно упрощается, когда есть стандартизация. Ну вот WinterCG совместимая -- та что соответствует спецификациям этой рабочей группы.
Важный момент WinterCG не имеет прямого отношения к WinterJS!
Есть еще одна не неменее интересная тема, которая достойна отдельного разбора: WinterJS может быть собрана полностью в WASM и работать через WASIX. Это расширение для WASI. Так, не пугаться. Давайте по порядку. Начнем кратко с WASM. WASM - это особый формат для стековой виртуальной машины, которая почти идет придатком к JS рантаймам (JS движки также обеспечивают поддержку WASM). Но этот бинарный формат беззубый, те сам по себе у него нет никакого I/O, работы с системой и тп. Для того чтобы вооружить WASM и был инициирован проект WASI (его разрабатывает подгруппа WebAssembly CG, которая отвечает и за WASM). Ок, а WASIX это еще дополнительное расширение вокруг WASI, но уже уже от wasmer-а (Wasmer это рантайм для WASM приложений).
Итак, пока все не вылетело из головы. Мы имеем новый рнтайм от команды Wasmer и он обещает быть чертовски быстрым (до 150к запросов в секунду). Он направлен на облачные решения. Совместим с основными Web фреймворками (пункт Compatibility with existing Web frameworks. там же демки и стартеры).
Завоюет ли он какую-то популярность сказать сложно, но людям точно пора отвыкать что JS вне браузера = только Node.js. Уж больно много альтернатив повылезало для специфичных задач. Планирую подробнее подрасписать какие вообще сейчас есть решения и для чего они, ибо запутаться в них уже ой как не сложно. Точно также можно сказать и про v8: JS это не обязательно V8. Рантаймы активно пробуют другие решения: SpiderMonkey, JavaScriptCore. QuickJS etс...
wasmer.io
WinterJS 1.0 · Blog · Wasmer
WinterJS 1.0 is finally here.
WinterJS is [an incredibly fast](https://wasmer.io/posts/winterjs-vs-alternatives-is-blazing-fast) _[WinterCG](https://...
WinterJS is [an incredibly fast](https://wasmer.io/posts/winterjs-vs-alternatives-is-blazing-fast) _[WinterCG](https://...
👍10🔥3🤯2
Ух, подготовка к Holy.js в самом разгаре. Напоминаю, что тема будет кастомные рендереры во Vue. Тема очень интересная.
И я решил проверить, а что если отрендерить Vue приложение в React приложение? Те это не просто средендерить Vue в элемент и его использовать в React. А выходом Vue являются именно VNode от реакта
ОНО РАБОТАЕТ! Сижу, играюсь и радуюсь как ребенок :D
Финальная цель это запустить Vue приложение на Next / ReactNative / Expo
Те попытаться реализовать полный интероп из Vue в React.
Поиграться можно будет чуть позже
И я решил проверить, а что если отрендерить Vue приложение в React приложение? Те это не просто средендерить Vue в элемент и его использовать в React. А выходом Vue являются именно VNode от реакта
ОНО РАБОТАЕТ! Сижу, играюсь и радуюсь как ребенок :D
Финальная цель это запустить Vue приложение на Next / ReactNative / Expo
Те попытаться реализовать полный интероп из Vue в React.
Поиграться можно будет чуть позже
🤯14👍8🔥3
Больше стандартов богу стандартов! В недавней новости вы скорее всего впервые столкнулись с WinterCG(Web-interoperable Runtimes Community Group). Но вот буквально вчера анонсирована новая рабочая группа: OCWG(github).
Чем же займется эта группа? А тут надо отступить к другой новости, которую я решил не публиковать. Есть такой продукт Obsidian. Он нужен для заметок и прочего markdown-based контента с учетом, что это все на local-first(те первична работа от локальных файлов если упрощать). И вот там был особый синтаксис для хранения данных их WYSIWYG-редактора контента в свободной форме. Далее они решили, что этот формат стоит доработать и опубликовать как публичную спеку: JSON Canvas. Через нее можно описывать элементы на бесконечном холсте.
Казалось бы на этом можно и закончить, но инициативу подхватили другие продукты реализующие идеи бесконечных полотен такие как: tldraw, excalidraw, stately.ai, kinopio, dxos и другие. И будут они заниматься разработкой и распространением общего стандарта для приложений с функционалом бесконечного холста. Их великое множество и есть целый сайт посвященный таким приложениям. Однако, они не стали говорить, что JSON Canvas это их формат, вместо этого они обещают пойти еще дальше. Против JSON Canvas они ничего не имеют, но они хотят смотреть шире и быть группой по решению общих проблем для форматов описания бесконечных холстов.
Дальше будет инфа вязтая из твитов релиза
Почему же им важен файловый формат:
- Файлы обеспечивают долговечность. Базы данных могут отключаться. Файлы же живут вечно.
- Файлы позволяют легко мигрироваться от одного инструмента к другому, борясь с вендор локами.
- В конечном итоге они надеются обеспечить совместную работу в режиме реального времени с использованием различных инструментов для работы с холстом.
Ожидаемые результаты работы группы:
- Разработка общего базового формата на основе принципов команды.
- Расширение формата для широкого спектра инструментов.
- Возможность синхронизации в реальном времени между несколькими полотнами.
- Создание тестового стенда сродни CSS Acid Tests.
- Предложение по улучшению спецификации JSON Canvas.
Формат встреч будет публичный(?) каждые 2 недели. Для обсуждения идей есть Discord, куда зовут всех заинтересованных.
Что у них выйдет пока не знаем, но вот такая неожиданная коллаборация в, казалось бы, тривиальной вещи как файловый формат для бесконечных холстов удивляет. Будем надеяться, что как минимум это действительно даст нам возможность переносить данные между различными инструментами, чем значительно могут упростить жизнь пользователям.
Чем же займется эта группа? А тут надо отступить к другой новости, которую я решил не публиковать. Есть такой продукт Obsidian. Он нужен для заметок и прочего markdown-based контента с учетом, что это все на local-first(те первична работа от локальных файлов если упрощать). И вот там был особый синтаксис для хранения данных их WYSIWYG-редактора контента в свободной форме. Далее они решили, что этот формат стоит доработать и опубликовать как публичную спеку: JSON Canvas. Через нее можно описывать элементы на бесконечном холсте.
Казалось бы на этом можно и закончить, но инициативу подхватили другие продукты реализующие идеи бесконечных полотен такие как: tldraw, excalidraw, stately.ai, kinopio, dxos и другие. И будут они заниматься разработкой и распространением общего стандарта для приложений с функционалом бесконечного холста. Их великое множество и есть целый сайт посвященный таким приложениям. Однако, они не стали говорить, что JSON Canvas это их формат, вместо этого они обещают пойти еще дальше. Против JSON Canvas они ничего не имеют, но они хотят смотреть шире и быть группой по решению общих проблем для форматов описания бесконечных холстов.
Дальше будет инфа вязтая из твитов релиза
Почему же им важен файловый формат:
- Файлы обеспечивают долговечность. Базы данных могут отключаться. Файлы же живут вечно.
- Файлы позволяют легко мигрироваться от одного инструмента к другому, борясь с вендор локами.
- В конечном итоге они надеются обеспечить совместную работу в режиме реального времени с использованием различных инструментов для работы с холстом.
Ожидаемые результаты работы группы:
- Разработка общего базового формата на основе принципов команды.
- Расширение формата для широкого спектра инструментов.
- Возможность синхронизации в реальном времени между несколькими полотнами.
- Создание тестового стенда сродни CSS Acid Tests.
- Предложение по улучшению спецификации JSON Canvas.
Формат встреч будет публичный(?) каждые 2 недели. Для обсуждения идей есть Discord, куда зовут всех заинтересованных.
Что у них выйдет пока не знаем, но вот такая неожиданная коллаборация в, казалось бы, тривиальной вещи как файловый формат для бесконечных холстов удивляет. Будем надеяться, что как минимум это действительно даст нам возможность переносить данные между различными инструментами, чем значительно могут упростить жизнь пользователям.
GitHub
Open Canvas Working Group
Creating an open standard for infinite canvases. Open Canvas Working Group has 8 repositories available. Follow their code on GitHub.
🔥8👍2🤯1