Толстосумы тоже решили подкинуть немножко на
Интересно, сколько денег они потратили на свою заброшенную реализацию?
#jetbrains #webstorm #volar
Volar
.Интересно, сколько денег они потратили на свою заброшенную реализацию?
#jetbrains #webstorm #volar
👍6😁2
Рейтинг фронтенд фреймворков по количеству набранных в 2023 году GitHub звезд
Забавно, что Vue 2 набрал не сильно меньше Vue 3. По общему числу звезд Vue 2 уже отстал от React.
Также интересно, что у Svelte и Vue примерно одинаковое количество звезд каждый месяц (что может коррелировать с вливанием новых разработчиков в фреймворк), но число реальных проектов в коммерческой сфере отличается на порядок (или порядки)
#rating #benchmark #framework
Забавно, что Vue 2 набрал не сильно меньше Vue 3. По общему числу звезд Vue 2 уже отстал от React.
Также интересно, что у Svelte и Vue примерно одинаковое количество звезд каждый месяц (что может коррелировать с вливанием новых разработчиков в фреймворк), но число реальных проектов в коммерческой сфере отличается на порядок (или порядки)
#rating #benchmark #framework
🤔3
Забавный генератор типовой документации произвольного пакета - tsdocs.dev
Наверно написан на Node.js - очень сложно поймать момент, когда сайт не лежит или не перегружен. Но возможно.
#tsdoc #ts #docs
Наверно написан на Node.js - очень сложно поймать момент, когда сайт не лежит или не перегружен. Но возможно.
#tsdoc #ts #docs
tsdocs.dev
TS Docs | Reference docs for npm packages
Generate type documentation for npm libraries
👍2👎1
Использовать <script setup> во Vue 3 можно вместе с обычным блоком <script>
Это работает потому, что блок
Есть несколько причин, по которым вы можете захотеть сделать это:
- Использование Options API - не всё имеет эквивалент в Composition API, например
- Выполнить код один раз - поскольку
- Именованный экспорт - иногда удобно экспортировать несколько объектов из одного файла, но это можно сделать только с помощью обычного блока
#tip
<script setup>
// Composition API
import { ref } from 'vue';
console.log('Setting up new component instance');
const count = ref(0);
</script>
<script>
// ...and the options API too!
export default {
name: 'DoubleScript',
};
</script>
Это работает потому, что блок
<script setup>
компилируется в функцию setup()
компонента.Есть несколько причин, по которым вы можете захотеть сделать это:
- Использование Options API - не всё имеет эквивалент в Composition API, например
inheritAttrs
. Для этого можно использовать defineOptions
.- Выполнить код один раз - поскольку
setup()
выполняется для каждого компонента, если у вас есть код, который должен быть выполнен только один раз, вы не можете включать его в <script setup>
. Однако вы можете поместить его в обычный блок <script>
- Именованный экспорт - иногда удобно экспортировать несколько объектов из одного файла, но это можно сделать только с помощью обычного блока
<script>
.#tip
👍7
Развитие в GitHub звездах Vue экосистемы за 2023 год.
#ecosystem #rating
Vue Element Admin
- китайский продукт на Vue 2.6#ecosystem #rating
🆒1
Документалка, как создавался Vue.js, довольно интересно.
Есть русские субтитры
https://youtu.be/OrxmtDw4pVI
#vuejs #evanyou
Есть русские субтитры
https://youtu.be/OrxmtDw4pVI
#vuejs #evanyou
YouTube
Vue.js: The Documentary
by honeypot.io | What began as a side project of a Google developer
now shares the JS leaderboard with #React and #Angular...
With the help of Sarah Drasner, Taylor Otwell, Thorsten Lünborg and many others from the Vue.js community, Evan You tells the story…
now shares the JS leaderboard with #React and #Angular...
With the help of Sarah Drasner, Taylor Otwell, Thorsten Lünborg and many others from the Vue.js community, Evan You tells the story…
❤6🐳1
Правильная конференция правильных фронтендеров
Смотрим на число спонсоров, делаем выводы
#conference #humor #elysia
Смотрим на число спонсоров, делаем выводы
#conference #humor #elysia
💩11🥴4🦄2
Сегодня опубликован перевод официальной документации
https://vitepress.dev/ru/
Перевод выполнен @dragomano
#vitepress #translation
VitePress
на русский языкhttps://vitepress.dev/ru/
Перевод выполнен @dragomano
#vitepress #translation
👍23
Не так давно
Отметим, как работает эта утилита для просмотра
Это хороший способ создать лёгкое мультиплатформенное приложение с графическим веб интерфейсом, без необходимости засовывать его в
#antfu #eslint
Antony Fu
создал eslint-flat-config-viewer
, который официально теперь часть ESLint 9
- ESlint Config InspectorОтметим, как работает эта утилита для просмотра
ESLint
конфига - запускается небольшой локальный вебсервер, и затем открывается окно с веб-приложением непосредственно утилиты. Так работает немало как встроенных (админки аппаратных роутеров), так и обычных компьютерных программ (Syncthing
, например). Это хороший способ создать лёгкое мультиплатформенное приложение с графическим веб интерфейсом, без необходимости засовывать его в
Electron
. Правда, подходит этот метод больше для продвинутых пользователей.#antfu #eslint
eslint.org
Introducing ESLint Config Inspector - ESLint - Pluggable JavaScript Linter
A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.
👍1
Один из крупнейших облачных хостеров серверных JavaScript приложений Render добавил поддержку
#bun #render
Bun
в добавок к Node.js
#bun #render
Render
Cloud Application Platform | Render
On Render, you can build, deploy, and scale your apps with unparalleled ease – from your first user to your billionth.
👍1
Proxy
- объект, появившийся в JavaScript
начиная с ES6
, и позволяющий сделать над объектом "обертку" для перехвата операций get
, set
, defineProperty
и некоторых других.Именно он используется во
Vue 3 Reactivity API
для реализации Reactive
(и Ref
на объектах).Однако за это приходится платить производительностью. Доступ к свойству объекта через
Proxy
примерно в 30 раз медленней, чем просто к свойству объекта.
let sum = 0
// 1. proxy access
const point = new Proxy({ x: 10, y: 20 }, { get: (t, k) => t[k] })
for (let i = 0; i < 100_000; i++) { sum += point.x }
// 2. direct access
const point = { x: 10, y: 20 }
for (let i = 0; i < 100_000; i++) { sum += point.x }
Это из-за того, что
Proxy
плохо поддаётся JIT оптимизации.Разница в производительности простого объекта с
Reactive
будет еще больше.Поэтому использовать
ref/reactive
на статичных данных или данных, которым не нужна реактивность (например, для хранения JWT токена в сторе) - не очень разумно.#tip #performance #benchmark #proxy #reactive
👍23❤4
Тем временем работа над
По замерам билд с
Также перевел и опубликовал интересный твит создателя
#esbuild #rolldown #vite #article
Rolldown
идет своим чередом.По замерам билд с
sourcemaps
на Rolldown
идёт уже быстрее, чем на esbuild
Также перевел и опубликовал интересный твит создателя
FormKit
Джастина Шрёдера по теме. Кстати, это первая статья о Rolldown
на Хабре.#esbuild #rolldown #vite #article
👍5🔥5
Во всех браузерах кроме Firefox реализован Fetch Priority API
Это атрибут
Это важно в первую очередь для метрик
Учитывая, что ресурсов на странице может быть много, а браузеры выделяют на сетевые соединения около 5 потоков на один домен, то может образоваться очередь, и ваша
Также можно указать
#tip #optimization #webvitals
Это атрибут
fetchpriority
на тэгах img
, script
, link
, который указывает, насколько приоритетен данный ресурс для загрузки.Это важно в первую очередь для метрик
Core Web Vitals
, а именно - LCP
. Если элемент LCP
- картинка, имеет смысл указать ей fetchpriority="high"
.Учитывая, что ресурсов на странице может быть много, а браузеры выделяют на сетевые соединения около 5 потоков на один домен, то может образоваться очередь, и ваша
LCP
картинка появится не сразу.Также можно указать
fetchpriority="low"
для картинок вне области видимости, - в том числе, в слайдере.#tip #optimization #webvitals
web.dev
Optimize resource loading with the Fetch Priority API | Articles | web.dev
The Fetch Priority API indicates the relative priority of resources to the browser. It can enable optimal loading and improve Core Web Vitals.
🔥4
Что такое многопоточность, и что такое асинхронность?
Многопоточность - это когда программист может создать отдельный поток и запустить в нем свой определенный код. Например, можно создать два потока, один в бесконечном цикле выводит в консоль "Поток А", а второй - "Поток В". Эти строки будут чередоваться в выводе. Можно задать приоритеты потокам, и тогда поток в приоритетом 3 будет выводить сообщения в 3 раза чаще, чем поток с приоритетом 1.
Данные два потока должны выполняться одновременно, но это условно. Потому что если потоков 10, а процессор двухядерный с двумя своими потоками на ядро, то чисто физически больше 4 одновременных потоков выполнять нельзя. Поэтому потоки делятся на кусочки кода, и они выполняются по очереди - это называется конкурентностью.
В мире JavaScript cтановиться в одну очередь потоки могут на уровне JS рантайма, OS, CPU. Обычные десктопные приложения (например, IDE) тоже бывают с хорошей поддержкой распараллеливания на многоядерные процессоры - и тогда они используют CPU максимально эффективно, или нагружающие только одно ядро. В последнем случае апгрейд процессора на более современный многоядерный почти ничего не даст, если у старого и нового примерно одна частота.
Асинхронность - это когда есть некая неблокирующая функция, точное время исполнения которой неизвестно. И программист может указать код, который должен выполниться после исполнения данной функции (передать callback). Промисы и
Итак, при асинхронности обычно есть некая пограничная функция, зависящая от внешних обстоятельств (
Таким образом, это абсолютно разные вещи как по целевому назначению, так и по использованию. Асинхронность в JavaScript реализована через callbacks, промисы и
Асинхронность нужна для общения с "внешним миром", включая отрисовку браузером. Многопоточность позволяет выделить ресурсоемкие вычисления (а также сетевые запросы) в отдельные потоки (Web workers), что снижает нагрузку на основной поток, который отвечает и за рендеринг. Это благоприятно сказывается на отзывчивости вашего UI.
(vue-faq.org)
#async #js #threads
Многопоточность - это когда программист может создать отдельный поток и запустить в нем свой определенный код. Например, можно создать два потока, один в бесконечном цикле выводит в консоль "Поток А", а второй - "Поток В". Эти строки будут чередоваться в выводе. Можно задать приоритеты потокам, и тогда поток в приоритетом 3 будет выводить сообщения в 3 раза чаще, чем поток с приоритетом 1.
Данные два потока должны выполняться одновременно, но это условно. Потому что если потоков 10, а процессор двухядерный с двумя своими потоками на ядро, то чисто физически больше 4 одновременных потоков выполнять нельзя. Поэтому потоки делятся на кусочки кода, и они выполняются по очереди - это называется конкурентностью.
В мире JavaScript cтановиться в одну очередь потоки могут на уровне JS рантайма, OS, CPU. Обычные десктопные приложения (например, IDE) тоже бывают с хорошей поддержкой распараллеливания на многоядерные процессоры - и тогда они используют CPU максимально эффективно, или нагружающие только одно ядро. В последнем случае апгрейд процессора на более современный многоядерный почти ничего не даст, если у старого и нового примерно одна частота.
Асинхронность - это когда есть некая неблокирующая функция, точное время исполнения которой неизвестно. И программист может указать код, который должен выполниться после исполнения данной функции (передать callback). Промисы и
async/await
это нетривиальные, но всё же просто удобные обертки над данной логикой.Итак, при асинхронности обычно есть некая пограничная функция, зависящая от внешних обстоятельств (
fetch
, nextTick
, fs.readdir
, setTimeout
). Её "псевдопараллельное" исполнение в одном потоке вместе с основным кодом обеспечивается механизмом Event Loop
.Таким образом, это абсолютно разные вещи как по целевому назначению, так и по использованию. Асинхронность в JavaScript реализована через callbacks, промисы и
async/await
, многопоточность или её подобие реализуется райнтаймом (Web workers
, worker_threads
). Асинхронность нужна для общения с "внешним миром", включая отрисовку браузером. Многопоточность позволяет выделить ресурсоемкие вычисления (а также сетевые запросы) в отдельные потоки (Web workers), что снижает нагрузку на основной поток, который отвечает и за рендеринг. Это благоприятно сказывается на отзывчивости вашего UI.
(vue-faq.org)
#async #js #threads
Vue FAQ
Архитектура фронтэнд приложений | Vue FAQ
Vue FAQ - information about Vue.js and frontend development in general
👍9