Работа Фотогалереи при большом количестве материалов

мой тестдрайв и вопросы

#1 25 февраля 2011 в 22:03
Во многих популярных CMS уязвимым местом в плане нагрузки на хостинг является фотогалерея. Мне стало интересно, как же себя поведет InstantCMS.

Иллюстрация

По правде говоря, идея тестирования пришла не просто так, в планах перевести довольно большой сайт, собранный на коленке из нескольких скриптов.

Один мой знакомый говорил — "Не ломай, то что работает", я решил опровергнуть это утверждение.

Для начала я должен убедиться, что Инстант будет легко работать при большом количестве материалов и при приличной аудитории. Началом решил выбрать фотогалерею.

Исходные данные:
InstantCMS 1.7 с настройками "по умолчанию"
localhost с установленной сборкой сервера Vertrigo (Apache 2.0.64, PHP 5.2.17, MySQL 5.0.91)

Заливал картинки в рукопашную через админку используя "Массовую загрузку фото". К двум имеющимся альбомам было создано ещё 200 пустых ("0001"-"0200").

2 теста: 1) много фото в одном альбоме 2) много альбомов

1) В первый альбом залил 2101 фотографию (скрин выше), в тот момент остальных альбомов ещё не было.

Иллюстрация

Наблюдения: всё отлично летает, навигация по страницам с фотографиями прекрасная, никаких проблем, задержек.

2) Создано 200 новых альбомов, в каждый загружено по 50 фотографий, суммарно 10к, итого 12к фото в фотогалерее.

Иллюстрация

Наблюдения: уже в процессе наполнения начались тормоза при открытии списка альбомов "localhost/photos", когда была заполнена первая сотня альбомов процесс обновления странички составлял порядка 20 секунд, но это меня не остановило, я продолжил и наполнил все 200 альбомов. По умолчанию в Инстанте все альбомы выводятся единым списком, поэтому итог стал печальным, процесс открытия страницы с альбомами занимает порядка 30 секунд на локалхосте (компьютер 2,8GHz, 2Gb) и то только если открывать одновременно одну страницу. Времени на исполнение php было выделено 60 секунд, при открытии одновременно 2-х страниц с альбомами они открывались только к концу таймаута, при открытии большего кол-ва страниц открывалась максимум одна, остальные падали в эррор.

Хочу спросить совета, куда теперь двигаться, как оптимизировать альбомы? Внутри каждого альбома проблем нет, всё летает.

"По умолчанию" в настройках фотогалереи стоит случайный показ мини-эскизов, даст ли это существенную разгрузку? И ещё, как сделать постраничную нафигацию?

Что порадовало. Количество фотографий практически никак не сказалось на размере базы данных, 12к фоток и 200 альбомов занимают ВСЕГО 1,2 Мегабайта! Так мало я ещё никогда не видел ни в одной популярной cms.

Иллюстрация

Работа галереи внутри альбомов практически незаметна, что альбом с 2к фото, что 50 (пробовал с разным "Выводом фотографий").

Прошу оказать помощь советами с оптимизацией списка галерей.

Следующей на тесте будет "Доска объявлений".

UPD:

По совету, отключил в настройках вывод эскизов. К сожалению результата не дало, засек на секундомере, окно ниже открывалось 25 секунд, при отключении блок с последними фото эффекта никакого тоже не принесло, теже 25 секунд.

Иллюстрация

1. данный материал необходимо было писать на форуме (см. правила сайта)
2. вы упустили огласить конфигурационные файлы своего софта.
3. необходимы соответствующие индексы в таблицах
4. в каждом конкретном случае необходимо оптимизировать запросы, согласно требований — движок — это в первую очередь универсальность.
5. ваш запрос (который вероятно тормозит) находится в файле \components\photos\model.php
метод getSubAlbums

  1. $sql = "SELECT a.*, IFNULL(COUNT(f.id), 0) as content_count
  2. FROM cms_photo_albums a
  3. LEFT JOIN cms_photo_files f ON f.album_id = a.id AND f.published = 1
  4. WHERE (a.parent_id=$parent_id) AND a.published = 1 AND a.NSDiffer = '{$differ}'
  5. GROUP BY a.id
  6. ORDER BY $albums_orderby $albums_orderto";
попробуйте заменить его на
  1. $sql = "SELECT a.*
  2. FROM cms_photo_albums a
  3. WHERE (a.parent_id=$parent_id) AND a.published = 1 AND a.NSDiffer = '{$differ}'";
Автору: все же я склоняюсь к тому, что у вас проблема с настройкой сервера, ибо 2000 фото это ничто, даже на базе без индексов.

> По совету, отключил в настройках вывод эскизов.

вас не правильно информировали, это вам ничего не даст.

Fuze

2. вы упустили огласить конфигурационные файлы своего софта.

это настройки серверной части
Иллюстрация

3. необходимы соответствующие индексы в таблицах

Для чистоты эксперимента и упрощения моделирования, настроек Инстанта не менял после установки.

5. ваш запрос (который вероятно тормозит) находится в файле \components\photos\model.php

Выполнил данную рекомендацию, скорость открытия списка с альбомами действительно возросла причем, как с эскизами, так и без. Только потерялся вывод количества фотографий в альбоме и порядок сортировки "По дате — По убыванию", теперь она такая, как на скриншоте ниже, как бы не была изменена. Если количество фотографий не важно, то вот сортировку жаль.

Иллюстрация
#2 25 февраля 2011 в 22:28
Занятно :)
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.