Здравствуйте.
Что-то начал делать очень тяжелые сайты, грузится всё очень долго. Почти всё кастомное, и походу косячу именно я, но анализируя структуру БД и как устроено понимаю, что таки не только мои косяки там. Стандартное я стараюсь оптимизировать - задаю либо более конкретное условие (в определённых ситуациях по большому количеству полей быстрее отфильтровать), стараюсь упростить многие места.
И вот настало то самое время, когда мне пора юзать какое-нибудь кэширование. Хотя пользуюсь я им давно, но понял, что нужно что-то нормальное, а что делать не знаю.
Я понимаю, что к примеру в интернет-магазине много время занимает поиск товаров, которые выводятся на главную, затем для каждой странице upage и т.п. - короче время, это можно сохранить в файл с готовым html и вывести, я так уже делал.. От множественного вызова upage я давно отказался, почти всё делаю на php - так работает быстрее.
А можно ли закешировать на уровне хостинга, сервера ? К примеру, выполняется один и тот же запрос... Чем кроилово в коде - может кэшить именно этот запрос, точнее ответ на запрос ?
XSLT кэширование запросов - я смотрел через ?showStreamsCalls, получалось так, что те макросы, которые вызываются два раза на странице (ну мало ли) вызываются только один раз. После обновления браузера запросы снова полностью повторяются.
Я вообще представляю, что должно работать так:
1)без кэша - запрос, выполнение кода, запрос к базе, ответ.
2)с кэшем - если нет кэша: поиск данных по хэшу, не нашли, выполняем запросы, сохраняем кэш, выводим ответ. если есть кэш - поиск по хэшу, проверка на модификацию, вывод.
Смотрю как работают некоторые сайты, к примеру key.ru:
<streams-call total-time="0.065534">
<call generation-time="">upage://35.minMode</call>
<call generation-time="0.000291">udata://custom/current_mode</call>
<call generation-time="0.000185">udata://custom/count_compare_good</call>
<call generation-time="0.000175">udata://custom/getCityList/</call>
<call generation-time="0.000338">udata://system/listErrorMessages</call>
<call generation-time="">upage://67187</call>
<call generation-time="0.006832">udata://users/getLoginzaProvider</call>
<call generation-time="0.047968">udata://custom/emarketCartLite/</call>
<call generation-time="0.000167">udata://custom/show_last_showed_count</call>
<call generation-time="0.001737">udata://catalog/category_list_html/</call>
<call generation-time="0.001492">udata://custom/recommendedItem/1063</call>
<call generation-time="0.001426">udata://custom/banners_list/(vendor_banner_1)</call>
<call generation-time="0.000175">udata://custom/banners_list/(main_vendor_banner)</call>
<call generation-time="0.000646">udata://custom/primary_slider/</call>
<call generation-time="0.001858">udata://custom/special_offers_list/</call>
<call generation-time="0.000970">udata://custom/novinki_list/</call>
<call generation-time="0.000613">udata://custom/lastlist/37/1063/7</call>
<call generation-time="0.000565">udata://custom/lastlist/3505/1063/7</call>
<call generation-time="0.000096">udata://custom/text_messages</call>
</streams-call><!-- This page generated in 0.21666 secs -->
Столько, сколько у них грузится весь сайт - у меня столько выполняется один единственный upage. Видно, что у них upage запросы возвращаются без времени - у меня так возвращаются запросы, которую грузятся из файло. Как это можно сделать ?
В некоторых запросах у них возвращается готовый html код. Интуитивно и постепенно я начал отказываться от мега-кроилова на XSLT, но неужели на столько всё плохо ? К примеру, udata://catalog/category_list_html/
Тестирую хостинг -
Производительность: 14.97 - результат ниже нормы
Данный показатель измеряет, сколько раз выполняется генерация пустой страницы за одну секунду. Чем больше этот показатель, тем лучше.
Показатели load average: 0.27, 0.38, 0.58
Походу реально мало.... у кого как ?... Что посоветуете ?..