Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Кэширование (как то нужно улучшить)
Форумы портала PHP.SU » » Вопросы новичков » Кэширование (как то нужно улучшить)

Страниц (1): [1]
 

1. DlTA - 12 Апреля, 2020 - 00:32:40 - перейти к сообщению
у меня тормозит сайт
для оптимизации добавил кэширование, кэширование запросов к базе, кеширование блоков.
работа по типу: получил, сохранил в кэш, при повторном запросе берешь из кэша, НО время работы кеша ограничего. если данные из кэша то скорость терпима.
НО кэш закончился и приходится делать повторный запрос, и тут опять медленно

сделал запросы к базе уже через крон, пользователи уже берут данные кэша,

НО как быть с кэшем блоков?
Спойлер (Отобразить)


может есть вариант автоматического кэширования блоков??
2. LIME - 12 Апреля, 2020 - 13:44:17 - перейти к сообщению
а почему так тормозит? лог медленных запросов включал? разбирался? что там такого объемного?
практически уверен что можно оптимизировать
кэш это оптимизация когда уже недостаточно других средств - всетаки еще одна точка отказа и лучше чтобы хоть как-то со скрипом но работало и без него

DlTA пишет:
НО время работы кеша ограничего
а зачем его ограничивать? инвалидируй при изменении данных в бд.
правда тогда возможно появится проблема вытеснения
вот тебе теориия https://habr[dot]com/ru/company/surf[dot][dot][dot]ird/blog/306252/
там же в коментах материал со звездочкой* ) https://www[dot]youtube[dot]com/watch?v=dawCuq9WrLM

ну и это для понимания возможных подводных камней при велосипедостроении https://habr[dot]com/ru/company/google/blog/316344/

DlTA пишет:
может есть вариант автоматического кэширования блоков
не совсем но всеже
https://ruhighload[dot]com/%D0%9A%D1[dot][dot][dot]5+%D1%81+varnish
3. DlTA - 13 Апреля, 2020 - 23:48:55 - перейти к сообщению
медленные запросы смотрел сам (время отработки запроса), в запросе 5+ JOIN, это много, сайт это магазин и проблема в выводе параметров в товарах (товаров выводится много).
для уменьшения JOIN, сделал в несколько запросов, стало лучше в 1.5-2 раза, но это го мало.

LIME пишет:
вот тебе теориия https://habr[dot]com/ru/company/surf[dot][dot][dot]ird/blog/306252/
понятно, но это уже с отдачей с сайта, а не с базой.

проблема вообще понятна, обычно магазины выводят товар на сайт без параметров, а для покупки уже ajax запрос (или что там у них), так выгодней,
НО у нас изначально выводились и параметры и поисковики редиски, и если сайт не отдают контент в 3 секунды (+-) то страницу выбрасывают из вывода.

а должен ли быть включен кеш от mysql, админ ставивший-настраивавший система FreeBDS, сказал что лучше не включать кеш от mysql, нужно?
4. LIME - 14 Апреля, 2020 - 00:19:53 - перейти к сообщению
DlTA пишет:
а должен ли быть включен кеш от mysql
в новых версиях его выпиливают
DlTA пишет:
но это уже с отдачей с сайта, а не с базой.
почему? любой кэш, который не протухает по времени, а вытесняется более часто запрашиваемым(и инвалидируется при апдейте конечно)
(Добавление)
DlTA пишет:
проблема в выводе параметров в товарах
сделай так называемую проекцию
то есть запакуй все параметры в json и храни вместе с товаром
и при изменении параметра пересчитывай все json товаров, которым он принадлежит
редкое изменение - частый селект
5. DlTA - 14 Апреля, 2020 - 01:09:21 - перейти к сообщению
LIME пишет:
сделай так называемую проекцию
то есть запакуй все параметры в json и храни вместе с товаром
и при изменении параметра пересчитывай все json товаров, которым он принадлежит
редкое изменение - частый селект
ща еще нету катого запроса( , это у других сайтов такое.

LIME пишет:
почему? любой кэш, который не протухает по времени, а вытесняется более часто запрашиваемым
у меня место для кеша запросов есть, мне не надо сортировать что выводить, а что стирать.

НО проблема в блоках, при формировании html куча расчетов и это тоже тормозит.
6. Lolya - 29 Мая, 2020 - 10:05:36 - перейти к сообщению
DlTA пишет:
НО проблема в блоках, при формировании html куча расчетов и это тоже тормозит.

а чем ты выводишь этот html ?
И посади на индексы все запросы, скорость возрастет в разы. Подмигивание
просмотр использования индекса в phpmyAdmin:
CODE (htmlphp):
скопировать код в буфер обмена
  1. EXPLAIN EXTENDED SELECT

ну и сам запрос естественно.
7. DlTA - 03 Июня, 2020 - 00:08:43 - перейти к сообщению
Lolya пишет:
просмотр использования индекса в phpmyAdmin:


DlTA пишет:
для оптимизации добавил кэширование, кэширование запросов к базе, кеширование блоков.

у меня уровень по сложнее,
нынче улучшили железо (по сильнее поставили) и сайт стал работать спокойнее.
8. LIME - 03 Июня, 2020 - 00:48:25 - перейти к сообщению
DlTA а ты вообще профилировал где именно тормоза происходят?
https://habr[dot]com/ru/company/badoo/blog/436364/
9. Lolya - 07 Июня, 2020 - 23:15:37 - перейти к сообщению
DlTA пишет:
у меня уровень по сложнее,

просто пример!
файл блока
CODE (htmlphp):
скопировать код в буфер обмена
  1. $blocktitle = ".:: <b>Онлайн</b> ::.";
  2. $a = mysql_fetch_array(sql_query("SELECT textt FROM online WHERE id=1"));
  3. $text = $a['textt'];$content = $text;?>

в файл обновления всех данных раз в 30 минут(или в 1 час, или как нужно вам)
CODE (htmlphp):
скопировать код в буфер обмена
  1. ////// NACHALO //////
  2. $secwerd = 60 * 30;$sslodr = sqlesc(get_date_time(gmtime() - $secwerd));
  3. $onlinesweraz = sql_query("SELECT id FROM online WHERE time < $sslodr") or sqlerr(__FILE__,__LINE__);if(mysql_num_rows($onlinesweraz) > 0){
  4. ///// kod bloka //////////
  5. $onlinesw .= " тут вывод содержимого блока ";
  6. ///// kod bloka //////////
  7. $onlines = $onlinesw;
  8. sql_query("UPDATE online SET textt = ".sqlesc($onlines).", time = NOW() WHERE id=1") or sqlerr();}else{
  9. ///// kod bloka //////////     
  10. $onlinesw .= " тут вывод содержимого блока ";
  11. ///// kod bloka //////////
  12. $onlines = $onlinesw;sql_query("INSERT online SET textt = ".sqlesc($onlines).", time = NOW()");}
  13. //////////////// KONEC////////

в таблице блока в БД должно быть поле time, где пишем время обновления, от него идет отсчет для следующего обновления!

 

Powered by ExBB FM 1.0 RC1