Немного про оптимизацию TravelFAQs, которая почти закончена

· автор BaRoN · На чтение уйдёт 5 минут · (912 слов)

Я уже рассказывал, что приобрёл себе сайт travelfaqs.ru, и даже собирался ежедневно на него писать. Но тут появились всякие неожиданные факторы, возникло ощущение, что сайт-то говно. Причём когда-то давно, похоже, он был технически нормальным, но к масштабированию и росту он оказался совершенно негоден. В итоге вместо ежедневного писательства (на самом деле, конечно, хотелось научиться заказу статей) пришлось в свободное время возиться с движком сайта, разбираться, где, что и как устроено. Казавшийся сначала нормальным движок AltoCMS уже начинает казаться глючным экскрементом, ещё похуже чем оригинальный LiveStreet. Вот тут я писал слишком оптимистично про AltoCMS. Потом ещё оказалось, что эти оптимизации кой-чего сломали, а также в плане минификации есть куда двигаться дальше.

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

Когда я получил сайт в виде tar-архива, он даже не хотел распаковываться нормально. Не знаю, с чем это могло бы быть связано, но потом мне передали сайт в виде zip, и тот распаковался. Но в общем и в целом, архив на 4Гб примерно - это очень немало. Куча из этого - мусорные файлы, которые даже не удалялись при чистке кэшей. Было удалено вручную. Далее выяснилось, что размер картинок далеко не оптимальный, в них куча мусора, метаданных и вообще их можно пережать. Очень неспеша я использовал Kraken и TinyPNG, но картинок десятки тысяч - в один прекрасный момент я решил, что тысяча картинок в месяц это совершенно беспонтово, нарегистрировал кучу аккаунтов на TinyPNG и сделал всё в два вечера. Как это было, можно почитать в статье про пережимание картинок. После того, как я вычистил ненужное, а картинки оптимизировал, сайт стал весить на диске 775 Mb. Ещё позавчера это было 900 Мб. Я и пишу сейчас про сайт, и продолжаю пережимать картинки :). Пока писалась статья, объём сайта уменьшился и вовсе до 735 Мб.

К сожалению, моим планам про оптимизацию движка не суждено было сбыться. Каких-то определённых конкретных тормозов вычленить у меня не получилось, да и я не настоящий PHP-шник ;-). Хочется применить любимую технику оптимизации с кэшем в статичных файлах, но… у меня сейчас используется Caddy вместо nginx. А опыт работы с кэшем в статических файлах у меня жёстко привязан к nginx :). Пока что придётся оставить всё как есть. Впрочем, скорость загрузки удалось сократить примерно до 1.1 секунды (получилось примерно в 1.5 раза) - уже неплохо.

Сайт на всякий случай перевёл на HTTPS (точнее, до сих пор перевожу, потому что постоянно всплывают места, где жёстко забиты адреса по протоколу http). Делается это запросами вида:

UPDATE prefix_topic_photo SET path = REPLACE(path, 'http://travelfaqs.ru/', 'https://travelfaqs.ru/');

Но таблиц на сайте немало, а перебирать весь дамп не хочется. Так что когда нахожу какой-то новый файл, к которому сервер обращается по http - ищу, какая таблица на него ссылается. И обращаю ту таблицу в свою веру.

Самой большой проблемой, впрочем, было открытие слишком большого количества файлов. При первом входе на сайт загружалось около 500 различных файлов, элементы меню, аватары, картинки… Что с этим делать, я ещё до конца не придумал. С заглавной страницы (которая изначально весила 8 Мб) были убраны в CSS-спрайт значки флагов, самые большие аватарки с заглавной страницы были пережаты (например, у какого-то из блогов аватарка была размером примерно 3900х3900 пикселей). Число это делилось нацело на 16, в итоге картинка была уменьшена в 256 раз (а на диске раз в 10). После этих мытарств, количество загружаемых файлов снизилось до 67, а их общий размер упал до 1.3 Мбайт. Конечно, есть куда расти, но учитывая то, что это всё-таки социальная сеть и с кучей картинок - сойдёт.

Ещё одной проблемой стали кастомизации AltoCMS. В каталогах с плагинами лежат изменения в шаблоны сайта, и совершенно непонятно, что и в каком порядке будет применяться. К тому же, там ещё и JS/CSS файлы лежат, которые добавляются в минификатор через PHP-класс плагина, попадают в ещё один очередной бандл, тем самым создают лишний запрос. Возможно, я ужасный человек, но в общем-то я вытащил эти CSS и JS в каталог с темой и научил их правильно объединяться и минифицироваться. Будем надеяться, плагины мне не придётся обновлять больше никогда. :D

Вообще, в объединении стилей в Alto теперь я собаку съел. Повозиться пришлось долго, но теперь абсолютно все стили, кроме кажется TinyMCE, попали в один большой файл стилей, который потом проходит минификацию. С JS всё чуть хуже, сейчас пришлось оставить 4 файла, вообще буду стремиться к их сокращению до 2 (TinyMCE не получилось грузить «по требованию», да и будучи засунутым в единый файл, он перестаёт работать. Хотя - хоть отложенную загрузку через defer ему сделаю, и то хлеб). Также я не знаю, как научить AltoCMS правильному порядку в хедере. Надо сделать так: свои JS - внешние JS - инлайн JS - стили. Сейчас это всё вразнобой.

Ещё я честно не знаю, почему сразу после переноса ко мне слетели стили (то есть я догадываюсь, конечно, что наверное у меня используется какой-то не такой CSS файл), но пришлось и эту проблему решать. Теперь местами на сайте аватарки выглядят как кусок говна, зато хотя бы не ломают вёрстку. Надо с этим что-то сделать, но я не верстальщик =) Идеально было бы сделать новый дизайн, но там шаблоны на SMARTY!!! Я этого убожества не видел лет 10. Очень не хочется лезть в эти дебри. Придётся оставить как есть.

Так или иначе, больше откладывать наполнение сайта смысла нет. Технически он уже стал сильно лучше, чем был раньше; надо подкорректировать мелкие проблемы с налезающим друг на друга текстом и пару 404 ошибок, и я наконец-то реально смогу на него писать. Такие дела. Писать правда почему-то лень, но думаю, что если себя заставить, дальше пойдёт нормально.

Полезное