Не при помощи API, и не при помощи прямых запросов в базу (боже упаси). Это называется RPC, и основной стандарт сейчас это gRPC + protobuf. Можешь мне про это не рассказывать.
<picture> <source src="image.webp"/> <img src="image.jpg"> </picture>
Если есть поддержка - загрузиться webp. Если нет - jpg.
Можно даже не стороне сервера отдавать нужный файл, если в заголовке Accept есть image/webp.
И гонор убавь свой.
Scumtron, сомневаюсь что вы сможете всегда оставаться в рамках готового решения.
Можно посмотреть на ceph/glusterfs, они умеют в нормальный ребалансинг и динамическое добавление нод в кластер.
Проблема шардинга по распределенным системам это хеш функция которая выбирает шард, а точнее результат работы хешфункции при удалении/добавлении ноды в кластер. Добавление ноды в кластер затрагивает данные на других нодах, и приходиться делать перебалансировку на всей системе, а это очень трудозатратная процедура, которая может привести к падению всей системы, если запустить её не вовремя.
Чтобы делать ребалансинг части системы, обычно берут либо алгоритм консистентного хеширования, либо его улучшенную версию с bounded loads, чтобы избавиться от хот спотов. Но это все потребует писанины низкоуровневого кода, и будет на порядок производительней (хотя, смотря как написать).
Я бы сделал как-то так.
А каким образом сервер очередей поможет с раздачей видео? С загрузкой - понятно, очереди решают задачу, с раздачей не могу понять куда оно.
Scumtron, сколько траффика вы раздаете в час? Насколько по гео размазаны клиенты? Какое распределение по запросам: например в основном запрашивают 200-300 файлов, или клиенты запрашивают по всем 100Тб равномерно?
Мобильное приложение по цене встанет раза в 3-4 дороже мобильной темы. Это при условии что юзать React Native, который потом можно кроссплатформенно использовать на Android/iOS. И это, внезапно, будет та же мобильная верстка, просто не открытая в браузере телефона.
Поддержка добавляется двумя строчками кода в html (попутно можно прикрутить ретина версии изображений).
Зачем вообще ставить этот счетчик? Уберите его да и все.
SET profiling=1;-- ваш запросSHOW PROFILE;
С какими параметрами запускаете? Вот что у меня вышло из вашего jpg. Так-же учитывайте, что ваш JPG может быть сделан со студийной фотки. WebP сделанный из этого JPG так-же возьмет все артефакты в себя, т.е. его так-же нужно делать со студийной фотки.
cwebp 100045.jpg -m 6 -q 80 -o 100045.webp
Можно ещё с параметрами поиграться, будет выше качество. Сейчас ваш вес 110кб и видны артефакты, у меня вес 50кб, т.е. в два раза меньше вашего webp, тоже есть к чему придраться, но мне кажется он похож на jpg даже больше чем ваш, при размере меньше.
Но вообще webp под товарные фотки нужно тюнить, иначе можно легко получить мыльные фотографии которые будут не приятны для человеческого глаза.
Redgektor, я юзаю стандартную либу от гугла. Покажите примеры ваших фоток.
Под крупные проекты где есть финансирование, две версии: десктоп + адаптив, и отдельно мобильная.
Под мелкие проекты или проекты с небольшим бюджетом, одна версия - адаптив.
Картинки грузите через Intersection Observer API, когда картинка попадает в viewport, кодом подменяете значение src на значение из атрибута. Можно вообще красиво сделать через blur и картинку в 8х8 пикселей, как это сделано на медиуме.
Если есть возможность, можно использовать WebP. Прикрутить легко, если браузер передал accept: image/webp, то можно отдать webp версию. Ну и через picture тоже можно прописывать, тогда автоматом fallback будет.
Правда у WebP свои проблемы, на товарах немного могут искажаться цвета (синий станет немного с фиолетовым, например), и у товаров немного плоскй вид получается.
Я на одном магазине внедрял WebP, вес страницы суммарно с 2.8Мб опустился до 600+ кб, это 75% экономии. И это без ленивой подгрузки.
bombapiter, судя по LA, до апгрейда ещё долго. Сделайте такой конфиг
max_connections=50# InnoDBinnodb_buffer_pool_size=1Ginnodb_buffer_pool_instances=1# Query Cachequery_cache_size=32Mquery_cache_limit=1M
Можно так-же выключить query_cache вообще, в вашем случае думаю это будет даже лучше:
query_cache_type=0query_cache_size=0