![Иллюстрация](http://img607.imageshack.us/img607/5172/20110225143534.jpg)
По правде говоря, идея тестирования пришла не просто так, в планах перевести довольно большой сайт, собранный на коленке из нескольких скриптов.
Один мой знакомый говорил — "Не ломай, то что работает", я решил опровергнуть это утверждение.
Для начала я должен убедиться, что Инстант будет легко работать при большом количестве материалов и при приличной аудитории. Началом решил выбрать фотогалерею.
Исходные данные:
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 фотографию (скрин выше), в тот момент остальных альбомов ещё не было.
![Иллюстрация](http://img18.imageshack.us/img18/4936/20110225145745.jpg)
Наблюдения: всё отлично летает, навигация по страницам с фотографиями прекрасная, никаких проблем, задержек.
2) Создано 200 новых альбомов, в каждый загружено по 50 фотографий, суммарно 10к, итого 12к фото в фотогалерее.
![Иллюстрация](http://img824.imageshack.us/img824/6769/20110225150549.jpg)
Наблюдения: уже в процессе наполнения начались тормоза при открытии списка альбомов "localhost/photos", когда была заполнена первая сотня альбомов процесс обновления странички составлял порядка 20 секунд, но это меня не остановило, я продолжил и наполнил все 200 альбомов. По умолчанию в Инстанте все альбомы выводятся единым списком, поэтому итог стал печальным, процесс открытия страницы с альбомами занимает порядка 30 секунд на локалхосте (компьютер 2,8GHz, 2Gb) и то только если открывать одновременно одну страницу. Времени на исполнение php было выделено 60 секунд, при открытии одновременно 2-х страниц с альбомами они открывались только к концу таймаута, при открытии большего кол-ва страниц открывалась максимум одна, остальные падали в эррор.
Хочу спросить совета, куда теперь двигаться, как оптимизировать альбомы? Внутри каждого альбома проблем нет, всё летает.
"По умолчанию" в настройках фотогалереи стоит случайный показ мини-эскизов, даст ли это существенную разгрузку? И ещё, как сделать постраничную нафигацию?
Что порадовало. Количество фотографий практически никак не сказалось на размере базы данных, 12к фоток и 200 альбомов занимают ВСЕГО 1,2 Мегабайта! Так мало я ещё никогда не видел ни в одной популярной cms.
![Иллюстрация](http://img219.imageshack.us/img219/8696/20110225152409.jpg)
Работа галереи внутри альбомов практически незаметна, что альбом с 2к фото, что 50 (пробовал с разным "Выводом фотографий").
Прошу оказать помощь советами с оптимизацией списка галерей.
Следующей на тесте будет "Доска объявлений".
UPD:
По совету, отключил в настройках вывод эскизов. К сожалению результата не дало, засек на секундомере, окно ниже открывалось 25 секунд, при отключении блок с последними фото эффекта никакого тоже не принесло, теже 25 секунд.
![Иллюстрация](http://img825.imageshack.us/img825/985/20110225170250.jpg)
1. данный материал необходимо было писать на форуме (см. правила сайта)
2. вы упустили огласить конфигурационные файлы своего софта.
3. необходимы соответствующие индексы в таблицах
4. в каждом конкретном случае необходимо оптимизировать запросы, согласно требований — движок — это в первую очередь универсальность.
5. ваш запрос (который вероятно тормозит) находится в файле \components\photos\model.php
метод getSubAlbums
попробуйте заменить его на
$sql = "SELECT a.*, IFNULL(COUNT(f.id), 0) as content_count FROM cms_photo_albums a LEFT JOIN cms_photo_files f ON f.album_id = a.id AND f.published = 1 WHERE (a.parent_id=$parent_id) AND a.published = 1 AND a.NSDiffer = '{$differ}' GROUP BY a.id ORDER BY $albums_orderby $albums_orderto";
Автору: все же я склоняюсь к тому, что у вас проблема с настройкой сервера, ибо 2000 фото это ничто, даже на базе без индексов.
$sql = "SELECT a.* FROM cms_photo_albums a WHERE (a.parent_id=$parent_id) AND a.published = 1 AND a.NSDiffer = '{$differ}'";
> По совету, отключил в настройках вывод эскизов.
вас не правильно информировали, это вам ничего не даст.
2. вы упустили огласить конфигурационные файлы своего софта.
это настройки серверной части
![Иллюстрация](http://img97.imageshack.us/img97/6372/20110225210913.jpg)
3. необходимы соответствующие индексы в таблицах
Для чистоты эксперимента и упрощения моделирования, настроек Инстанта не менял после установки.
5. ваш запрос (который вероятно тормозит) находится в файле \components\photos\model.php
Выполнил данную рекомендацию, скорость открытия списка с альбомами действительно возросла причем, как с эскизами, так и без. Только потерялся вывод количества фотографий в альбоме и порядок сортировки "По дате — По убыванию", теперь она такая, как на скриншоте ниже, как бы не была изменена. Если количество фотографий не важно, то вот сортировку жаль.
![Иллюстрация](http://img823.imageshack.us/img823/422/20110225212712.jpg)