Pull to refresh
13
0
Dmitrii Pashkevich @dipiash

Full-stack developer

Send message

Финально все конфигурации объединяются тут: в index.js файле

Интересно сколько от него в итоге Вы взяли?

На текущий момент в набор компонентов, которые мы модифицировали, вошли около 40. Еще около 10 компонентов используются без модификации, как сервисные комплненты врапперы. Также используем хуки и провайдеры (формы, нотификации и пр.)

Некоторые компоненты было сложно модифицировать так, как нам нужно по дизайну и поэтому их исходный код мы взяли из исходной библиотеки и уже модифицировали его (например компоненты для работы с календарем/выбором дат).

Нет ли ситуации, что Кит начинает слишком сильно направлять дизайн-мысль фронт-эндера?

В целом такого нет. Единственный компонент, который претерпел большое обсуждение это MultiSelect, так как у него есть несколько контекстов использования и не хотелось собирать из него франкинштейна

может быть, в процессе поиска, Вам попадались лаконичные, лёгкие UI киты?

А какой кейс нужно решить: просто взять готовый и использовать или нужно собирать несложный кастомный дизайн?

В 2к20 все бы базовые статьи про React писать :)
Почему, когда только видишь заголовок стать в подобном стиле, в конце всегда появляется крохотный абзац о Svelte в котором нет ничего подробного?
Есть вот эти ребята, с community лицензией — www.ag-grid.com довольно удобный и гибкий инструмент.
Спорное решение запускать с флагом `-i N`. Производительность у этого подхода сильно меньше, чем запустить столько-же отдельных экземпляров приложения на разных портах и балансировать их, например, через nginx.
Ваш вариант:
const getResource = async () => {
        const res = await fetch(JSON_URL);

        return await res.json();
    };


И этот вариант:
const getResource1 = async () => {
        const res = await fetch('https://api.zaycev.fm/api/v1/channels');

        return res.json();
    };


Вернут одинаковые результаты.
Однако результат асинхронной функции уже завернут в Promise.resolve (не явно). Т.о. в первой функции дополнительный await накладывает небольшой оверхед — по сути делается таже самая работа 2а раза.
Это не совсем по теме стать, но относится к приведенному примеру.
Пожалуйста не делайте так:
 return await res.json();

Почему можно посмотреть тут:
1. Why Using `return await` Is a Bad Idea?
2. Disallows unnecessary return await (no-return-await)
Что бы не быть голословным, взял реальный девайс для теста)
Залил видео в github или ссылка на прямое скачивание с github.
Просто показалось странным снимать экран телефона и выкладывать в статью, поэтому делал на эмуляторе.
Все может зависить от устройства, поэтому на 100% утверждать не могу, что нигде не работает. Но у коллег с iPhone'ами на работе тоже в фоне не воспроизводится.

upd.
Если не блокировать экран, то треки переключаются как надо.
Я же правильно вижу, что это эмулятор?
Когда я тестировал на эмуляторе, то сталкивался с таким (на каких-то работает, на каких-то нет). Предположу, что вы заменяете src у audio тэга. На реальном девайсе это не работает :(
А зачем изучать чьи-то баги, когда можно сделать красиво, просто, быстро и более функционально! Спросите пользователей, они скорее поставят программу и будут пользоваться полноценным функционалом, чем не поставят и звук будет заикаться или вовсе перестанет играть.

И потреять львиную долю пользователей из за того, что человек не может получить доступ к какой-то «условной фиче» здесь и сейчас?
Нет уж, в такие игры я не играю. И предпочту охватить большинство платформ через различные решения, что бы дать человеку чем-то пользоваться в том месте, куда он пришел сразу, а не прошел через 100500 редиректов.

А если вспомнить про аппаратное ускорение и приоритеты процессов браузера, то они совсем не такие, каких ждут пользователи.

Опыт показывает, что большинство пользователей даже не задумываются о приорететах процессов браузера, они просто пользуются.
Я, в этой статье, говорю про воспроизведение музыки на web сайтах через браузеры, а не через какие-то нативные решения типа приложений на Android.

Если быть честным и говорить об универсальности, то в контексте какой либо платформы. В универсальность нативных приложений на iOS / Android — я могу еще поверить, но утверждать со 100% гарантией я бы не стал. Что касается web браузеров, я бы вообще не говорил о какой-то универсальноти с учетом всего зоопарка.

Хорошая статья, спасибо!


А что насчёт следующих моментов:
1) перезапуск
приложения или контейнера при падении
2) graceful reload при деплое новой версии приложения
Могли бы вы поделиться своим видением как это делать?

К сожалению, данные API в runtime TS мне никак без валидатора не поможет прочекать (в отличие от тех же нормальных статических языков). Консистентность кода в TS? ровно до того момента когда надоест бороться с быстро развивающимися библиотеками (а тайпинги для них отстают), придет манагер и скажет: «что-то долго» и т.п. => вы свалитесь к any.
Так что, давайте оставим статическое статическому, а динамическое динамическому и не будем пытаться сделать из одного другое и наоборот
Да поможет — так как на клиент приезжает уже готовый html со всеми необходимыми данными (а уже потом приезжает все остальное JS приложение).
Google bot не имитирует события клика. Он парсит ссылки на странице, по которым потом ходит. Эти ссылки(страницы) в свою очередь также будут отрендерены на сервере.

Подробнее можно посмотреть, например, тут — support.google.com/webmasters/answer/81766?hl=ru
Versioning — управление версиями.

Спасибо за уточнение. Поправил.

Information

Rating
Does not participate
Location
Лимассол, Government controlled area, Кипр
Registered
Activity

Specialization

Frontend Developer, Fullstack Developer
Lead
JavaScript
TypeScript
Node.js
React
NextJS
GraphQL
Docker
GitLab
Unix Shell Scripting
CSS