Одновременно преимущество и недостаток WebStorm - собственная реализация поддержки языков вместо использования общих LSP, в том числе для TS и Vue. Обычно это позволяло WebStorm иметь больше возможностей по поддержке кода, чем даёт общий LSP.
Но в последнее время с Vue с активно появляющимися новыми фичами это стало проблемой. Особенно с нестандартными для JS/TS возможностями, такими как макросы компиляции и другие возможности SFC setup. В результате поддержка Vue в платном WebStorm часто была хуже, чем в бесплатном VSCode с Volar. Поддержка улучшалась с каждым обновлением, но лишь догоняла Volar.
С 2023.2 EAP WebStorm внедряет поддержку Volar для связки Vue + TS 5+.
Пока фича экспериментальная, но, кажется, может решить проблему отставания WebStorm в поддержке новых фич SFC Setup и связки Vue + TS.
Надеюсь, это и не лишит WebStorm в будущем собственных уникальных фишек.
Блог JetBrains: https://blog.jetbrains.com/webstorm/2023/05/webstorm-2023-2-eap2/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍6🎉5🔥3👏1
Vue 2.7 и Prettier 3
Если вы используете Vue 2.7 и Prettier - не спешите обновляться до Prettier 3.
При компиляции шаблона в дев режиме по умолчанию результат компиляции форматируется Prettier-ом. При этом в
Решения:
1. Отключить форматирование скомпилированного компонента. В параметрах loader-a укажите
2. Пока не обновляться до Prettier 3
Если вы используете Vue 2.7 и Prettier - не спешите обновляться до Prettier 3.
При компиляции шаблона в дев режиме по умолчанию результат компиляции форматируется Prettier-ом. При этом в
@vue/compiler-sfc
в Vue 2.7 не указан Prettier в зависимостях, а совместимости с Prettier 3 нет.Решения:
1. Отключить форматирование скомпилированного компонента. В параметрах loader-a укажите
options: {
prettify: false
}
2. Пока не обновляться до Prettier 3
😱7👍6🤯3😢2🤔1🙏1
Неочевидное поведение в наследовании атрибутов.
Может ли наследование атрибутов не применяться к каким-то обработчикам незадекларированных событий?
Согласно документации Vue, по умолчанию все обработчики событий компонента либо являются собственными событиями компонента (если они описаны в
Да! Событие обновления параметра (
В примере на скриншоте
- Не считается обработчиком события
Ссылки:
- Песочника
- Пруф: runtime-core/src/componentRenderUtils.ts filterModelListeners
Может ли наследование атрибутов не применяться к каким-то обработчикам незадекларированных событий?
Согласно документации Vue, по умолчанию все обработчики событий компонента либо являются собственными событиями компонента (если они описаны в
emits/defineEmits
), либо попадают в $attrs
и наследуются корневым элементом (если наследование не отключено с inheritAttrs
). Но есть ли здесь не задокументированные исключения?Да! Событие обновления параметра (
update:*
) не наследуется, если этот описан пропс вне зависимости от декларирования самого события.В примере на скриншоте
onUpdateBaz
одновременно:- Не считается обработчиком события
Parent
и попадёт в его $attrs
- Не наследуется как атрибут в Child
и не будет вызыван из ребёнкаСсылки:
- Песочника
- Пруф: runtime-core/src/componentRenderUtils.ts filterModelListeners
👍6😱4🔥2🤔1🤯1
Forwarded from Denis Chernov
ТОВАРИЩИ РАДУЕМСЯ. https://github.com/vuejs/core/pull/5912#event-10792474935
мр влили 2x+ прирост перфа в тестах реактивности
отсечение избыточныхз вычислений и прочие радости
мр влили 2x+ прирост перфа в тестах реактивности
отсечение избыточныхз вычислений и прочие радости
GitHub
feat(reactivity): more efficient reactivity system by johnsoncodehk · Pull Request #5912 · vuejs/core
fix #311, fix #1811, fix #6018, fix #7160, fix #8714, fix #9149, fix #9419, fix #9464
Changes
If computed new value does not change, computed, effect, watch, watchEffect, render dependencies will ...
Changes
If computed new value does not change, computed, effect, watch, watchEffect, render dependencies will ...
🔥8👍3😱1🙏1
🚀 Vue 3.4.0-alpha.1
Вышла первая альфа Vue 3.4!
Самые интересные изменения в реактивности:
- 🏎 Упомянутое выше ускорение реактивности
- 🌼 Долгожданный
Полный список изменений: https://github.com/vuejs/core/blob/minor/CHANGELOG.md
Вышла первая альфа Vue 3.4!
Самые интересные изменения в реактивности:
- 🏎 Упомянутое выше ускорение реактивности
- 🌼 Долгожданный
once
в watch
. Теперь можно однократно среагировать на изменение значения без ручного вызова stop
!// beforeТакже улучшили вывод ошибок компиляции шаблона в прод сборке и готовят почку для улучшения типизации в JSX.
const foo = ref(...)
const stop = watch(foo, () => {
// react
stop()
})
// After v3.4
watch(foo, () => {
// react
}, { once: true })
Полный список изменений: https://github.com/vuejs/core/blob/minor/CHANGELOG.md
🔥12🎉4👍3
This media is not supported in your browser
VIEW IN TELEGRAM
Для Vue разрабатываются новые
Источник: https://twitter.com/webfansplz/status/1726977545244152005
vue-devtools
, которые будут предоставлять возможности "похожие на новые Nuxt DevTools 1.0".Источник: https://twitter.com/webfansplz/status/1726977545244152005
🔥9👍5😱2🤔1
Vue 3.4.alpha.2 + alpha.3
Вчера вышло сразу две следующие альфы Vue 3.4.
🧹 Удалён Reactivity Transform (
🫱 Добавлена сокращённая запись директивы
PR: https://github.com/vuejs/core/pull/9451
🕰 Добавлен
Подобно
Это позволяет, например, избежать лишнего вычисления нового значения при иммутабельных изменениях
PR: https://github.com/vuejs/core/pull/9497
👀 Улучшен DX ошибок. Теперь в ошибке в рантайме будет ссылка на страницу ошибок в документации
https://deploy-preview-2515--vuejs.netlify.app/errors/
Полный список изменений: https://github.com/vuejs/core/compare/v3.3.9...v3.4.0-alpha.3
CHANGELOG: https://github.com/vuejs/core/blob/v3.4.0-alpha.3/CHANGELOG.md
Вчера вышло сразу две следующие альфы Vue 3.4.
🧹 Удалён Reactivity Transform (
$ref
сахар), который был deprecated в Vue 3.3🫱 Добавлена сокращённая запись директивы
v-bind
, когда аргумент директивы совпадает со значением (аналогично { shorthand }
в JS объектах ):<input :disabled="disabled" />
<UiInput :model-value="modelValue" />
Теперь можно записывать как
<input :disabled />
<UiInput :model-value />
PR: https://github.com/vuejs/core/pull/9451
🕰 Добавлен
oldValue
для computed
. Подобно
watch
теперь можно получить старое значение вычисляемого свойства при перевычислении.Это позволяет, например, избежать лишнего вычисления нового значения при иммутабельных изменениях
const dataObject = computed((oldValue) => {
const newValue = computeSomeObject()
// Если объект получился с тем же значением - возвращаем старый,
// чтобы не создавать новый объект по новой ссылке
// и не триггерить реактивность лишний раз
return isEqual(newValue, oldValue) ? oldValue : newValue
})
PR: https://github.com/vuejs/core/pull/9497
👀 Улучшен DX ошибок. Теперь в ошибке в рантайме будет ссылка на страницу ошибок в документации
https://deploy-preview-2515--vuejs.netlify.app/errors/
Полный список изменений: https://github.com/vuejs/core/compare/v3.3.9...v3.4.0-alpha.3
CHANGELOG: https://github.com/vuejs/core/blob/v3.4.0-alpha.3/CHANGELOG.md
🔥15👏3😱3🎉3🤔2👍1🙏1
🚀 Vue 3.4.0-beta.1
-
- Появилась поддержка MathML тегов для шаблона
- Добавился тип
- В валидатор пропсов теперь приходят значения других пропсов
-
А также множество фиксов и улучшений для SSR и Suspense и других изменений.
Полный CHANGELOG: https://github.com/vuejs/core/blob/v3.4.0-beta.1/CHANGELOG.md
-
defineModel
макрос больше не экспериментальный, а его производительность улучшена- Появилась поддержка MathML тегов для шаблона
- Добавился тип
ComponentInstance
, позволяющий из типа описания компонента получить тип экземпляра компонента- В валидатор пропсов теперь приходят значения других пропсов
color: {
type: String,
validator: (value, props) =>
props.format === 'hex'
? HEX_RE.test(value)
: RGB_RE.test(value)
},
-
defineSlots
теперь поддерживает keyof
от generic компонентов. Это позволяет описывать тип слотов в зависимости от типа пропсов, например, для типизации универсальной таблицы<script lang="ts" setup generic="TRow extends Record<string, unknown>">
const props = defineProps<{
rows: TRow[] // тип объекта для каждой строки - из дженерика
cols: { name: keyof TRow; label: string }[]
}>()
const slots = defineSlots<{
// Тип слота для заголовкой каждой ячейки
[K in keyof TRow as `header:${K & string}`]: (props: {
col: { name: keyof TRow; label: string }
}) => any[]
}>()
</script>
А также множество фиксов и улучшений для SSR и Suspense и других изменений.
Полный CHANGELOG: https://github.com/vuejs/core/blob/v3.4.0-beta.1/CHANGELOG.md
🔥12👍3🎉3🤯2👏1😱1
Forwarded from Denis Chernov
https://github.com/vuejs/vue/blob/main/CHANGELOG.md
Финальный релиз для Vue2 2,7,16 с грустным именем: Swan Song
В релизе нет новых фичей, лишь последний набор правки багов
А 31 декабря мы попрощаемся с официальным EOL для Vue2 (Хотя есть компания которая продолжит выпускать Security-патчи, так что все не так плохо)
Кто-то останется до конца на 2ке
Для кого-то станет мотивацией уйти на 3ку
А кто-то попращается с экосистемой Vue
Press V to pay respect
Финальный релиз для Vue2 2,7,16 с грустным именем: Swan Song
В релизе нет новых фичей, лишь последний набор правки багов
А 31 декабря мы попрощаемся с официальным EOL для Vue2 (Хотя есть компания которая продолжит выпускать Security-патчи, так что все не так плохо)
Кто-то останется до конца на 2ке
Для кого-то станет мотивацией уйти на 3ку
А кто-то попращается с экосистемой Vue
Press V to pay respect
GitHub
vue/CHANGELOG.md at main · vuejs/vue
This is the repo for Vue 2. For Vue 3, go to https://github.com/vuejs/core - vuejs/vue
👍3
В документации Vue появился глоссарий.
Может помочь как в изучении фреймворка при работе с незнакомыми терминами, так и разработчикам говорить на одном языке при упоминании термина.
https://vuejs.org/glossary/
Спасибо @mattersj за ссылочку.
Может помочь как в изучении фреймворка при работе с незнакомыми терминами, так и разработчикам говорить на одном языке при упоминании термина.
https://vuejs.org/glossary/
Спасибо @mattersj за ссылочку.
vuejs.org
Vue.js
Vue.js - The Progressive JavaScript Framework
🔥8❤3😱2👍1🤔1
🚀 Релиз Vue 3.4.0 Slam Dunk
Относительно
Добавления и значимые улучшения
🏎 Ускорение реактивности PR#5912, включающее в себя множество оптимизаций. Например, ранее
🌼 Долгожданный
🫱 Добавлена сокращённая запись директивы
🕰 Добавлен
Подобно
Это позволяет, например, избежать лишнего вычисления нового значения при иммутабельных изменениях
-
∫ Появилась поддержка MathML тегов для шаблона
🛡 В валидатор пропсов теперь приходят значения других пропсов
А также улучшения для TS
Добавился тип
Удалены `deprecated`:
🧹 Reactivity Transform (
🧹 Директива
🧹
🧹 Старые события жизненного цикла компонента
Прочее:
- Улучшение вывода ошибок компиляции шаблона в проде
- Улучшение типизации, включая JSX
- Множество багфиксов в SSR и гидратации
- Багфиксы
Подробности в блоге: https://blog.vuejs.org/posts/vue-3-4
Changelog: https://github.com/vuejs/core/blob/main/CHANGELOG.md#340-slam-dunk-2023-12-29
Относительно
beta
и rc
релизов ничего нового, так что вспомним обо всех значимых изменениях в них.Добавления и значимые улучшения
🏎 Ускорение реактивности PR#5912, включающее в себя множество оптимизаций. Например, ранее
computed
не был зависимостью как самостоятельное значение, использующий его эффект зависел от его вычисления. Теперь перевычисление computed
с тем же результатом не будет триггерить использующие его эффекты.🌼 Долгожданный
once
в watch
. Теперь можно однократно среагировать на изменение значения без ручного вызова stop
!// before
const foo = ref(...)
const stop = watch(foo, () => {
// react
stop()
})
// After v3.4
watch(foo, () => {
// react
}, { once: true })
🫱 Добавлена сокращённая запись директивы
v-bind
, когда аргумент директивы совпадает со значением (аналогично { shorthand }
в JS объектах ):<input :disabled="disabled" />
<UiInput :model-value="modelValue" />
Теперь можно записывать как
<input :disabled />
<UiInput :model-value />
🕰 Добавлен
oldValue
для computed
. Подобно
watch
теперь можно получить старое значение вычисляемого свойства при перевычислении.Это позволяет, например, избежать лишнего вычисления нового значения при иммутабельных изменениях
const dataObject = computed((oldValue) => {
const newValue = computeSomeObject()
// Если объект получился с тем же значением - возвращаем старый,
// чтобы не создавать новый объект по новой ссылке
// и не триггерить реактивность лишний раз
return isEqual(newValue, oldValue) ? oldValue : newValue
})
-
defineModel
макрос больше не экспериментальный, а его производительность улучшенаconst modelValue = defineModel()
// Заменяет (но эффективнее)
const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])
const modelValue = computed({
get: () => props.modelValue,
set: (value) => emit('update:modelValue', value),
})
∫ Появилась поддержка MathML тегов для шаблона
🛡 В валидатор пропсов теперь приходят значения других пропсов
color: {
type: String,
validator: (value, props) =>
props.format === 'hex'
? HEX_RE.test(value)
: RGB_RE.test(value)
},
А также улучшения для TS
Добавился тип
ComponentInstance
, позволяющий из типа описания компонента получить тип экземпляра компонентаdefineSlots
теперь поддерживает keyof
от generic компонентов. Это позволяет описывать тип слотов в зависимости от типа пропсов, например, для типизации универсальной таблицы<script lang="ts" setup generic="TRow extends Record<string, unknown>">
const props = defineProps<{
rows: TRow[] // тип объекта для каждой строки - из дженерика
cols: { name: keyof TRow; label: string }[]
}>()
const slots = defineSlots<{
// Тип слота для заголовкой каждой ячейки
[K in keyof TRow as `header:${K & string}`]: (props: {
col: { name: keyof TRow; label: string }
}) => any[]
}>()
</script>
Удалены `deprecated`:
🧹 Reactivity Transform (
$ref
сахар), который был deprecated
в Vue 3.3. Много горячих обсуждений было о разных вариантах его внедрения.🧹 Директива
v-is
, вместо которой используется специальный атрибут is🧹
app.config.unwrapInjectedRef
, который включен по умолчанию с 3.3🧹 Старые события жизненного цикла компонента
@vnodeXXX
, вместо которых есть @vue:xxx
Прочее:
- Улучшение вывода ошибок компиляции шаблона в проде
- Улучшение типизации, включая JSX
- Множество багфиксов в SSR и гидратации
- Багфиксы
Suspense
Подробности в блоге: https://blog.vuejs.org/posts/vue-3-4
Changelog: https://github.com/vuejs/core/blob/main/CHANGELOG.md#340-slam-dunk-2023-12-29
blog.vuejs.org
Announcing Vue 3.4 | The Vue Point
The official blog for the Vue.js project
🔥10❤5🎉4😱3👍2
🤕 Vue 3.4.0 вышел в релиз только 2 недели назад, но за ним уже последовало 9 патчей, а на этой неделе патчи буквально каждый день. Иногда в них откатывают изменения. Пофикшено много багов с
Если используете Vue 3 в проде, где критичны ошибки, или не хотите разбираться, вылезхает ли у вас ошибка из-за бага в Vue или вашего бага - возможно, стоит не обновляться на 3.4 пока он не стабилизируется, и хотя бы несколько недель не будет новых патчей и активного появления новых issue.
FULL CHANGELOG
SSR
, suspense
, compiler-sfc
, а также несколько багов нового defineModel
, новой реализации реактивности, включая производительность, и другие.Если используете Vue 3 в проде, где критичны ошибки, или не хотите разбираться, вылезхает ли у вас ошибка из-за бага в Vue или вашего бага - возможно, стоит не обновляться на 3.4 пока он не стабилизируется, и хотя бы несколько недель не будет новых патчей и активного появления новых issue.
FULL CHANGELOG
😢5👍2😱2❤1🤔1🤯1🤬1🥴1
Ещё одна интересная статья об опыте миграции на Vitest.
❤1🔥1🤔1
Forwarded from Валя читает ишью
Vitest: 9 месяцев спустя
Напомню, мы в Авиасейлс переехали с Jest на Vitest и были (ну, я уж точно) не очень довольны результатом. Прошло 9 месяцев, вышла Vitest 1.0 (а актуальная версия уже и 1.2.1) и мы научились с ним как-то жить.
Во-первых, я оказался прав на счёт шардирования. В синтетических тестах (только vitest в пайплайне, это существенно ускоряет тесты) используя 12 тредов, тесты проходили за ~3 минуты. 4 шарда по 3 треда в каждом (с меньшим количеством тредов тесты начинали зависать) мы укладываемся в ~2 минуты. Сайд-эффект шардов — теперь у нас 4 разных отчёта, а не один единый. Неудобно. Команда Vitest открыта к blob репортерам, как в playwright. Их можно склеить после и получить единый отчёт. Осталось написать ишью и реализовать, хех.
Касательно перформанса тредов вот моё ишью — The performance of threads doesn't scale much after 8 threads.
Во-вторых, нам удалось стабилизировать тесты и избавиться от залипаний и случайных падений. С тех пор мы обновились до node v18.19.0 и vitest v1.1.3, удалили любые исключения из poolMatchGlobs и используем threads пул (стандартный и не самый быстрый).
В-третьих, нестабильность витеста породила особенный подход обновлению его самого и ноды. Мы запускаем 100+ пайплайнов по крону, смотрим fail rate и принимаем решение об обновлении или включении каких-то опций. Как я сказал выше, на v1.1.3 нам удалось добиться 100% стабильности, но вот уже с v1.2.1 (latest) один из тестов начинает отваливаться в трети случаев.
В-четвёртых, я был не особо прав, когда сравнивал типы пулов. С тех пор в витесте появился пул vmThreads, который полностью копирует подход из джеста. Он действительно быстрее (в нашем случае срезает ~30 секунд), но менее стабильный и течёт по памяти (как и джест).
В общем, кажется мы научились его готовить, но иногда процесс готовки становится, прямо скажем, неприятным.
Напомню, мы в Авиасейлс переехали с Jest на Vitest и были (ну, я уж точно) не очень довольны результатом. Прошло 9 месяцев, вышла Vitest 1.0 (а актуальная версия уже и 1.2.1) и мы научились с ним как-то жить.
Во-первых, я оказался прав на счёт шардирования. В синтетических тестах (только vitest в пайплайне, это существенно ускоряет тесты) используя 12 тредов, тесты проходили за ~3 минуты. 4 шарда по 3 треда в каждом (с меньшим количеством тредов тесты начинали зависать) мы укладываемся в ~2 минуты. Сайд-эффект шардов — теперь у нас 4 разных отчёта, а не один единый. Неудобно. Команда Vitest открыта к blob репортерам, как в playwright. Их можно склеить после и получить единый отчёт. Осталось написать ишью и реализовать, хех.
Касательно перформанса тредов вот моё ишью — The performance of threads doesn't scale much after 8 threads.
Во-вторых, нам удалось стабилизировать тесты и избавиться от залипаний и случайных падений. С тех пор мы обновились до node v18.19.0 и vitest v1.1.3, удалили любые исключения из poolMatchGlobs и используем threads пул (стандартный и не самый быстрый).
В-третьих, нестабильность витеста породила особенный подход обновлению его самого и ноды. Мы запускаем 100+ пайплайнов по крону, смотрим fail rate и принимаем решение об обновлении или включении каких-то опций. Как я сказал выше, на v1.1.3 нам удалось добиться 100% стабильности, но вот уже с v1.2.1 (latest) один из тестов начинает отваливаться в трети случаев.
В-четвёртых, я был не особо прав, когда сравнивал типы пулов. С тех пор в витесте появился пул vmThreads, который полностью копирует подход из джеста. Он действительно быстрее (в нашем случае срезает ~30 секунд), но менее стабильный и течёт по памяти (как и джест).
В общем, кажется мы научились его готовить, но иногда процесс готовки становится, прямо скажем, неприятным.
👍1😱1
Forwarded from Vue-FAQ
Vue.js Nation конференция началась с часовой рекламы курсов и сертификаций (скоро появится по Nuxt и JS)
Затем Evan You отвечал на вопросы ведущей:
- Поддержка TypeScript во Vue 3 нормальная
- В феврале будет Vuenniversary - 10 лет Vue
- В 3.5 и 3.6 изменения будут небольшие, типа сomponent types и uuid для SSR
- Во второй половине года объявит о чем-то интересном (exciting)
- Если Signals будут стандартизованы, то Vue может использовать это
- Elk (клиент Mastodon) - пример крутого нетривиального приложения на Vue (Nuxt)
- Vueукрал был вдохновлен разными моментами в Angular 1, React, Knockout, Svelte
- Options API убирать не собираются
- Evan сомневается, что React идет куда-то туда с RSC
- Объяснил, почему не рекомендуется мутировать пропс-объект (не так явно видно, кто и как его меняет)
- VitePress 1.0.0 готов, но в конце декабря они погрязли в другой работе и не релизнулись. Скоро выпустят с фанфарами.
- AI сильно фронтенд не изменит в ближайшем времени. Пока это просто помощник
#evanyou #vuejsnation
Затем Evan You отвечал на вопросы ведущей:
- Поддержка TypeScript во Vue 3 нормальная
- В феврале будет Vuenniversary - 10 лет Vue
- В 3.5 и 3.6 изменения будут небольшие, типа сomponent types и uuid для SSR
- Во второй половине года объявит о чем-то интересном (exciting)
- Если Signals будут стандартизованы, то Vue может использовать это
- Elk (клиент Mastodon) - пример крутого нетривиального приложения на Vue (Nuxt)
- Vue
- Options API убирать не собираются
- Evan сомневается, что React идет куда-то туда с RSC
- Объяснил, почему не рекомендуется мутировать пропс-объект (не так явно видно, кто и как его меняет)
- VitePress 1.0.0 готов, но в конце декабря они погрязли в другой работе и не релизнулись. Скоро выпустят с фанфарами.
- AI сильно фронтенд не изменит в ближайшем времени. Пока это просто помощник
#evanyou #vuejsnation
👍7😁2🤔1
Forwarded from artalog (artalar)
Зачем реатом во vue?
У нас там апдейты подъехали, стоит рассказать о мотивации.
Во вью из коробки идут простые и достаточно мощные примитивы для обработки состояния, рефы можно создавать вне компонента и большая часть задач этим решается. Но есть ряд вопросов, которые реатом покрывает лучше.
- Реатом лучше позволяет описывать логику полностью отделенную от компонента, которую потом еще и легче дебажить. Проявляется это в наличии лайфсайкл хуков у каждого атома (можно инициировать ресурс на первую подписку - использование в компоненте, и уничтожить ресурс при последней отписке) и выделенной сущности “экшен”, для удобного разделения кода на логические блоки. Т.к. все эти сущности именованны (автоматически еслинтом), в последствии можно наблюдать полезные логи того что поменялось и по какой причине (уникальная фича реатома).
- За счет первого пункта реатом можно использовать как ядро микрофронтовой системы, у нас уже есть адаптеры для vue, react, solid, svelte, и в разработке адаптеры для lit и angular.
- У реатома есть очень мощные примитивы для описания асинхронной логики, собравшие все самое лучшее с rxjs, redux-saga и TanStack Query. Тут впринципе альтернатив, вроде, нет.
- У реатома одна из самых больших экосистем среди всех стейт менеджеров и, посмею сказать, самая сбалансированная. При этом, каждый пакет разрабатывается с маниакальным фокусом на бандлсайзе и перфе.
Если стало интересно, вот видосики по реатому: https://www.youtube.com/playlist?list=PLXObawgXpIfxERCN8Lqd89wdsXeUHm9XU
У нас там апдейты подъехали, стоит рассказать о мотивации.
Во вью из коробки идут простые и достаточно мощные примитивы для обработки состояния, рефы можно создавать вне компонента и большая часть задач этим решается. Но есть ряд вопросов, которые реатом покрывает лучше.
- Реатом лучше позволяет описывать логику полностью отделенную от компонента, которую потом еще и легче дебажить. Проявляется это в наличии лайфсайкл хуков у каждого атома (можно инициировать ресурс на первую подписку - использование в компоненте, и уничтожить ресурс при последней отписке) и выделенной сущности “экшен”, для удобного разделения кода на логические блоки. Т.к. все эти сущности именованны (автоматически еслинтом), в последствии можно наблюдать полезные логи того что поменялось и по какой причине (уникальная фича реатома).
- За счет первого пункта реатом можно использовать как ядро микрофронтовой системы, у нас уже есть адаптеры для vue, react, solid, svelte, и в разработке адаптеры для lit и angular.
- У реатома есть очень мощные примитивы для описания асинхронной логики, собравшие все самое лучшее с rxjs, redux-saga и TanStack Query. Тут впринципе альтернатив, вроде, нет.
- У реатома одна из самых больших экосистем среди всех стейт менеджеров и, посмею сказать, самая сбалансированная. При этом, каждый пакет разрабатывается с маниакальным фокусом на бандлсайзе и перфе.
Если стало интересно, вот видосики по реатому: https://www.youtube.com/playlist?list=PLXObawgXpIfxERCN8Lqd89wdsXeUHm9XU
Telegram
Reatom новости
🔥Huge drop🔥
@reatom/persist-web-storage - @osovv добавил withBroadcastChannel для синхронизации табов без лишнего оверхеда на хранение стейта и withIndexedDb для персиста большого объема данных (рекомендуется для reatom/async.withCache)
@reatom/npm-vue …
@reatom/persist-web-storage - @osovv добавил withBroadcastChannel для синхронизации табов без лишнего оверхеда на хранение стейта и withIndexedDb для персиста большого объема данных (рекомендуется для reatom/async.withCache)
@reatom/npm-vue …
👍5🤔1
Forwarded from Denis Chernov
vue-vapor обзавелся своим плейграундом.
Для тех кто не знает что это:
На данный момент Vue используем механизм VDOM (виртуальный DOM), но у него есть свои недостатки: избыточность по памяти, непрямое изменение и тд
Так вот Vapor это вдохновленный Solid-ом подход к механизму рендеринга без использования VDOM. Все происходит чисто на работе реактивности и счедуллингу эффектов. Более подробно можно ознакомиться тут
Мы можем вполне оценить то что уже сделано в плейграунде:
https://vapor-repl.netlify.app
выглядит действительно многообещающе
Для того, чтобы увидеть результат работы заходим во вкладку: JS / SSR
там можно обратить внимание как меняется результат билда между vapor режимом и обыкновенным (кликаем VAPOR ON/OFF в правой части шапки плейграунда)
На что я обратил внимание:
1) более агрессивно берется все из контекста рендеринга (например, Array сейчас будет браться из _ctx.Array). В исходники не заглядывал, но возможно исправят
2) Часть функционала ожидаемо нереализована (ее можно посмотреть на чеклисте репозитория )
3) Багов хватает :D Любая попытка потестить перф выходила каким-то багом
В целом решение пока сыроватое и прям сильно его не оценить. Но первые шаги уже видны явно, а не на словах
Для тех кто не знает что это:
На данный момент Vue используем механизм VDOM (виртуальный DOM), но у него есть свои недостатки: избыточность по памяти, непрямое изменение и тд
Так вот Vapor это вдохновленный Solid-ом подход к механизму рендеринга без использования VDOM. Все происходит чисто на работе реактивности и счедуллингу эффектов. Более подробно можно ознакомиться тут
Мы можем вполне оценить то что уже сделано в плейграунде:
https://vapor-repl.netlify.app
выглядит действительно многообещающе
Для того, чтобы увидеть результат работы заходим во вкладку: JS / SSR
там можно обратить внимание как меняется результат билда между vapor режимом и обыкновенным (кликаем VAPOR ON/OFF в правой части шапки плейграунда)
На что я обратил внимание:
1) более агрессивно берется все из контекста рендеринга (например, Array сейчас будет браться из _ctx.Array). В исходники не заглядывал, но возможно исправят
2) Часть функционала ожидаемо нереализована (ее можно посмотреть на чеклисте репозитория )
3) Багов хватает :D Любая попытка потестить перф выходила каким-то багом
В целом решение пока сыроватое и прям сильно его не оценить. Но первые шаги уже видны явно, а не на словах
GitHub
GitHub - vuejs/core-vapor: Vue Vapor is a variant of Vue that offers rendering without the Virtual DOM.
Vue Vapor is a variant of Vue that offers rendering without the Virtual DOM. - vuejs/core-vapor
🤔6🔥3👍2❤1
Forwarded from Denis Chernov
Ого какая новость пролетела мимо:
Vue опять нехило импрувнули перф реактивности (в этот раз поменяли структуры данных используемые внутри системы реактивности на манер сигналов Preact)
Это дало перф:
- на ~56% уменьшено потребление памяти системой реактивности 🤯
- случай когда 1 реф вызыввает несколько эффектов (+118%-185% прирост производительности)
- чтение множества invalidated computed-ов (+176%+244% прирост производительности)
Дополнительно:
- Обнова обещает никак не афектить поведение и вся реализация прячется лишь в @vue/reactivity
- Закрывает некоторые специфичные баги/корнер-кейсы для системы реактивности
- Компьютеды стали гораздо дешевле и теперь еще более ленивые
- теперь если компьютед не имеет подписчиков на него то он сбрасывает все свои зависимости
- компьютед теперь в целом не может иметь зависимостей если от него никто не зависит
- Противный варнинг из 3.4.19 о грязных компьютедах удален!
- Обещают что сборка мусора в режиме SSR будет работать лучше (как это будет аффектить в реальности пока неизвестно)
Для любителей копаться в тонкостях:
- Больше никакого ручного счедуллинга:
- pauseScheduling, pauseTracking, resetScheduling больше недоступны (впрочем они и не были задокументированной возможностью)
- теперь зависимости в deps это не Map/Set а самостоятельная структура Dep с версионированием и на базе двусвязанного списка
- код стал читаться как-то проще :D
- еще не копался на в Dev режиме включили какой-то трекинг по типу действия сигнала и как его трекают
Обновление попало в минорную ветку, так что пока неизвестно когда оно попадет в наши приложения. Однако остается только порадоваться, как много сил было вложено в последнее время в повышение перфа во Vue за последние месяцы
Vue опять нехило импрувнули перф реактивности (в этот раз поменяли структуры данных используемые внутри системы реактивности на манер сигналов Preact)
Это дало перф:
- на ~56% уменьшено потребление памяти системой реактивности 🤯
- случай когда 1 реф вызыввает несколько эффектов (+118%-185% прирост производительности)
- чтение множества invalidated computed-ов (+176%+244% прирост производительности)
Дополнительно:
- Обнова обещает никак не афектить поведение и вся реализация прячется лишь в @vue/reactivity
- Закрывает некоторые специфичные баги/корнер-кейсы для системы реактивности
- Компьютеды стали гораздо дешевле и теперь еще более ленивые
- теперь если компьютед не имеет подписчиков на него то он сбрасывает все свои зависимости
- компьютед теперь в целом не может иметь зависимостей если от него никто не зависит
- Противный варнинг из 3.4.19 о грязных компьютедах удален!
- Обещают что сборка мусора в режиме SSR будет работать лучше (как это будет аффектить в реальности пока неизвестно)
Для любителей копаться в тонкостях:
- Больше никакого ручного счедуллинга:
- pauseScheduling, pauseTracking, resetScheduling больше недоступны (впрочем они и не были задокументированной возможностью)
- теперь зависимости в deps это не Map/Set а самостоятельная структура Dep с версионированием и на базе двусвязанного списка
- код стал читаться как-то проще :D
- еще не копался на в Dev режиме включили какой-то трекинг по типу действия сигнала и как его трекают
Обновление попало в минорную ветку, так что пока неизвестно когда оно попадет в наши приложения. Однако остается только порадоваться, как много сил было вложено в последнее время в повышение перфа во Vue за последние месяцы
GitHub
Refactor reactivity system to use version counting and doubly-linked list tracking by yyx990803 · Pull Request #10397 · vuejs/core
This PR refactors the core reactivity system to use version counting and a doubly-linked list data structure inspired by Preact signals.
It brings some improvements and solves some issues around co...
It brings some improvements and solves some issues around co...
👍4❤3🔥1
Forwarded from Denis Chernov
Такс ребятушки. Новый исторический момент в мире Vue.js: Vue language tools v2
- Что это такое и как оно нас касается?
не так давно вы могли слышать о обнове Volar.js. Если нет, то не страшно. Команда Vue очень заточена под улучшения экосистемы целиком, а не только Vue-разработчиков. Поэтому Джонсон (которого вы можете знать по тем самым обновлениям с перфом реактивности во Vue3) закорешился с мейнтенейром Astro и мейнтейнером MDX. Что этих крутышей связывает? Им нужно встраивать несколько языков в рамках одного файла и поддерживать при этом высокий DX. На самом деле это задача не из простых. И во Vue это проявлялось в VSC тем, что был злополучный Takeover Mode. Это особый режим который перекрывает плагин TS и вынуждал нас включать 2 плагина и отключать родной от TS.
Конечно все это пугало новичков. Но полтора месяца назад было объявляено, что эту проблему смогли побороть в рамках Volar 2. Теперь плагин использует возможности самого lsp от TS и не требует перекрытия плагином. С этого момента я оч ждал обновы language-tools.
https://github.com/vuejs/language-tools/releases/tag/v2.0.0
И вот час назад этот релиз вышел:
БОЛЬШЕ НИКАКОГО TAKEOVER MODE
+ к этому
- мы получаем родные для TS преобразования от TS плагина
- правит множество багов связанных с интеграцией и кастомным языком для VSC
- Больше нет плагина Volar - так как это более глобальный проект о фреймворке для поддержания авторов фреймворков. Теперь плагин это "Vue - Official"
- можете смело удалять расширение "TypeScript Vue Plugin"
Как это отразится на пользователях JetBrains? Пока сказать сложно, но буквально недавно была конференция у брейнсов, где скорее всего эту тему поднимали. Очень хочется верить, что это отразится на DX в IDE у JetBrains, так как они уже почти год переехали на Vue language server
PS. Вышло всего час назад, так что вполне возможны баги :D
PPS. Багов выше крыши. Советую переждать недельку!
- Что это такое и как оно нас касается?
не так давно вы могли слышать о обнове Volar.js. Если нет, то не страшно. Команда Vue очень заточена под улучшения экосистемы целиком, а не только Vue-разработчиков. Поэтому Джонсон (которого вы можете знать по тем самым обновлениям с перфом реактивности во Vue3) закорешился с мейнтенейром Astro и мейнтейнером MDX. Что этих крутышей связывает? Им нужно встраивать несколько языков в рамках одного файла и поддерживать при этом высокий DX. На самом деле это задача не из простых. И во Vue это проявлялось в VSC тем, что был злополучный Takeover Mode. Это особый режим который перекрывает плагин TS и вынуждал нас включать 2 плагина и отключать родной от TS.
Конечно все это пугало новичков. Но полтора месяца назад было объявляено, что эту проблему смогли побороть в рамках Volar 2. Теперь плагин использует возможности самого lsp от TS и не требует перекрытия плагином. С этого момента я оч ждал обновы language-tools.
https://github.com/vuejs/language-tools/releases/tag/v2.0.0
И вот час назад этот релиз вышел:
БОЛЬШЕ НИКАКОГО TAKEOVER MODE
+ к этому
- мы получаем родные для TS преобразования от TS плагина
- правит множество багов связанных с интеграцией и кастомным языком для VSC
- Больше нет плагина Volar - так как это более глобальный проект о фреймворке для поддержания авторов фреймворков. Теперь плагин это "Vue - Official"
- можете смело удалять расширение "TypeScript Vue Plugin"
Как это отразится на пользователях JetBrains? Пока сказать сложно, но буквально недавно была конференция у брейнсов, где скорее всего эту тему поднимали. Очень хочется верить, что это отразится на DX в IDE у JetBrains, так как они уже почти год переехали на Vue language server
PS. Вышло всего час назад, так что вполне возможны баги :D
PPS. Багов выше крыши. Советую переждать недельку!
GitHub
Release v2.0.0 · vuejs/language-tools
New Features
Hybrid Mode
Takeover Mode has been deprecated. The extension now has the same performance as Takeover Mode by default.
TypeScript language support has been moved from Vue language se...
Hybrid Mode
Takeover Mode has been deprecated. The extension now has the same performance as Takeover Mode by default.
TypeScript language support has been moved from Vue language se...
❤6👍4
Документация Vue наконец получила долгожданный обновленный перевод на русский язык, который теперь доступен по ссылке ниже, а также в шапке основной англоязычной версии в блоке переводов:
https://ru.vuejs.org/
До этого на русском языке была доступна только устаревшая документация, написанная практически сразу после первоначального релиза Vue 3, но с тех пор многое изменилось, поэтому теперь рекомендуется читать именно обновленную документацию.
Переведены все основные разделы, но в документации все еще есть ошибки и неточности, например, на странице “Component v-model” описана работа функции
Если вы встретили ошибку/опечатку/неточность, о которой еще не написано в issues - можно создать его, либо исправить самому, прислав Pull Request.
Спасибо всем, кто помогал и принимал участие в переводе!
https://ru.vuejs.org/
До этого на русском языке была доступна только устаревшая документация, написанная практически сразу после первоначального релиза Vue 3, но с тех пор многое изменилось, поэтому теперь рекомендуется читать именно обновленную документацию.
Переведены все основные разделы, но в документации все еще есть ошибки и неточности, например, на странице “Component v-model” описана работа функции
toValue
.Если вы встретили ошибку/опечатку/неточность, о которой еще не написано в issues - можно создать его, либо исправить самому, прислав Pull Request.
Спасибо всем, кто помогал и принимал участие в переводе!
ru.vuejs.org
Vue.js
Vue.js - The Progressive JavaScript Framework
🔥32❤6👍4🎉3🙏1
Через пол часа начинается митап от MSK Vue.js
Смотреть онлайн трансляцию можно по ссылке: https://youtube.com/live/7SWzCjDPtoQ
Смотреть онлайн трансляцию можно по ссылке: https://youtube.com/live/7SWzCjDPtoQ
YouTube
Meetup #12
🔥6❤4🌚1