question Опубликовано 21 августа, 2018 Жалоба Поделиться Опубликовано 21 августа, 2018 (изменено) Это - код файла index.php <?PHP $time_start = microtime(true); $cacheurl = md5($_SERVER['REQUEST_URI']); $rndomis=rand(123456,654321); require_once('view/IndexView.php'); $view = new IndexView(); $themecache = $view->settings->theme; error_reporting(E_NONE); session_start(); setlocale(LC_TIME, 'ru_RU.UTF-8'); if ((file_exists('cache0/'.$themecache.'/'.$cacheurl)) && (!$_POST[text]) && (!$_POST[name])) { header("Content-type: text/html; charset=UTF-8"); header("Expires: ".gmdate("D, d M Y H:i:s", time()+($rndomis*3))." GMT"); $cachefile = 'cache0/'.$themecache.'/'.$cacheurl; $htmlcode = file_get_contents($cachefile); echo $htmlcode; fclose($cachefile); print "\r\n<!-- "; print "cache"; print " -->"; } else { if(($res = $view->fetch()) !== false && $_SERVER['QUERY_STRING']!='module=ProductsView') { ob_start(); header("Content-type: text/html; charset=UTF-8"); header("Expires: ".gmdate("D, d M Y H:i:s", time()+($rndomis*3))." GMT"); print $res; $htmlcode = ob_get_contents(); $cachefile = fopen('cache0/'.$themecache.'/'.$cacheurl, 'w') or die("-"); fwrite($cachefile,$htmlcode); fclose($cachefile); } else { header("http/1.0 404 not found"); $_GET['page_url'] = '404'; $_GET['module'] = 'ErrorView'; print $view->fetch(); } } if(true){ print "\r\n<!-- "; $time_end = microtime(true); $exec_time = $time_end-$time_start; if(function_exists('memory_get_peak_usage')) print "память: ".round(memory_get_peak_usage()/1024/1024, 2)." Мбайт, "; print "время: ".round($exec_time*1000,0)." мÑ. "; print "-->"; } ОписаниеЕсли на страницу заходили, она выдаётся из кеша, при этом simpla к MySQL не обращаетсяДостоинства:1. Снижает нагрузку на хостинг2. Уменьшает время генерации (у меня было от 25-30 до 400-500 мсек, стало 5-7 мсек). 3. Если БД недоступна/легла, сайт продолжит работать.4. Комментарии работают (страница грузится не из кеша, а динамически)Недостатки:1. если кто-то добавил комментарий, он не добавится, т.к. данные не передадутся, надо бы проверку поставить...2. Корзина также работать не будет, хотя не знаю, какая она у вас, если всё через ajax, то почему бы и да. Просто у меня корзины в шаблоне нет, поэтому не проверял.3. Сортировка работает (она у меня идёт как параметр url, то есть ?sort=page-max), но при переходе на другую страницу, сортировка становится "по умолчанию".4. Блок "вы просматривали" таким образом тоже не будет выводиться, если он нужен, придётся подгружать динамически.5. При изменении цены в админке, описания и т.д., нужно будет обновить кеш.В целом для моих задач - то, что нужно. Специалисты, окиньте профессиональным взглядом и скажите, что здесь ещё упущено... Изменено 21 августа, 2018 пользователем question Цитата Ссылка на сообщение Поделиться на другие сайты
Drake777 Опубликовано 21 августа, 2018 Жалоба Поделиться Опубликовано 21 августа, 2018 А почему не кешировать сами запросы без кеширования страниц? Или если уж кешировать страницу, то через smarty? Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 21 августа, 2018 Автор Жалоба Поделиться Опубликовано 21 августа, 2018 Я просто предложил вот такой вариант, правится всего 1 файл. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 22 августа, 2018 Жалоба Поделиться Опубликовано 22 августа, 2018 В целом для моих задач - то, что нужно. Специалисты, окиньте профессиональным взглядом и скажите, что здесь ещё упущено... Если Вы таким способом свои задачи решили, то Вас можно поздравить.А для обычного магазина это совсем не годится - метод убивает на корню любое типовое взаимодействие посетителя с сайтом. Массу недостатков Вы сами описали, и это наверняка не все... Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 22 августа, 2018 Автор Жалоба Поделиться Опубликовано 22 августа, 2018 Если Вы таким способом свои задачи решили, то Вас можно поздравить.А для обычного магазина это совсем не годится - метод убивает на корню любое типовое взаимодействие посетителя с сайтом. Массу недостатков Вы сами описали, и это наверняка не все...Вроде, решил. И это может быть первым шагом к созданию более серьёзной системы кеширования. Например, есть идея кешировать хедер, футер, меню, а контент - отдельно. Или кешировать по параметрам, например, только определённые категории._________Интернет-витрина (магазин, в котором вместо привычной для многих корзины кнопка "купить" с всплывающим окошком) работает.Комментарии работаютСкорость загрузки увеличиласьНагрузка снизилась. Непонятно лишь, на что эти 6-8 мсек тратятся, неужели на ssd чтение файла такое долгое..._________Но вот все ли заголовки передаются корректно - вопрос. И вдруг я что-то не учёл, поэтому прошу специалистов глянуть.И вот ещё. Прошу протестировать на своих магазинах, пусть и демо - это не сложно - и о результатах отписаться. Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 22 августа, 2018 Жалоба Поделиться Опубликовано 22 августа, 2018 (изменено) Вроде, решил. И это может быть первым шагом к созданию более серьёзной системы кеширования. Например, есть идея кешировать хедер, футер, меню, а контент - отдельно. Или кешировать по параметрам, например, только определённые категории._________Интернет-витрина (магазин, в котором вместо привычной для многих корзины кнопка "купить" с всплывающим окошком) работает.Комментарии работаютСкорость загрузки увеличиласьНагрузка снизилась. Непонятно лишь, на что эти 6-8 мсек тратятся, неужели на ssd чтение файла такое долгое..._________Но вот все ли заголовки передаются корректно - вопрос. И вдруг я что-то не учёл, поэтому прошу специалистов глянуть.И вот ещё. Прошу протестировать на своих магазинах, пусть и демо - это не сложно - и о результатах отписаться. /products не работает Изменено 22 августа, 2018 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
fuckmoney Опубликовано 22 августа, 2018 Жалоба Поделиться Опубликовано 22 августа, 2018 При работе с корзиной основной код не показывает товары в корзине Нужна работа с сессией if(!empty($_SERVER['HTTP_USER_AGENT'])){ session_name(md5($_SERVER['HTTP_USER_AGENT'])); } session_start(); Будет вот так <?PHP $time_start = microtime(true); if(!empty($_SERVER['HTTP_USER_AGENT'])){ session_name(md5($_SERVER['HTTP_USER_AGENT'])); } session_start(); $cacheurl = md5($_SERVER['REQUEST_URI']); $rndomis=rand(123456,654321); require_once('view/IndexView.php'); $view = new IndexView(); $themecache = $view->settings->theme; error_reporting(E_NONE); setlocale(LC_TIME, 'ru_RU.UTF-8'); if ((file_exists('cache0/'.$themecache.'/'.$cacheurl)) && (!$_POST[text]) && (!$_POST[name])) { header("Content-type: text/html; charset=UTF-8"); header("Expires: ".gmdate("D, d M Y H:i:s", time()+($rndomis*3))." GMT"); $cachefile = 'cache0/'.$themecache.'/'.$cacheurl; $htmlcode = file_get_contents($cachefile); echo $htmlcode; fclose($cachefile); print "\r\n<!-- "; print "cache"; print " -->"; } else { if(($res = $view->fetch()) !== false && $_SERVER['QUERY_STRING']!='module=ProductsView') { ob_start(); header("Content-type: text/html; charset=UTF-8"); header("Expires: ".gmdate("D, d M Y H:i:s", time()+($rndomis*3))." GMT"); print $res; $htmlcode = ob_get_contents(); $cachefile = fopen('cache0/'.$themecache.'/'.$cacheurl, 'w') or die("-"); fwrite($cachefile,$htmlcode); fclose($cachefile); } else { header("http/1.0 404 not found"); $_GET['page_url'] = '404'; $_GET['module'] = 'ErrorView'; print $view->fetch(); } } if(true){ print "\r\n<!-- "; $time_end = microtime(true); $exec_time = $time_end-$time_start; if(function_exists('memory_get_peak_usage')) print "память: ".round(memory_get_peak_usage()/1024/1024, 2)." Мбайт, "; print "время: ".round($exec_time*1000,0)." мÑ. "; print "-->"; } Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 22 августа, 2018 Автор Жалоба Поделиться Опубликовано 22 августа, 2018 /products не работаетКак не работает? Не показывает страницу "все товары" или товар отдельно не выводится? Выдаёт 404?Видимо дело в строке && $_SERVER['QUERY_STRING']!='module=ProductsView' Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.