Как фронтенд фреймворки себя позиционируют (на своих главных страницах):
Реакт - это библиотека
Vue - прогрессивный
Nuxt - интуитивный
Svelte - кибернетически усовершенствованный
Solidjs - простой и производительный
Angular - дающий уверенность
$mol - микромодульный
Meteor.js - не требующий борьбы с собой
jQuery - многофункциональная библиотека
Qwik - создавайте приложения мгновенно
Ember.js - для амбициозных вебразработчиков
Alpine.js - новый, лёгкий фреймворк
Реакт - это библиотека
Vue - прогрессивный
Nuxt - интуитивный
Svelte - кибернетически усовершенствованный
Solidjs - простой и производительный
Angular - дающий уверенность
$mol - микромодульный
Meteor.js - не требующий борьбы с собой
jQuery - многофункциональная библиотека
Qwik - создавайте приложения мгновенно
Ember.js - для амбициозных вебразработчиков
Alpine.js - новый, лёгкий фреймворк
Работа с шрифтами
Сайт fontsource.org позволяет установить как npm пакет множество open-source шрифтов, в том числе с Google fonts.
Шрифты интегрируются в бандл, что имеет свои плюсы и минусы.
#fonts #lib
Сайт fontsource.org позволяет установить как npm пакет множество open-source шрифтов, в том числе с Google fonts.
Шрифты интегрируются в бандл, что имеет свои плюсы и минусы.
npm install @fontsource-variable/inter
import { createApp } from "vue";
import '@fontsource-variable/inter';
import App from "./App.vue";
...
#fonts #lib
fontsource.org
Download and self-host 1500+ open-source fonts in neatly bundled NPM packages. Access a comprehensive library of web typefaces for free.
Хорошие бесплатные наборы иконок в SVG формате
- icones.js.org
- iconbuddy.app (есть ограничение на скачивание)
- svgl.app - бренды
- flaticon.com - не все бесплатно, большой поиск
- pictogrammers.com - Material Design
#icons #lib
- icones.js.org
- iconbuddy.app (есть ограничение на скачивание)
- svgl.app - бренды
- flaticon.com - не все бесплатно, большой поиск
- pictogrammers.com - Material Design
#icons #lib
Iconbuddy
Iconbuddy - Search Engine for Open Source SVG Icons
Search, customize, and download from 250,000+ open source SVG icons.
Вышла вторая редакция проекта PLB (Programming Language Benchmark) по тестированию производительности решения типовых задач на различных языках программирования
В ней измеряется производительность кода для умножения матриц и решения задачи расстановки 15-ферзей, а также дополнительно оценивает поиск решений в игре Судоку и определение пересечений двух массивов.
Как видно, все языки программирования находятся примерно на одном уровне, за исключением Elixir, PHP, Perl, Python:CPython и Ruby.
Bun не показывает чудес по отношению к Node.js+JIT
В реальных задачах данная производительность обычно играет глубоко второстепенную роль после DX (удобства работы с языком), задержек в работе с UI, сетью, базой данных и прочих накладных расходов.
#benchmark
В ней измеряется производительность кода для умножения матриц и решения задачи расстановки 15-ферзей, а также дополнительно оценивает поиск решений в игре Судоку и определение пересечений двух массивов.
Как видно, все языки программирования находятся примерно на одном уровне, за исключением Elixir, PHP, Perl, Python:CPython и Ruby.
Bun не показывает чудес по отношению к Node.js+JIT
В реальных задачах данная производительность обычно играет глубоко второстепенную роль после DX (удобства работы с языком), задержек в работе с UI, сетью, базой данных и прочих накладных расходов.
#benchmark
На просторах Рунета обнаружился еще один сайт, посвященный бесплатному обучению программированию на Vue:
https://vib-online.ru/
Автор выкладывает материал в виде глав учебника
К сайту прилагается Telegram канал: "Fronend для взрослых"
#learning #vib
https://vib-online.ru/
Автор выкладывает материал в виде глав учебника
К сайту прилагается Telegram канал: "Fronend для взрослых"
#learning #vib
Пара неочевидных вариантов работы с Reactivity API
Типа, стор:
То же, с рефом:
Типа, стор:
const counter = reactive({
count: 0,
increment() {
this.count += 1;
},
decrement() {
this.count -= 1;
},
});
То же, с рефом:
const counter = reactive({
count: ref(0),
increment() {
this.count.value += 1;
},
decrement() {
this.count.value -= 1;
},
});
`defineModel` модификаторы
Также возможна типизация модификатора:
Пример в песочнице
#tip
defineModel
может применяться с модификаторами, например:const [count, countModifiers] = defineModel({
set(value) {
if (countModifiers?.number) {
return Number(value);
}
return value;
}
});
// true if the .number modifier is used
console.log(countModifiers?.number);
Также возможна типизация модификатора:
defineModel<number, 'number'>({ ... })
- второй аргумент - тип модификатораПример в песочнице
#tip
Какими приложениями для заметок / баз знаний вы пользуетесь?
Anonymous Poll
2%
Nimbus Note
3%
Standard Notes
2%
RightNote
16%
Apple Notes
2%
Evernote
7%
Microsoft OneNote
34%
Notion
2%
Joplin
0%
Notesnook
45%
Другое (в комментариях)
Что умеет новая `shikiji` от Anthony Fu?
Показывать всплывающую подсказку с информацией о наведенной сущности. Для этого в коде она должна быть типизирована с помощью JSDoc, либо информация о ней должна быть в библиотеке, если она подключается через неё (в данном примере
Рекомендация от команды Vue и VitePress - использовать в документациях на VitePress во фрагментах кода JSDoc для повышения их информативности. Более подробные инструкции будут даны позднее.
#shikiji #antfu #vitepress
Показывать всплывающую подсказку с информацией о наведенной сущности. Для этого в коде она должна быть типизирована с помощью JSDoc, либо информация о ней должна быть в библиотеке, если она подключается через неё (в данном примере
shikiji
лезет в markdown-it
)Рекомендация от команды Vue и VitePress - использовать в документациях на VitePress во фрагментах кода JSDoc для повышения их информативности. Более подробные инструкции будут даны позднее.
#shikiji #antfu #vitepress
https://vuejsnation.com/
Онлайн ивент
Можно зарегистрироваться как слушатель и подать заявку на выступление как спикер
#event
Онлайн ивент
Можно зарегистрироваться как слушатель и подать заявку на выступление как спикер
#event
Полнотекстовый поиск
Есть несколько библиотек, предоставляющих возможность добавить на сайт полнотекстовый поиск. Одна из них - Orama.
Без зависимостей, open source, TypeScript, 7.1K звезд на GitHub. Есть интеграции с разными системами, типа Astro, Docusaurus, VitePress (с последними версиями не работает пока)
#lib #search
Есть несколько библиотек, предоставляющих возможность добавить на сайт полнотекстовый поиск. Одна из них - Orama.
Без зависимостей, open source, TypeScript, 7.1K звезд на GitHub. Есть интеграции с разными системами, типа Astro, Docusaurus, VitePress (с последними версиями не работает пока)
#lib #search
Oramasearch
Orama Docs | Orama Docs
Search, everywhere
floating-vue - библиотека для показа тултипов и выпадающих меню
Бывшая
Правильно позиционирует контейнер, работает со вложенными меню, позволяет делать детальную настройку, доступна через директивы и компоненты.
#lib
Бывшая
v-tooltip
. На днях вышла пятая версия. 3.1K звезд на GitHub.Правильно позиционирует контейнер, работает со вложенными меню, позволяет делать детальную настройку, доступна через директивы и компоненты.
#lib
На сайте `Vue FAQ` появился новый раздел - Arty-Crafty
Там будет создаваться онлайн магазин на Vue 3 с описанием того, как это делается. Своего рода туториал. Еще один open source проект.
Подробнее - на вводной странице.
#artycrafty
Там будет создаваться онлайн магазин на Vue 3 с описанием того, как это делается. Своего рода туториал. Еще один open source проект.
Подробнее - на вводной странице.
#artycrafty
Arty-Crafty - проект онлайн магазина
Онлайн маркетплейс | Vue FAQ
Vue FAQ - information about Vue.js and frontend development in general
Статья на VueSchool о том, когда стоит использовать provide/inject
Варианты использования функций provide и inject:
- Настройки темы или конфигурации: Вы можете предоставить глобальные настройки, темы или параметры конфигурации на корневом уровне вашего приложения Vue.js и внедрить их в любой компонент, которому они нужны.
- Данные аутентификации: Предоставляйте информацию об аутентификации пользователя, например данные пользователя или токены аутентификации, компонентам, которым они необходимы, не передавая их через пропсы.
- Интернационализация (i18n): Храните данные перевода на корневом уровне и внедряйте их в компоненты, которым требуется отображать текст на разных языках.
- Тесно связанные компоненты: Например, <AccordianPanel>, который всегда появляется только внутри слота компонента <Accordian>. Вы можете инжектировать общие данные, к которым вы всегда хотите иметь доступ, без необходимости передавать их в качестве пропсов.
Лучшие практики и соображения
При использовании provide и inject необходимо помнить о нескольких лучших практиках:
- Избегайте чрезмерного использования: Хотя provide и inject могут быть очень мощными, не стоит ими злоупотреблять. Оставьте их для случаев, когда вам действительно нужно поделиться данными между компонентами, не создавая тесной связи между ними.
- Четкая документация: Документируйте данные, которые вы провайдите и инжектируете, чтобы разработчикам было легко понять, как взаимодействуют компоненты. Их также можно типизировать, - подробности в официальной документации.
- Рассмотрите возможность Prop Drilling: Prop drilling обычно является антипаттерном, но в некоторых случаях передача данных через пропсы может быть более простым и прозрачным подходом. Оцените, являются ли provide и inject лучшим решением для вашего конкретного сценария.
#provide #article #tip
Варианты использования функций provide и inject:
- Настройки темы или конфигурации: Вы можете предоставить глобальные настройки, темы или параметры конфигурации на корневом уровне вашего приложения Vue.js и внедрить их в любой компонент, которому они нужны.
- Данные аутентификации: Предоставляйте информацию об аутентификации пользователя, например данные пользователя или токены аутентификации, компонентам, которым они необходимы, не передавая их через пропсы.
- Интернационализация (i18n): Храните данные перевода на корневом уровне и внедряйте их в компоненты, которым требуется отображать текст на разных языках.
- Тесно связанные компоненты: Например, <AccordianPanel>, который всегда появляется только внутри слота компонента <Accordian>. Вы можете инжектировать общие данные, к которым вы всегда хотите иметь доступ, без необходимости передавать их в качестве пропсов.
Лучшие практики и соображения
При использовании provide и inject необходимо помнить о нескольких лучших практиках:
- Избегайте чрезмерного использования: Хотя provide и inject могут быть очень мощными, не стоит ими злоупотреблять. Оставьте их для случаев, когда вам действительно нужно поделиться данными между компонентами, не создавая тесной связи между ними.
- Четкая документация: Документируйте данные, которые вы провайдите и инжектируете, чтобы разработчикам было легко понять, как взаимодействуют компоненты. Их также можно типизировать, - подробности в официальной документации.
- Рассмотрите возможность Prop Drilling: Prop drilling обычно является антипаттерном, но в некоторых случаях передача данных через пропсы может быть более простым и прозрачным подходом. Оцените, являются ли provide и inject лучшим решением для вашего конкретного сценария.
#provide #article #tip
vueschool.io
Unveiling the Magic of Provide/Inject with Vue.js - Vue School Articles
Explore the power of Provide/Inject in Vue.js. Learn how to manage state and share data across components efficiently in Vue applications.
HTML5 и CSS3 - достаточно функциональные языки и могут делать сами многое, для чего раньше нужно было задействовать JavaScript
В этой статье приводится 5 примеров элементов на чистом HTML/CSS
1. Toggle
2. Автоподсказки в инпуте (datalist)
3. Color picker
4. Accordion (details)
5. Dialog
#tip #html #css
В этой статье приводится 5 примеров элементов на чистом HTML/CSS
1. Toggle
2. Автоподсказки в инпуте (datalist)
3. Color picker
4. Accordion (details)
5. Dialog
#tip #html #css
You don't need JavaScript for that - HTMHell
A collection of bad practices in HTML, copied from real websites.
Еще о SEO
Case study с сайта Strapi
Наше одностраничное приложение (SPA) на базе Nuxt. js генерируется статически и передается через CDN по всему миру для максимальной скорости и доступности. Это необычно для электронной коммерции, но позволяет нам поддерживать множество продуктов без необходимости предварительно рендерить и статически генерировать тысячи страниц во время сборки/развертывания, так как мы столкнулись с этой проблемой на ранних этапах разработки.
Мы используем CDN Netlify и их предварительный рендерер, который обрабатывает запросы для SEO и обновлений, поскольку у нас обычно нет серверных или индексных файлов.
Для Seo можно использовать пререндереры хостеров, как здесь.
#seo #nuxt
Case study с сайта Strapi
Наше одностраничное приложение (SPA) на базе Nuxt. js генерируется статически и передается через CDN по всему миру для максимальной скорости и доступности. Это необычно для электронной коммерции, но позволяет нам поддерживать множество продуктов без необходимости предварительно рендерить и статически генерировать тысячи страниц во время сборки/развертывания, так как мы столкнулись с этой проблемой на ранних этапах разработки.
Мы используем CDN Netlify и их предварительный рендерер, который обрабатывает запросы для SEO и обновлений, поскольку у нас обычно нет серверных или индексных файлов.
Для Seo можно использовать пререндереры хостеров, как здесь.
#seo #nuxt
strapi.io
Mug & Snug uses Strapi to develop a social e-commerce platform
Phillip Gourley, CEO, gives his feedback about the headless CMS Strapi that he's been using to manage content with Netlify, Nuxt.js, MongoDB Atlas, Docker, Stripe and Braintree.