Как собрать сложное расширение для Chrome
Нина Торгунакова в блоге Злых Марсиан по шагам собирает расширение для работы с сервисом Playbook. Сначала добавляет OAuth-авторизацию, пишет сам скрипт для сохранения медиа в локальное хранилище, затем добавляет пункт в контекстное меню браузера, обработку ошибок. И готовит расширение для публикации в Chrome Web Store.
Часто использую статьи марсиан как инструкции. Эта уже в закладках на случай, если захочу опубликовать какое-нибудь расширение.
https://evilmartians.com/chronicles/how-to-make-complex-chrome-plugins-a-zero-gravity-guide
Нина Торгунакова в блоге Злых Марсиан по шагам собирает расширение для работы с сервисом Playbook. Сначала добавляет OAuth-авторизацию, пишет сам скрипт для сохранения медиа в локальное хранилище, затем добавляет пункт в контекстное меню браузера, обработку ошибок. И готовит расширение для публикации в Chrome Web Store.
Часто использую статьи марсиан как инструкции. Эта уже в закладках на случай, если захочу опубликовать какое-нибудь расширение.
https://evilmartians.com/chronicles/how-to-make-complex-chrome-plugins-a-zero-gravity-guide
evilmartians.com
How to make complex Chrome extensions: a zero gravity guide—Martian Chronicles, Evil Martians’ team blog
Building a complex browser extension isn't exactly easy, so use this guide and float to success!
❤26❤🔥7🔥5👍4
Верстаем в прямом эфире
Точнее, верстать будет Полина Гуртовая, помогать ей будет Алёна Батицкая, а я буду давать комментарии. Решать будем задачи на вёрстку, которые я собирал для своей подборки на CodeRun.
Всё это состоится 18 июля в 20:00 по Минску. Приходите советовать советы и спрашивать вопросы в комментариях к стриму 🙂
https://news.1rj.ru/str/doka_guide/161
Точнее, верстать будет Полина Гуртовая, помогать ей будет Алёна Батицкая, а я буду давать комментарии. Решать будем задачи на вёрстку, которые я собирал для своей подборки на CodeRun.
Всё это состоится 18 июля в 20:00 по Минску. Приходите советовать советы и спрашивать вопросы в комментариях к стриму 🙂
https://news.1rj.ru/str/doka_guide/161
Telegram
Дока
В четверг 18 июля в 20:00 GMT+3 соберёмся, чтобы поверстать в прямом эфире.
Полина Гуртовая, которая обычно пишет на JS, будет решать задачки на #CSS, помогать ей будет Алёна Батицкая. А Никита Дубко расскажет про CodeRun и подборку задач, которая поможет…
Полина Гуртовая, которая обычно пишет на JS, будет решать задачки на #CSS, помогать ей будет Алёна Батицкая. А Никита Дубко расскажет про CodeRun и подборку задач, которая поможет…
🔥38⚡8👍7❤1
Разные способы спрятать что-то в DOM
Крис Фердинанди собрал полезную шпаргалку, в каком случае как лучше прятать элементы в DOM.
1. Свойство
2. Атрибут
3. Свойство
4. Класс
5. Атрибут
Статья Криса Фердинанди:
https://gomakethings.com/the-many-ways-to-hide-things-in-the-dom/
А ещё есть хорошая статья про прятание содержимого от скринридеров у Доки:
https://doka.guide/a11y/content-hidden/
Крис Фердинанди собрал полезную шпаргалку, в каком случае как лучше прятать элементы в DOM.
1. Свойство
display: none. Прячет элемент полностью, контент элемента не читается скринридерами.2. Атрибут
[hidden]. Почти как display: none, только в HTML. Крис не пишет про это, но [hidden] легко теряет свою визуальную спрятанность, если поверх выставить display: block.3. Свойство
visibility: hidden. Прячет элемент, но оставляет вместо него пустое пространство. Контент элемента не читается скринридерами.4. Класс
.visually-hidden. Популярный набор свойств, которые заставляют элемент занимать нулевое пространство на странице, то есть быть визуально невидимым, но при этом оставляют содержимое читаемым скринридерами.5. Атрибут
[aria-hidden="true"]. Прячет содержимое от скринридеров, не влияет на визуальное отображение.Статья Криса Фердинанди:
https://gomakethings.com/the-many-ways-to-hide-things-in-the-dom/
А ещё есть хорошая статья про прятание содержимого от скринридеров у Доки:
https://doka.guide/a11y/content-hidden/
gomakethings.com
The many ways to hide things in the DOM
A few weeks ago in one of my YouTube videos, I used the [hidden] attribute to hide and show some elements in the DOM. One of my subscribers mentioned that they hadn’t heard of that attribute before, and were glad I mentioned it. Because JavaScripts always…
👍56❤🔥9❤3
Подводные камни In-app браузеров
Когда вы открываете ссылки в каких-нибудь нативных приложениях соц. сетей, они часто норовят открывать даже не WebView, а какую-то свою обёртку над WebView, которая имеет полный контроль над вашей страницей. Поль Эш-Лоран объясняет, почему такие обёртки — зло.
1. У них меньше функций, чем у браузеров. Просто потому, что операционные системы в принципе ограничивают WebView из соображений приватности и безопасности.
2. В In-app браузерах у вас вообще нет контроля над собственным кодом. Если какой-нибудь Cakebook решит вставить туда свой скрипт для «улучшения пользовательского опыта», то вы ничего с этим сделать не сможете.
3. Неконсистентный для пользователя UI/UX. Дизайнеры таких браузеров считают важным сделать что-то «удобнее оригинала», но забывают, что в основном пользователи сидят именно в обычных браузерах, поэтому там привычно. А сила привычки очень велика.
В 2022 году был скандал вокруг того, что Meta добавляет отдельный скрипт на каждую открываемую веб-страницу в своих приложениях, который отслеживает буквально каждое мельчайшее действие на странице. К сожалению, в 2023 году дело против Meta по этому кейсу было закрыто. TikTok делает так же. И не только они. Недавно Twitter/X зачем-то стал открывать страницы в первый раз в какой-то поделке, похожей на браузер, а во второй раз — в WebView.
Так и что с этим делать? Мы не контролируем собственные сайты?
В статье предлагается посмотреть на https://inappbrowser.com/ и https://inappdebugger.com/, которые помогают детектить, открывается сайт в обычном браузере или в In-app браузере. Плюс показывают код, который был внезапно вставлен на страницу извне.
Для Android можно использовать префикс
Также для любых ОС, если вы хотите сберечь пользовательские данные, можно задетектить, что страница открыта в In-app браузере, и вывести для пользователя инструкцию, как открыть страницу в нормальном браузере. Увы, требует дополнительной разработки, причём поди ещё угадай, какую инструкцию составить. Тот же Twitter очень дерзко в своём In-app браузере в принципе не даёт опции открыть в дефолтном браузере.
https://frontendmasters.com/blog/the-pitfalls-of-in-app-browsers/
Когда вы открываете ссылки в каких-нибудь нативных приложениях соц. сетей, они часто норовят открывать даже не WebView, а какую-то свою обёртку над WebView, которая имеет полный контроль над вашей страницей. Поль Эш-Лоран объясняет, почему такие обёртки — зло.
1. У них меньше функций, чем у браузеров. Просто потому, что операционные системы в принципе ограничивают WebView из соображений приватности и безопасности.
2. В In-app браузерах у вас вообще нет контроля над собственным кодом. Если какой-нибудь Cakebook решит вставить туда свой скрипт для «улучшения пользовательского опыта», то вы ничего с этим сделать не сможете.
3. Неконсистентный для пользователя UI/UX. Дизайнеры таких браузеров считают важным сделать что-то «удобнее оригинала», но забывают, что в основном пользователи сидят именно в обычных браузерах, поэтому там привычно. А сила привычки очень велика.
В 2022 году был скандал вокруг того, что Meta добавляет отдельный скрипт на каждую открываемую веб-страницу в своих приложениях, который отслеживает буквально каждое мельчайшее действие на странице. К сожалению, в 2023 году дело против Meta по этому кейсу было закрыто. TikTok делает так же. И не только они. Недавно Twitter/X зачем-то стал открывать страницы в первый раз в какой-то поделке, похожей на браузер, а во второй раз — в WebView.
Так и что с этим делать? Мы не контролируем собственные сайты?
В статье предлагается посмотреть на https://inappbrowser.com/ и https://inappdebugger.com/, которые помогают детектить, открывается сайт в обычном браузере или в In-app браузере. Плюс показывают код, который был внезапно вставлен на страницу извне.
Для Android можно использовать префикс
intent: в ссылках. Так операционная система будет понимать, что вы хотите открыть именно дефолтный браузер в системе, а не In-app.Также для любых ОС, если вы хотите сберечь пользовательские данные, можно задетектить, что страница открыта в In-app браузере, и вывести для пользователя инструкцию, как открыть страницу в нормальном браузере. Увы, требует дополнительной разработки, причём поди ещё угадай, какую инструкцию составить. Тот же Twitter очень дерзко в своём In-app браузере в принципе не даёт опции открыть в дефолтном браузере.
https://frontendmasters.com/blog/the-pitfalls-of-in-app-browsers/
Frontend Masters
The Pitfalls of In-App Browsers
Developing websites for modern mobile devices has a pitfall you may not be aware of: in-app browsers. These are web browsers embedded directly within native mobile apps. So if a link is clicked within a native app (e.g. Instagram or TikTok), it uses the in…
👍24😱12🤯5❤2
Стилизация таблиц современным CSS
Мишель Баркер показывает, как стилизовать таблицы, не меняя в них
-
-
- У таблиц есть
- Чтобы научить таблицу уважать задаваемые ширины колонок, нужно задать ей свойство
В конце статьи можно посмотреть готовый пример адаптивной таблицы с фиксируемой левой колонкой. Забавно, что раньше мы так и верстали почти всё, потому что это был довольно удобный способ контролировать вёрстку. А сейчас это уже знание древних.
https://piccalil.li/blog/styling-tables-the-modern-css-way/
Мишель Баркер показывает, как стилизовать таблицы, не меняя в них
display. Всё чаще вижу примеры, где таблицы переделывают на гриды, потому что так удобнее с ними работать и при необходимости переделывать на узких экранах в карточки. Но иногда таблицы — это просто таблицы.-
border-collapse: collapse схлопывает границы ячеек в одну общую.-
<thead> и <tfoot> — полезные элементы, чтобы выделить заголовочный ряд и ряд «Итого».- У таблиц есть
<caption> — подпись к таблице. И её можно двигать при помощи caption-side: bottom.- Чтобы научить таблицу уважать задаваемые ширины колонок, нужно задать ей свойство
table-layout: fixed.В конце статьи можно посмотреть готовый пример адаптивной таблицы с фиксируемой левой колонкой. Забавно, что раньше мы так и верстали почти всё, потому что это был довольно удобный способ контролировать вёрстку. А сейчас это уже знание древних.
https://piccalil.li/blog/styling-tables-the-modern-css-way/
Piccalilli
Styling Tables the Modern CSS Way
Modern CSS makes styling HTML tables in a considered, responsive nature a breeze. Michelle Barker breaks it all down for you in this deep dive.
👍43❤🔥3
Фронтенд 2024: тренды, CSS, доступность, браузерные API
Сходили с Глашей Жур в подкаст к Хекслет, поболтали про всякое разное, связанное с вебом. Заодно поговорили о том, что нужно знать новичкам в профессии, чтобы выделяться среди других.
https://youtu.be/9I1g06XSYZk
Сходили с Глашей Жур в подкаст к Хекслет, поболтали про всякое разное, связанное с вебом. Заодно поговорили о том, что нужно знать новичкам в профессии, чтобы выделяться среди других.
https://youtu.be/9I1g06XSYZk
YouTube
ФРОНТЕНД 2024: тренды, CSS, Accessibility, API для анимаций, canvas | Никита Дубко, Глаша Жур | №34
В этом выпуске Глаша и Никита обсуждают актуальные темы в области фронтенд-разработки и цифровой доступности. Узнайте о последних изменениях в CSS и HTML, новых API для анимаций, таких как Popover API, Anchor Position API и View Transitions API, и их внедрении…
❤21❤🔥8🔥5⚡4
Forwarded from melikhov.dev
Typenoscript теперь и в Node.js?
В свежем выпуске мы затронули нашумевший PR. Что случилось то? А случилось такое, что в Node.js подвезли в экспериментальном режиме загрузчик для ts файлов. Работает он очень просто (правда просто). В ноду вшивается SWC в виде скомпиленного для WASM бинаря. TS файлы прогоняются через SWC и из них отстреливаются типы. Всё. Enum и namespace не работают (о счастье). Никакиетранспиляции трансформации не производятся. Просто отстреливаются типы.
Есть ли проблемы? Конечно есть. Например, нужно писать расширение файлов в импортах. Потому что импорт так работает бай дизайн.
Почему это круто и важно? Потому что транспиляция раздражает. Потому что хочется всё иметь из коробки и без настроект. Накидать ts-файлик и запустить.
В общем, неожиданно и очень приятно.
В свежем выпуске мы затронули нашумевший PR. Что случилось то? А случилось такое, что в Node.js подвезли в экспериментальном режиме загрузчик для ts файлов. Работает он очень просто (правда просто). В ноду вшивается SWC в виде скомпиленного для WASM бинаря. TS файлы прогоняются через SWC и из них отстреливаются типы. Всё. Enum и namespace не работают (о счастье). Никакие
Есть ли проблемы? Конечно есть. Например, нужно писать расширение файлов в импортах. Потому что импорт так работает бай дизайн.
Почему это круто и важно? Потому что транспиляция раздражает. Потому что хочется всё иметь из коробки и без настроект. Накидать ts-файлик и запустить.
В общем, неожиданно и очень приятно.
❤🔥54👍13❤6🔥5
Кастомное сообщение при подключении ESM через require
Если попытаться подключить ESM-пакет внутри CommonJS, Node.js выдаст вам ошибку. По ней, в принципе, достаточно понятно, что надо что-то поменять, но Зак Лезерман делится рецептом, как выдать кастомное сообщение, если ваш пакет уже не поддерживает CommonJS.
Для начала нужно попросить Node.js использовать разные файлы для разных способов импорта, внутри package.json пакета.
А затем внутри cjs-файла осознанно упасть.
Как верно замечает Зак, Node.js планирует скоро сделать так, чтобы внутри require можно было загружать и ESM-модули (с некоторыми ограничениями), так что лайфхак временный.
https://www.zachleat.com/web/future-friendly-esm/
Если попытаться подключить ESM-пакет внутри CommonJS, Node.js выдаст вам ошибку. По ней, в принципе, достаточно понятно, что надо что-то поменять, но Зак Лезерман делится рецептом, как выдать кастомное сообщение, если ваш пакет уже не поддерживает CommonJS.
Для начала нужно попросить Node.js использовать разные файлы для разных способов импорта, внутри package.json пакета.
{
"type": "module",
"main": "./lib.js",
"exports": {
"import": "./lib.js",
"require": "./libCommonJs.cjs"
}
}
А затем внутри cjs-файла осознанно упасть.
try {
module.exports = require("./lib.js");
} catch (e) {
if(e.code === "ERR_REQUIRE_ESM") {
throw new Error("Oops. It's not the module you are looking for.");
}
throw e;
}
Как верно замечает Зак, Node.js планирует скоро сделать так, чтобы внутри require можно было загружать и ESM-модули (с некоторыми ограничениями), так что лайфхак временный.
https://www.zachleat.com/web/future-friendly-esm/
Zach Leatherman
Improved error messaging for require(ESM) in Node.js—zachleat.com
A post by Zach Leatherman (zachleat)
👍21🌚10❤1🤣1
Сборщик мусора и замыкания
Джейк Арчибальд делится интересным кейсом, в котором неожиданно в JavaScript утекает память.
Несмотря на то, что
Подробнее в статье.
https://jakearchibald.com/2024/garbage-collection-and-closures/
Джейк Арчибальд делится интересным кейсом, в котором неожиданно в JavaScript утекает память.
function demo() {
const bigArrayBuffer = new ArrayBuffer(100_000_000);
(() => {
console.log(bigArrayBuffer.byteLength);
})();
globalThis.innerFunc = () => {
console.log('hello');
};
}
demo();
Несмотря на то, что
innerFunc никак не связана с bigArrayBuffer, bigArrayBuffer не удаляется из памяти посе выполнения этого кода.Подробнее в статье.
https://jakearchibald.com/2024/garbage-collection-and-closures/
Jakearchibald
Garbage collection and closures
GC within a function doesn't work how I expected
🌚20🥴14👍12⚡1❤1🤨1
Причины, почему JavaScript может не работать
Иногда приходится доказывать другим людям, что полностью полагаться на работающий JavaScript на сайтах нельзя. Энди Белл собрал небольшой список, на который можно опираться для аргументации.
1. Браузерное расширение может сломать JS на сайте. Сам с таким сталкивался, когда блокировщики рекламы творили дичь.
2. Политики безопасности (например, в компании), которые тупо вырубают некоторые домены или расширения файлов.
3. Блокировка CDN, например, потому что РКН или другие «регуляторы».
4. Скрипт не загрузился, потому что пользователь в метро.
5. Банальная ошибка в JS-коде, которая всё ломает.
6. Opera Mini.
7. «Умный» инкогнито-режим в Safari, который иногда сам решает отключить некоторые скрипты.
8. У пользователя слабое устройство, которому не хватает памяти обработать ваш JS.
9. Пользователь осознанно выключил JS, чтобы за ним не следили.
Это не значит, что надо делать сайты, которые работают без JS полностью. В современной разработке такое скорее нереально, если это не простой лендинг. Но как минимум стоит продумать, как будет выглядеть ваш сайт, если JS не загрузится и не выполнится. Например, выводить какую-то плашку с инструкцией для пользователя, что делать в таком случае.
https://piccalil.li/blog/a-handful-of-reasons-javanoscript-wont-be-available/
Иногда приходится доказывать другим людям, что полностью полагаться на работающий JavaScript на сайтах нельзя. Энди Белл собрал небольшой список, на который можно опираться для аргументации.
1. Браузерное расширение может сломать JS на сайте. Сам с таким сталкивался, когда блокировщики рекламы творили дичь.
2. Политики безопасности (например, в компании), которые тупо вырубают некоторые домены или расширения файлов.
3. Блокировка CDN, например, потому что РКН или другие «регуляторы».
4. Скрипт не загрузился, потому что пользователь в метро.
5. Банальная ошибка в JS-коде, которая всё ломает.
6. Opera Mini.
7. «Умный» инкогнито-режим в Safari, который иногда сам решает отключить некоторые скрипты.
8. У пользователя слабое устройство, которому не хватает памяти обработать ваш JS.
9. Пользователь осознанно выключил JS, чтобы за ним не следили.
Это не значит, что надо делать сайты, которые работают без JS полностью. В современной разработке такое скорее нереально, если это не простой лендинг. Но как минимум стоит продумать, как будет выглядеть ваш сайт, если JS не загрузится и не выполнится. Например, выводить какую-то плашку с инструкцией для пользователя, что делать в таком случае.
https://piccalil.li/blog/a-handful-of-reasons-javanoscript-wont-be-available/
Piccalilli
A handful of reasons JavaScript won’t be available
It’s always safe to assume JavaScript will not be available, so here’s a quick list of very realistic reasons it won’t be.
👍32🔥5❤4🤔2❤🔥1
MinskCSS Meetup #12
Сегодня вечером проводим очередной онлайн-митап для фронтендеров, где обсудим с классными спикерами всякое интересное:
- Алексей Назаренко объяснит особенности Shadow DOM, связанные с изоляцией и стилями.
- Глафира Жур расскажет, что есть полезного в мире AI для accessibility.
- Юлия Миоцен покажет, как моделировать и анимировать настоящего 3D-персонажа на CSS.
Программа митапа: https://telegra.ph/MinskCSS-Meetup-12-07-29
Трансляция на YouTube: https://www.youtube.com/watch?v=-s7s_IB2egc
Снова никакой регистрации. Просто приходите в 19:00 по минскому времени. Всех ждём 🙂
Сегодня вечером проводим очередной онлайн-митап для фронтендеров, где обсудим с классными спикерами всякое интересное:
- Алексей Назаренко объяснит особенности Shadow DOM, связанные с изоляцией и стилями.
- Глафира Жур расскажет, что есть полезного в мире AI для accessibility.
- Юлия Миоцен покажет, как моделировать и анимировать настоящего 3D-персонажа на CSS.
Программа митапа: https://telegra.ph/MinskCSS-Meetup-12-07-29
Трансляция на YouTube: https://www.youtube.com/watch?v=-s7s_IB2egc
Снова никакой регистрации. Просто приходите в 19:00 по минскому времени. Всех ждём 🙂
Telegraph
MinskCSS Meetup #12
Продолжение сезона митапов по фронтенду от минских сообществ! 12-ый митап MinskCSS состоится 7 августа 2024 года в 19:00, полностью ONLINE. Подключайтесь к трансляции, запасайтесь вкусняхами и открывайте чатик, чтобы общаться с другими зрителями и задавать…
❤20🎉7❤🔥6👍6
Подкаст «Гости из IT». Олимпиадное программирование
Сходил в гости в подкаст с Антоном Комоловым «Гости из IT», где вместе с тренером чемпионов мира ICPC Михаилом Густокашиным обсудили с ведущими подкаста, что такое олимпиадное программирование, полезно ли оно в работе, даёт ли это какие-то преимущества в трудоустройстве и может ли ИИ победить чемпиона мира по программированию.
Мало кто знает, но в школе я занимался олимпиадным программированием, доходил до областного этапа олимпиады по информатике, постоянно брал там дипломы II степени. А в университете мне повезло быть в рабочей группе организаторов первых чемпионатов по программированию BSUIR Open, который до сих пор пользуется уважением в олимпиадном сообществе. Ну а сейчас я руковожу сервисами, которые помогают проводить контесты и соревнования. Было приятно поностальгировать.
https://podcast.ru/e/599XsTl4qNW
Сходил в гости в подкаст с Антоном Комоловым «Гости из IT», где вместе с тренером чемпионов мира ICPC Михаилом Густокашиным обсудили с ведущими подкаста, что такое олимпиадное программирование, полезно ли оно в работе, даёт ли это какие-то преимущества в трудоустройстве и может ли ИИ победить чемпиона мира по программированию.
Мало кто знает, но в школе я занимался олимпиадным программированием, доходил до областного этапа олимпиады по информатике, постоянно брал там дипломы II степени. А в университете мне повезло быть в рабочей группе организаторов первых чемпионатов по программированию BSUIR Open, который до сих пор пользуется уважением в олимпиадном сообществе. Ну а сейчас я руковожу сервисами, которые помогают проводить контесты и соревнования. Было приятно поностальгировать.
https://podcast.ru/e/599XsTl4qNW
Podcast.ru
Олимпиадное программирование: от спортивных побед на ICPC до работы в топовых IT-компаниях – Гости из IT – Podcast.ru
В этом выпуске мы поговорили о соревнованиях в программировании: олимпиады в школе и университете, программирование как спорт, хакатоны и контесты во взрослом возрасте. Какие плюсы и минусы можно выделить у абстрактных спортивных программистов при работе…
🔥15🐳4❤3👍3
Официальная поддержка Firefox в Puppeteer
Для автоматизации тестирования в браузере всё чаще вместо Selenium используют Playwright или Puppeteer. Удобно, когда можно поднять реальный браузер в «безголовом» режиме и тестировать страницу ровно такую, какую «видит» пользователь.
Чисто субъективно мне всегда по функциям и обилию API больше нравился Puppeteer. В нём как минимум есть классная возможность генерировать PDF с большим количеством настроек. Но при этом по сути Puppeteer всегда был под капотом Chrome. А мне важна кроссбраузерность. У пользователей Firefox сайт тоже должен работать.
Начиная с Puppeteer 23 тестировать кроссбраузерно станет проще, там появляется официальная поддержка Firefox. Не все API работают, список можно посмотреть в статье, но большую часть потребностей закрывает.
https://hacks.mozilla.org/2024/08/puppeteer-support-for-firefox/
Для автоматизации тестирования в браузере всё чаще вместо Selenium используют Playwright или Puppeteer. Удобно, когда можно поднять реальный браузер в «безголовом» режиме и тестировать страницу ровно такую, какую «видит» пользователь.
Чисто субъективно мне всегда по функциям и обилию API больше нравился Puppeteer. В нём как минимум есть классная возможность генерировать PDF с большим количеством настроек. Но при этом по сути Puppeteer всегда был под капотом Chrome. А мне важна кроссбраузерность. У пользователей Firefox сайт тоже должен работать.
Начиная с Puppeteer 23 тестировать кроссбраузерно станет проще, там появляется официальная поддержка Firefox. Не все API работают, список можно посмотреть в статье, но большую часть потребностей закрывает.
https://hacks.mozilla.org/2024/08/puppeteer-support-for-firefox/
🔥23👍6❤1👏1
Как Google обрабатывает JavaScript во время индексации
Есть несколько мифов по поводу того, как Google индексирует SPA-приложения. Например, что боты-краулеры не умеют в JavaScript совсем. Или что для обхода сайтов Google использует древние версии Chrome. И другие.
Беда в том, что у Google нет ни одной полной странички с документацией, как именно поисковик обходит сайты и как краулеры эти самые сайты загружают, обрабатывают и индексируют. И даже та документация, что есть, не даёт полного понимания, что сделать, чтобы бот точно всё распарсил правильно. Оно и понятно: зная точную механику, можно стать повелителем SEO.
Vercel вместе с MERJ провели эксперимент, обложив 100000 запросов от гуглобота разными замерами. Как именно они это сделали, лучше посмотреть в статье, есть даже примеры кода. И получили они такие знания:
1. Googlebot отлично справляется с любым JavaScript. Синхронным, асинхронным, из фреймворков.
2. Рендерит он только страницы с HTTP-кодами 200 и 304. Остальные коды не рендерит в принципе. Поэтому не забывайте отправлять корректные коды ошибок на страницы, это влияет на позиции в выдаче.
3. Googlebot умеет находить ссылки внутри JavaScript, не только в HTML. Причём смотрит он именно на готовые ссылки, не encoded URL.
4. Наличие
5. Метатег
6. Тяжёлые страницы с большим количеством JavaScript краулятся медленнее, могут долго висеть в очереди. Поэтому перфоманс страницы всё-таки влияет на SEO.
7. Если в
Понятно, что по сути это снепшот текущего состояния краулинга, который основан на предположениях и выводах из корреляции. Но всё равно это лучше, чем ничего. Как минимум можно не бояться, что JavaScript у поисковика не работает, и ради этого пилить отдельные версии сайта.
https://vercel.com/blog/how-google-handles-javanoscript-throughout-the-indexing-process
Есть несколько мифов по поводу того, как Google индексирует SPA-приложения. Например, что боты-краулеры не умеют в JavaScript совсем. Или что для обхода сайтов Google использует древние версии Chrome. И другие.
Беда в том, что у Google нет ни одной полной странички с документацией, как именно поисковик обходит сайты и как краулеры эти самые сайты загружают, обрабатывают и индексируют. И даже та документация, что есть, не даёт полного понимания, что сделать, чтобы бот точно всё распарсил правильно. Оно и понятно: зная точную механику, можно стать повелителем SEO.
Vercel вместе с MERJ провели эксперимент, обложив 100000 запросов от гуглобота разными замерами. Как именно они это сделали, лучше посмотреть в статье, есть даже примеры кода. И получили они такие знания:
1. Googlebot отлично справляется с любым JavaScript. Синхронным, асинхронным, из фреймворков.
2. Рендерит он только страницы с HTTP-кодами 200 и 304. Остальные коды не рендерит в принципе. Поэтому не забывайте отправлять корректные коды ошибок на страницы, это влияет на позиции в выдаче.
3. Googlebot умеет находить ссылки внутри JavaScript, не только в HTML. Причём смотрит он именно на готовые ссылки, не encoded URL.
4. Наличие
sitemap.xml значительно ускоряет обработку ботом, что изменилось на сайте. То есть если вы боретесь за актуальность ссылок в поисковой выдаче, на sitemap.xml надо обратить внимание в первую очередь.5. Метатег
noindex работает. Но только если он пришёл в HTML, а не вставился при помощи JavaScript уже на клиенте. Если вы прячете странички от индексации уже на клиенте — это не работает, нужно уносить логику на сервер.6. Тяжёлые страницы с большим количеством JavaScript краулятся медленнее, могут долго висеть в очереди. Поэтому перфоманс страницы всё-таки влияет на SEO.
7. Если в
robots.txt запретить нечаянно доступ к папкам со скриптами и другими ассетами, они не загрузятся. Проверьте свой robots.txt, нет ли там чего-нибудь лишнего.Понятно, что по сути это снепшот текущего состояния краулинга, который основан на предположениях и выводах из корреляции. Но всё равно это лучше, чем ничего. Как минимум можно не бояться, что JavaScript у поисковика не работает, и ради этого пилить отдельные версии сайта.
https://vercel.com/blog/how-google-handles-javanoscript-throughout-the-indexing-process
Vercel
How Google handles JavaScript throughout the indexing process - Vercel
Over the years, Google's treatment of JavaScript has changed, leaving us with misconceptions of how it's indexed. Here, we debunk the myths.
🔥50👍15❤8👏3🤯2
Генератор пружинистого изинга
Кевин Грахеда поделился инструментом, который поможет генерировать пружинистую анимацию движения. Часто видел такие в элементах, которые хотят привлечь к себе внимание.
Анимации сделаны на функции
https://www.kvin.me/css-springs
Кевин Грахеда поделился инструментом, который поможет генерировать пружинистую анимацию движения. Часто видел такие в элементах, которые хотят привлечь к себе внимание.
Анимации сделаны на функции
linear(), так что не забудьте убедиться, что ваша браузерная поддержка в проекте позволяет ими пользоваться.https://www.kvin.me/css-springs
www.kvin.me
CSS Spring Easing Generator
A tool designed to intuitively generate spring animations for CSS linear(). Includes presets and customizable inputs for perceptual duration and bounce.
👍22❤🔥5🔥4
Браузерное расширение Resource Override для фронтендеров
Иногда возникает нужда переопределить какой-то ресурс для дебага. Например, сервер возвращает сломанный JSON, а хочется протестировать починенный, не делая релиз. Или вы сделали фикс библиотеки, которая лежит на CDN, и хотите посмотреть, как она себя ведёт в проекте.
В Chrome и Safari есть возможность подменять файлы на уровне DevTools. Но динамику так не протестировать, к тому же каждый отдельный файл подменять, когда хочется подменить целую папку, муторно.
Марио Хаманн делится браузерным расширением, которое работает как прокси. Если вам нужно подменить обращения к каким-нибудь ресурсам по маске, оно умеет подменять на другие ресурсы с сохранением этой самой маски.
А ещё при помощи этого расширения можно «патчить» чужие сайты в Интернете.
Не скажу, что это что-то очень уж новое. Подменять ресурсы можно разными способами. Патчить продакшен разные расширения вроде Tampermonkey тоже позволяют довольно давно. Но расширений-прокси 2-в-1 до этого не видел, показалось интересным, чтобы поделиться.
https://mariohamann.com/resource-override-for-frontend-development
Иногда возникает нужда переопределить какой-то ресурс для дебага. Например, сервер возвращает сломанный JSON, а хочется протестировать починенный, не делая релиз. Или вы сделали фикс библиотеки, которая лежит на CDN, и хотите посмотреть, как она себя ведёт в проекте.
В Chrome и Safari есть возможность подменять файлы на уровне DevTools. Но динамику так не протестировать, к тому же каждый отдельный файл подменять, когда хочется подменить целую папку, муторно.
Марио Хаманн делится браузерным расширением, которое работает как прокси. Если вам нужно подменить обращения к каким-нибудь ресурсам по маске, оно умеет подменять на другие ресурсы с сохранением этой самой маски.
А ещё при помощи этого расширения можно «патчить» чужие сайты в Интернете.
Не скажу, что это что-то очень уж новое. Подменять ресурсы можно разными способами. Патчить продакшен разные расширения вроде Tampermonkey тоже позволяют довольно давно. Но расширений-прокси 2-в-1 до этого не видел, показалось интересным, чтобы поделиться.
https://mariohamann.com/resource-override-for-frontend-development
mariohamann.com
Browser Extension "Resource Override" for Frontend Development
Describing my use of a browser extension that redirects URL patterns to wherever-you-want to boost specific frontend tasks
👍54❤🔥8❤3🔥3
Видео с альфа-прозрачностью на веб-страницах
Джейк Арчибальд задался вопросом, как эффективнее всего вставлять на веб-страницы видео, у которых есть прозрачный фон. Для всяких промо такое иногда нужно. И сделал интересные выводы.
- AVIF не подходит. Он умеет в анимации и прозрачность, под капотом использует видеокодек AV1, но Safari прозрачность не поддерживает, а использовать
- VP9 и HEVC уже лучше. Но на момент написания статьи в Chrome для Android был баг с прозрачностью, а в Firefox на Android часто останавливается воспроизведение.
- Собрать видео двойной высоты, где верхняя половина — видео, а нижняя половина — маска для видео, а потом при помощи WebGL маскировать одно другим. Вот такой подход у Джейка сработал везде, где нужно.
Чтобы вам не писать шейдеры самостоятельно, Джейк собрал веб-компонент, который берёт рендеринг на себя. И в статье приложил инструкцию, какие настройки применять в
https://jakearchibald.com/2024/video-with-transparency/
Джейк Арчибальд задался вопросом, как эффективнее всего вставлять на веб-страницы видео, у которых есть прозрачный фон. Для всяких промо такое иногда нужно. И сделал интересные выводы.
- AVIF не подходит. Он умеет в анимации и прозрачность, под капотом использует видеокодек AV1, но Safari прозрачность не поддерживает, а использовать
img для воспроизведения видео в принципе не самый правильный подход, потому что браузеры обрабатывают анимации по-другому.- VP9 и HEVC уже лучше. Но на момент написания статьи в Chrome для Android был баг с прозрачностью, а в Firefox на Android часто останавливается воспроизведение.
- Собрать видео двойной высоты, где верхняя половина — видео, а нижняя половина — маска для видео, а потом при помощи WebGL маскировать одно другим. Вот такой подход у Джейка сработал везде, где нужно.
Чтобы вам не писать шейдеры самостоятельно, Джейк собрал веб-компонент, который берёт рендеринг на себя. И в статье приложил инструкцию, какие настройки применять в
ffmpeg для каждого из форматов.https://jakearchibald.com/2024/video-with-transparency/
Jakearchibald
Video with alpha transparency on the web
It's better to do it yourself.
🤯38🔥19👍2❤1😍1
Forwarded from Ural Digital Weekend — официальный канал
Сайт, готовый ко всему: где и как вас могут открывать
А мы уже готовы делиться записями Ural Digital Weekend 2024! И первый доклад, ссылку на который мы опубликуем — «Сайт, готовый ко всему: где и как вас могут открывать» от Никиты Дубко, руководителя службы разработки в Яндекс.
Вспомните, где вы обычно тестируете свое веб-приложение. Скорее всего, у вас есть несколько вьюпортов, в которых вы быстро проверяете верстку и, возможно, пишете автотесты. И багов от пользователей почти нет — значит, все делаете правильно. Но как вашим сайтом пользуются на самом деле? Что нужно предусмотреть, чтобы сайт работал действительно почти везде?
В докладе вы найдете множество интересных примеров и отсылок. Заходите посмотреть 🙂
Ссылка на запись доклада на YouTube.
Ссылка на запись доклада в ВКонтакте.
Ссылка на презентацию: https://goo.su/NRSJ7J
А мы уже готовы делиться записями Ural Digital Weekend 2024! И первый доклад, ссылку на который мы опубликуем — «Сайт, готовый ко всему: где и как вас могут открывать» от Никиты Дубко, руководителя службы разработки в Яндекс.
Вспомните, где вы обычно тестируете свое веб-приложение. Скорее всего, у вас есть несколько вьюпортов, в которых вы быстро проверяете верстку и, возможно, пишете автотесты. И багов от пользователей почти нет — значит, все делаете правильно. Но как вашим сайтом пользуются на самом деле? Что нужно предусмотреть, чтобы сайт работал действительно почти везде?
В докладе вы найдете множество интересных примеров и отсылок. Заходите посмотреть 🙂
Ссылка на запись доклада на YouTube.
Ссылка на запись доклада в ВКонтакте.
Ссылка на презентацию: https://goo.su/NRSJ7J
YouTube
Сайт, готовый ко всему — Никита Дубко / Ural Digital Weekend 2024
«Сайт, готовый ко всему» — Никита Дубко (Яндекс, руководитель службы разработки)
Вспомните, где вы обычно тестируете свое веб-приложение. Скорее всего, у вас есть несколько вьюпортов, в которых вы быстро проверяете верстку и, возможно, пишете автотесты.…
Вспомните, где вы обычно тестируете свое веб-приложение. Скорее всего, у вас есть несколько вьюпортов, в которых вы быстро проверяете верстку и, возможно, пишете автотесты.…
👍32❤16🤔2
Project manager, program manager и product manager — зоны ответственности, навыки и образование
Видео выходного дня. Юлия Белозёрова объясняет, чем отличается Project Manager от Program Manager и Product Manager, и делится советами, на что стоит сделать упор, если хотите делать карьеру в одной из веток.
Для меня всегда было не очень понятно, чем эти роли кардинально отличаются, потому что я видел и проджектов, которые умеют в продуктовые метрики и развитие продукта, и продактов, которые двигают процессы в командах и занимаются наймом. Но разделение есть, понимать его хочется. После просмотра интервью мне стало понятнее.
https://www.youtube.com/watch?v=HapZUWiWvWA
Видео выходного дня. Юлия Белозёрова объясняет, чем отличается Project Manager от Program Manager и Product Manager, и делится советами, на что стоит сделать упор, если хотите делать карьеру в одной из веток.
Для меня всегда было не очень понятно, чем эти роли кардинально отличаются, потому что я видел и проджектов, которые умеют в продуктовые метрики и развитие продукта, и продактов, которые двигают процессы в командах и занимаются наймом. Но разделение есть, понимать его хочется. После просмотра интервью мне стало понятнее.
https://www.youtube.com/watch?v=HapZUWiWvWA
YouTube
Project manager, program manager и product manager – зоны ответственности, навыки и образование.
Симулятор "Интервью с пользователями для продакта". Обучение планированию, проведению и анализу интервью на живых кейсах. Начать заниматься можно прямо сейчас: https://productdo.it/customerresearch?utm_source=youtube&utm_medium=ahoy
Юля Белозёрова, Senior…
Юля Белозёрова, Senior…
👍8🥰5🤔4😱1
State of CSS 2024
У меня в планах на вечер сегодня пройти опрос State of CSS. Стараюсь делать это каждый год, чтобы своим мнением влиять на приоритеты браузеров. А браузерные деврелы результаты этих опросов точно используют, официально про это упоминают. И разработчики спецификаций на результаты смотрят. Так что всё не зря.
Для тех, кто никогда не участвовал в State of CSS: это такой опрос, где много вопросов про то, какие фичи вы знаете, какие нравятся, чего не хватает в CSS, какие фреймворки помогают или мешают работать и так далее.
Присоединяйтесь.
https://survey.devographics.com/en-US/survey/state-of-css/2024
У меня в планах на вечер сегодня пройти опрос State of CSS. Стараюсь делать это каждый год, чтобы своим мнением влиять на приоритеты браузеров. А браузерные деврелы результаты этих опросов точно используют, официально про это упоминают. И разработчики спецификаций на результаты смотрят. Так что всё не зря.
Для тех, кто никогда не участвовал в State of CSS: это такой опрос, где много вопросов про то, какие фичи вы знаете, какие нравятся, чего не хватает в CSS, какие фреймворки помогают или мешают работать и так далее.
Присоединяйтесь.
https://survey.devographics.com/en-US/survey/state-of-css/2024
State of CSS 2024
Take the State of CSS survey
⚡21❤13👌7❤🔥2
Частые заблуждения про оптимизацию LCP
Если вы работаете с оптимизацией перфоманса страниц, то метрика LCP (Largest Contentful Paint) точно попадалась вам на глаза. Это время от начала загрузки страницы до отрисовки самого большого блока во вьюпорте. Таким блоком может быть и текст, но часто это какая-то картинка, привлекающая внимание. И так как LCP является важной составляющей Core Web Vitals, приходится эту метрику оптимизировать.
В статье Брендана Кенни разбирается миф о том, что для оптимизации LCP достаточно сделать картинки меньше по размеру: использовать современные форматы изображений, сжимать картинки.
На самом деле до отрисовки картинки есть ещё несколько этапов, которые можно посчитать в секундах: время до первого байта, время на задержку запроса за ресурсом, время загрузки ресурса и время рендеринга. И, как показывает статистика, на 75-м перцентиле исследованных сайтов с высокими значениями LCP время на загрузку составляет меньше 10% от всего времени LCP. Да, эти 10% тоже важно оптимизировать, но как будто стоит обратить внимание на остальные этапы.
Брендан советует обращать внимание на следующие этапы:
- Оптимизировать TTFB, время до первого байта. Если у вас нет CDN, а у пользователя слабая сеть, то на TTFB может уходить около 2.5 секунд (на исследованных сайтах), а это очень много.
- Сделать так, чтобы важный ресурс запрашивался заранее. Подсказать браузеру через
- Исследовать задержки рендеринга. Возможно, где-то у вас есть кусок JS, который тормозит запрос за картинкой или отрисовку во вьюпорте. Этот совет в том числе и другие метрики улучшит.
Больше полезных чисел — по ссылке.
https://web.dev/blog/common-misconceptions-lcp
Если вы работаете с оптимизацией перфоманса страниц, то метрика LCP (Largest Contentful Paint) точно попадалась вам на глаза. Это время от начала загрузки страницы до отрисовки самого большого блока во вьюпорте. Таким блоком может быть и текст, но часто это какая-то картинка, привлекающая внимание. И так как LCP является важной составляющей Core Web Vitals, приходится эту метрику оптимизировать.
В статье Брендана Кенни разбирается миф о том, что для оптимизации LCP достаточно сделать картинки меньше по размеру: использовать современные форматы изображений, сжимать картинки.
На самом деле до отрисовки картинки есть ещё несколько этапов, которые можно посчитать в секундах: время до первого байта, время на задержку запроса за ресурсом, время загрузки ресурса и время рендеринга. И, как показывает статистика, на 75-м перцентиле исследованных сайтов с высокими значениями LCP время на загрузку составляет меньше 10% от всего времени LCP. Да, эти 10% тоже важно оптимизировать, но как будто стоит обратить внимание на остальные этапы.
Брендан советует обращать внимание на следующие этапы:
- Оптимизировать TTFB, время до первого байта. Если у вас нет CDN, а у пользователя слабая сеть, то на TTFB может уходить около 2.5 секунд (на исследованных сайтах), а это очень много.
- Сделать так, чтобы важный ресурс запрашивался заранее. Подсказать браузеру через
<link rel="preload">, например. И пока парсер реально дойдёт до картинки в коде и дождётся выполнения всех синхронных JS-операций, за это время часть полезной работы уже будет проделана.- Исследовать задержки рендеринга. Возможно, где-то у вас есть кусок JS, который тормозит запрос за картинкой или отрисовку во вьюпорте. Этот совет в том числе и другие метрики улучшит.
Больше полезных чисел — по ссылке.
https://web.dev/blog/common-misconceptions-lcp
web.dev
Common misconceptions about how to optimize LCP | Blog | web.dev
Explore common misconceptions about optimizing Largest Contentful Paint (LCP) by looking beyond image optimization and considering factors like Time to First Byte (TTFB) and resource load delay.
❤37👍10😁1