Хорошее сравнение возможностей
#fetch #axios #xhr
fetch()
и XMLHttpRequest
(который используется под капотом в Axios
)#fetch #axios #xhr
Openreplay
Ajax Battle: XMLHttpRequest vs the Fetch API
Which Ajax API is best for your application? In this article, we'll examine the pros and cons of the ancient XMLHttpRequest and its modern Fetch API equivalent.
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
Создатель Solid.js Ryan Carniato год назад написал статью об эволюции Signals в JavaScript (чья концепция лежит и в основе реактивности Vue.js)
#reactivity #solidjs
#reactivity #solidjs
DEV Community
The Evolution of Signals in JavaScript
There has been some buzz recently in the frontend world around the term "Signals". In seemingly short...
Scroll chaining - это когда скролишь в модалке или боковом меню, и при окончании скрола в ней начинает скролиться главное окно за модалкой.
Такое поведение можно отключить следующим правилом внутри элемента со скролом:
Еще один совет - при переходе по роутам часто заметно "прыгание" содержимого экрана, потому что главный скроллбар то появляется, то исчезает в зависимости от количества контента или открытия модального окна.
Можно заранее зарезервировать под него место, и тогда визуально дерганий не будет. Сам скроллбар будет появляться по необходимости. Правило ставить надо на
#tip #css #scroll
Такое поведение можно отключить следующим правилом внутри элемента со скролом:
overscroll-behavior-y: contain;
Еще один совет - при переходе по роутам часто заметно "прыгание" содержимого экрана, потому что главный скроллбар то появляется, то исчезает в зависимости от количества контента или открытия модального окна.
Можно заранее зарезервировать под него место, и тогда визуально дерганий не будет. Сам скроллбар будет появляться по необходимости. Правило ставить надо на
html
тэг в общем случае.scrollbar-gutter: stable;
#tip #css #scroll
Чтобы показать размер акулы, через которую современный Software development перепрыгнул, вот реальная история.
Пять лет назад надо было организовать JWT аутентификацию на сайте с PHP бэкендом. Взял
Через некоторое время делал JWT аутентификацию на другом проекте, заметил, что
Продолжение следует...
#laravel #dx #optimization #jwt
Пять лет назад надо было организовать JWT аутентификацию на сайте с PHP бэкендом. Взял
firebase/php-jwt
- продукт разработчиков Google, ноль зависимостей, один файл среднего размера который делал всю криптографию. Логика там простая - сгенерировать JWT токен при логине и проверить подпись токена при запросе с фронтенда. Реализация на бэке заняла строк 50 кода, на фронте - столько же.Через некоторое время делал JWT аутентификацию на другом проекте, заметил, что
firebase/php-jwt
переписался в ОО стиле - появились классы JWT
, Key
, ExpiredException
и т.д. Логика та же, размер общий чуть увеличился.Продолжение следует...
#laravel #dx #optimization #jwt
О сложности в SD (продолжение)
Недавно надо было поставить JWT аутентификацию на Ларавель. Посмотрел в интернете - делается через пакет
Залез внутрь пакета - там 65 php файлов. Глянул в зависимости в composer.json:
Ой-вей, так этот пакет даже JWT криптографией не занимается, это просто прослойка между Ларавелем и другими пакетами, которые уже делают что-то полезное. То есть, это аналог того кода в 50 строк, который я писал пять лет назад.
Вот этот пакет со всеми зависимостями делает, по сути, то же самое, что и
Складывается впечатление, что как минимум 90% кода пишется не для того, чтобы решить конкретную бизнес задачу, а по другой причине. Чтобы получить доход, но не прямо и конкретно, а в целом, "для отрасли". Для этого усложняются фреймворки и методики. То, что можно сделать просто, делается сложно. Это как таксист, который везет кругами неместного пассажира, чтобы накрутило на счетчик. Причем таксист сам не знает куда ехать - он ведёт по навигатору, он только это умеет. А навигатор ведет так, как в него заложил его хозяин.
Сфера software development усложняется и задурманивается, чтобы там нельзя было найти прямых путей. А те, кто помнит, как их находить, побыстрее вымерли.
#laravel #dx #optimization
Недавно надо было поставить JWT аутентификацию на Ларавель. Посмотрел в интернете - делается через пакет
tymon/jwt-auth
. Поставил, настроил.Залез внутрь пакета - там 65 php файлов. Глянул в зависимости в composer.json:
"require": {
"php": "^5.5.9|^7.0",
"illuminate/auth": "^5.2|^6|^7|^8",
"illuminate/contracts": "^5.2|^6|^7|^8",
"illuminate/http": "^5.2|^6|^7|^8",
"illuminate/support": "^5.2|^6|^7|^8",
"lcobucci/jwt": "<3.4",
"namshi/jose": "^7.0",
"nesbot/carbon": "^1.0|^2.0"
}
Ой-вей, так этот пакет даже JWT криптографией не занимается, это просто прослойка между Ларавелем и другими пакетами, которые уже делают что-то полезное. То есть, это аналог того кода в 50 строк, который я писал пять лет назад.
Вот этот пакет со всеми зависимостями делает, по сути, то же самое, что и
firebase/php-jwt
. То же самое с точки зрения бизнес-требований, технической стороны, безопасности.Складывается впечатление, что как минимум 90% кода пишется не для того, чтобы решить конкретную бизнес задачу, а по другой причине. Чтобы получить доход, но не прямо и конкретно, а в целом, "для отрасли". Для этого усложняются фреймворки и методики. То, что можно сделать просто, делается сложно. Это как таксист, который везет кругами неместного пассажира, чтобы накрутило на счетчик. Причем таксист сам не знает куда ехать - он ведёт по навигатору, он только это умеет. А навигатор ведет так, как в него заложил его хозяин.
Сфера software development усложняется и задурманивается, чтобы там нельзя было найти прямых путей. А те, кто помнит, как их находить, побыстрее вымерли.
#laravel #dx #optimization
Вчера был показан пример, как убрать дергание экрана из-за появляющегося-убирающегося скроллбара через
Частично это можно исправить через
Есть еще два варианта избежать "прыжков" страницы. Можно "накладывать" скроллбар на сайт при его появлении - именно это используется на проекте arty-crafty. Это делается через отрицательный отступ справа:
Также можно добавлять компенсационный отступ слева, тогда вся страница будет "сужаться" слева и справа равномерно при появлении скроллбара. Тут стабильность страницы будет зависеть от контента на нем (например, текст может перенестись) и нужно будет отдельно обработать элементы с
Понятно, что данные методы имеет смысл использовать только при разрешении экрана десктоп/ноутбук.
#tip #css #scroll
scrollbar-gutter: stable;
. Минус данного метода в том, что если бэкграунд сайта непрозрачный и "от края до края", то становится видна зарезервированная под скроллбар полоска.Частично это можно исправить через
scrollbar-gutter: stable both-edges;
- постоянные полоски будут слева и справа.Есть еще два варианта избежать "прыжков" страницы. Можно "накладывать" скроллбар на сайт при его появлении - именно это используется на проекте arty-crafty. Это делается через отрицательный отступ справа:
html {
overflow-x: hidden;
margin-right: calc(-1 * (100vw - 100%));
}
Также можно добавлять компенсационный отступ слева, тогда вся страница будет "сужаться" слева и справа равномерно при появлении скроллбара. Тут стабильность страницы будет зависеть от контента на нем (например, текст может перенестись) и нужно будет отдельно обработать элементы с
position: fixed
:html {
margin-left: calc(100vw - 100%);
margin-right: 0;
}
Понятно, что данные методы имеет смысл использовать только при разрешении экрана десктоп/ноутбук.
#tip #css #scroll
Telegram
Vue-FAQ
Scroll chaining - это когда скролишь в модалке или боковом меню, и при окончании скрола в ней начинает скролиться главное окно за модалкой.
Такое поведение можно отключить следующим правилом внутри элемента со скролом:
overscroll-behavior-y: contain;
Еще…
Такое поведение можно отключить следующим правилом внутри элемента со скролом:
overscroll-behavior-y: contain;
Еще…
Бывают случаи, когда надо явно перерендерить шаблон - например, он мог быть изменен сторонней нереактивной библиотекой. Самый правильный способ делать это - через key:
#tip
<script setup>
import { ref } from 'vue';
const componentKey = ref(0);
const forceRender = () => {
componentKey.value += 1;
};
</script>
<template>
<MyComponent :key="componentKey" />
<button @click="forceRender">Force re-render</button>
</template>
#tip
Обновился проект Arty-Crafty
Добавились: выбор BaaS, настройка и интеграция с Supabase, настройка Hoppscotch, добавление мобильного нижнего меню.
Текущая версия сайта - https://vuesence.github.io/arty-crafty/
Очередное CMV
#artycrafty #supabase #cmv
Добавились: выбор BaaS, настройка и интеграция с Supabase, настройка Hoppscotch, добавление мобильного нижнего меню.
Текущая версия сайта - https://vuesence.github.io/arty-crafty/
Очередное CMV
#artycrafty #supabase #cmv
Arty-Crafty - проект онлайн магазина
Выбор BaaS или CMS | Vue FAQ
Vue FAQ - information about Vue.js and frontend development in general
Как сделать человеко-понятные SEO-friendly ссылки из названия, типа такой?
5 строк.
В роутах пишем:
И в месте создания ссылки (боковое меню, например) при
функцию
Теперь если пользователь сохранит страницу в браузере, а название категории немного изменится на сайте, он все равно попадёт, куда надо.
/category/2-voylochnie-igrushki
вместо /category/2
5 строк.
В роутах пишем:
{
path: "/category/:categoryId",
name: "category",
props: route => ({ categoryId: +(route.params.categoryId as string).split("-")[0] }),
component: ProductCategoryView,
},
И в месте создания ссылки (боковое меню, например) при
router.push()
добавляем slug
названия категории:@click="router.push(`${category.id}-${slug(category.title)}`)"
функцию
slug()
разрешаем сгенерить Codeium-u запросом "write slug function for сyrillic letters". На бэкенде ничего менять не надо.Теперь если пользователь сохранит страницу в браузере, а название категории немного изменится на сайте, он все равно попадёт, куда надо.
categoryId
можно поставить и после slug-a
, тогда будет как у Ozon-a.Вчера не смог заснуть пока не сделал. Демо. Строит таймлайн релизов любого публичного репозитория. Адаптирован к темам VitePress.
Опубликовал npm пакет
Подключение в компоненте или в VitePress .md:
Планируется добавить детали релиза, а также опционально список commits и pull requests к каждому релизу
Опубликовал npm пакет
release-timeline
. Документация здесь.Подключение в компоненте или в VitePress .md:
<script setup>
import { ReleaseTimeline, DefaultOptions as options } from "release-timeline";
import "release-timeline/dist/style.css";
options.github.owner = "vuesence";
options.github.repo = "arty-crafty";
</script>
<ReleaseTimeline :options="options" />
Планируется добавить детали релиза, а также опционально список commits и pull requests к каждому релизу
Глобальный прелоадер
Альтернативу много лет создающемуся Suspense несложно сделать самому с помощью одной composable функции в 30 строк.
Он нужен когда в нескольких компонентах могут асинхронно грузится данные, и нужно показывать один общий прелоадер пока все загрузки не закончатся.
Альтернативу много лет создающемуся Suspense несложно сделать самому с помощью одной composable функции в 30 строк.
Он нужен когда в нескольких компонентах могут асинхронно грузится данные, и нужно показывать один общий прелоадер пока все загрузки не закончатся.