Одна из причин тормознутости сайта и как мы этого избегаем

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

Но есть одна застарелая «болезнь» у LS, которая тоже могла приводить к тому, что движок работал «вхолостую», сжирая ресурсы сервера и задерживая загрузку страницы. «Болезнь» эта — обработка движком несуществующих статичных файлов, такких, как картинки, CSS-файлы, JS-файлы и т.д. Например, что будет в LS, если в топик сначала загрузить какую-то картинку, а потом ее удалить с диска? Или если указать неверный (отсутствующий) CSS-файл? Допустим, будет у нас на странице такой вот код:
<link rel='stylesheet' type='text/css' href='http://altocms.ru/default/style.css' />

Но при этом сам файл style.css в папке default отсутствует. И что у нас получится?

А получится у нас вот что: сначала веб-сервер постарается этот файл у себя найти. И не найдя, передаст управление движку. А движок сначала загрузит все плагины и обязательные модули, подключившись попутно к базе данных, потом попробует передать обработку какому-нибудь экшену, потом выяснит, что нет экшена, который должен отрабатывать эту ссылку, и передаст управление экшену ActionError, которые сформирует сообщение об ошибке, потом будет вызваен Viewer, который загрузит соответвтующий шаблон, отрисует страницу об ошибке, и отдаст эту страницу браузеру, дополнив ее кодом 404 (т.е. страница не найдена).

Видите, как много телодвижений? И все это нещадно поедает и память, и процессорное время сервера, и значительно увеличивает время отображения страницы у посетителя.

Теперь я расскажу, как это организовано в Alto CMS: когда движок принимает управление на себя, он проверяет, а не запрашивается ли статичный файл? И если это так, то немедлено прекращает выполнение, выдав браузеру код 404. Все! Никакие плагины, модули, вьюеры не подгружаются — все, как ножом обрезается.

Конечно, когда посещаемость сайта не такая уж и большая, лишняя пара-другая секунд погоды особо не сделают, и можно об этом даже не думать. Но когда трафик растет, начинается борьба за каждую долю секунды. И тут решение Альто будет как нельзя кстати.

13 комментариев

0
На текущий момент было бы хорошо публиковать все топики на главной
0
done
0
Не вижу как поставить статье плюс. Довольно занятно.
0
Не пробовали запускать альту на nginx + php-fpm?
0
Я лично не пробовал. А что?

Если это тонкий намек на то, что статику лучше отсеивать на уровне веб-сервера — соглашусь охотно. Но мы не оринетируемся на конкретный веб-сервер, и на продвинутых юзеров, которые умеют его настраивать.
0
Скорее это вопрос, нет ли подводных камней или готовых конфигов :)
+1
Продвинутые юзеры раздают статику с отдельного cookie-free хоста.

Я пытался открыть несуществующую картинку altocms.ru/404.gif и обратил внимание, что отдаётся корректный заголовок 404, но самого докумениа с текстом об ошибке нет
0
Довольно интересно
altocms.ru/кириллица.gif вернёт страницу
altocms.ru/latin.png белый экран
0
Верное замечание. Надо будет регулярку поправить
0
Хм, а у вас есть публичный багтрекер?
0
0
Это хорошо решается на уровне nginx
0
у меня стоит alto на nginx + php-fpm + apache + fast-cgi + memcache + apc
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.