Dima DD писал(а):
А вот, может, немного не в тему - про ленту превьюшек на странице фотоработы сверху.
Насколько сложно сделать так, чтобы там показывались превьюшки не просто из той конкретной галереи, в которую входит работа, а из той выборки, с которой был переход на страницу работы? Т.е., например, если я смотрю снимки за какой-то период, или какого-то автора, или результаты поиска, ну и также если выборкой была вся тематическая галерея. Так лента была бы гораздо более полезной и востребованной, по-моему.
Сразу скажу зачем это делалось -
Во-первых - в некоторых непонятных ситуациях полоса вела непредсказуемо.
Во-первых с точки зрения производительности: количество фото в некоторых категориях уже приближается к 5-10 тыс., а старый алгоритм работал по методу последовательного перебора. Т.е. на каждый просмотр фото конкретным пользователем мы фактически перелопачиваем по нескольку тысяч фото, чтобы показать вверху всего лишь пять иконок. И эта выборка делается не сервером (не запросом), а вычитывается целиком последовательность и обрабатывается скриптом php. Все это приводит к достаточно серьезной нагрузке на сервер, и не надо забывать что "смотрят" не только люди... поисковые роботы прочесывают сайт более основательно и без "это не хочу смотреть, это не буду".
Я конечно не стану утверждать, что это основная причина вроде бы непонятных, непредсказуемых "просадок" сайта, когда он начинает зверски тормозить. Но понятно, что это место, которое реализовано в оригинале не лучшим образом, поэтому я и занялся переделкой. Дальше, как вы понимаете, количество изображений будет только расти и ситуация будет усугубляться...
В чем суть (большинству наверное будет непонятно, но думаю среди нас есть люди, понимающие в БД)...
Сейчас для отображения полосы мы получаем от сервера готовый фрагмент из нескольких фото, хотя фактически в два этапа (до и после текущего фото), но тем не менее это не тысячи и (не десятки тысяч в будущем), а всего несколько записей. Соотв. это снижение нагрузки минимум в сотни раз.
Но, с другой стороны, такие короткие выборки можно делать только на гарантированно упорядоченной последовательности (например по порядку загрузки, или по id-изображения). Этим и объяснятся, почему "сбивается" оригинальная сортировка (когда из галереи мы переходим на просмотр фото). Например даже дата загрузки (хотя она с точностью до секунды) может совпадать у разных фото - у нас есть возможность грузить "пачкой", а сервер два и более изображения может отработать менее чем за секунду и разумеется разные пользователи могут параллельно грузить. Фильтровки конечно делать можно (типа по пользователю, по личному альбому и т.п.), сейчас пока реализована простейшая - по категории фото. Но реализация всех сортировок - это переход к непредсказуемым, неоднозначным последовательностям. Мы не сможем коротким запросом выбирать ближайшее окружение возле текущего фото. Это уже получение всей выборки и "вырезка" скриптом нужного фрагмента возле текущего фото. Конечно можно получать только список id, а не записи целиком (как сделано в оригинале), и потом по вырезке из id подтянуть нужные записи...