Invis1ble
24.03.2015 - 22:13
не понимаешь
когда проект нагружен, то у него уже есть бюджет на оптимизацию
а на стадии прототипирования/раскрутки твой кэш нахрен никому не упал, потому что реализовать кэширование с грамотной инвалидацией стоит времени, и, соответственно, денег, а разницу на трёх с половиной анонимусах ты даже глазом не заметишь
и тут получается, что пример с прегенерацией карты не в тему, потому что там обычно хитрая инвалидация не используется и "класть в кэш" карту занимает примерно 1 строку кода: file_put_contents($sitemap);
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Ну если с такой точки рассматривать, тогда да.
Делаешь без кэша, а потом, спустя время просишь еще денег чтоб внедрить file_put_contents($sitemap);
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Invis1ble
24.03.2015 - 22:29
Цитата (Arh @ 24.03.2015 - 21:25) |
Делаешь без кэша, а потом, спустя время просишь еще денег чтоб внедрить file_put_contents($sitemap); |
ты неправильно меня понял, как раз карту писать в файл можно и сразу, потому что это очень просто
обновлять по крону и всё
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Invis1bleА меню почему бы не писать? Добавил ссылку в админке, сгенерировался готовый файл с меню (или удалился старый), потом на сайте:
echo file_get_contents('/menu.html');
echo $model->get_menu();
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Invis1ble
24.03.2015 - 22:49
можно конечно, только вот еще при редактировании и удалении тоже надо регенерировать
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Цитата (Invis1ble @ 24.03.2015 - 22:49) |
можно конечно, только вот еще при редактировании и удалении тоже надо регенерировать |
Ну да.
И страницы (контакты, о сайте, итд) тоже можно кэшировать.
Итого кэшируется меню, страницы, карта сайта. То есть весь малонагруженный сайт визитка =)
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
paul85
24.03.2015 - 23:15
Цитата (Arh @ 24.03.2015 - 22:05) |
Не использую, а что? |
Просто было бы необычно дискутировать насчет производительности с такой щепетильностью. =)
Цитата (Arh @ 24.03.2015 - 22:05) |
Зашел на сайт 1 человек, потратил 1 секунду процессорного времени. |
Вот на моем слабеньком девелоп сервере (D525) страница генерируется за 0,05с. Полностью. Включая контент и меню. Даже на DO за $5 время будет еще меньше потому, что там, как показала практика, вычислительная мощность несколько больше, чем мой D525.
Итак, 1/0,05=20. В секунду. Загрузок страниц. В час получается 72к. Теоретически, конечно. Ну давайте так: 100к в сутки, ок? Хотя, конечно, теоретическая цифра на порядок больше.
Но! Мы еще не учли такую штуку как opcache, который с версии 5.4 если не ошибаюсь, включен в PHP по дефолту... И не требует никаких действий со стороны программиста.
И мы еще можем взять VPS-ку не за $5, а за 40.
Это что же должен быть за проект-визитка такой!? Страшно...
Ну а если серьезно, то 10к+ уников в день (допустим каждый юзверь смотрит по 10 страниц), я считаю, большая цифра. И скорее всего к этому времени код будет отрефакторен пару раз. В том числе и кэш запилен. Наверное будет нужен... К сожалению опыта на таких нагрузках у меня нету. =(
ИМХО.
Invis1ble
24.03.2015 - 23:16
смотри еще какие нюансы:
ты предлагаешь кэшировать при изменении объекта, но это не самый лучший вариант, т.к. объект может вообще не понадобиться
решение: можно делать генерацию кэша на лету при первом запросе на чтение к объекту, а при его изменении сбрасывать старый кэш. Тут начинается самое интересное: защита от race condition, dead locks и прочие штуки. Итого код усложняется - прозрачность падает, есть вероятность ошибок (чем больше код, тем более вероятны баги), а выхлопа - 0, а то и медленней работать начнет на малых нагрузках.
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
paul85
24.03.2015 - 23:30
Цитата (Invis1ble @ 24.03.2015 - 23:16) |
Тут начинается самое интересное: защита от race condition, dead locks и прочие штуки. |
Во! Я не знал про эти проблемы, но подозревал, что какой-нибудь гемор обязательно будет.
Invis1ble
24.03.2015 - 23:32
как известно, в программировании 2 проблемы:
придумывание названий
и инвалидация кэша
© не помню кто
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Invis1ble
Цитата |
ты предлагаешь кэшировать при изменении объекта |
Это я как пример написал.
Вообще удобно просто удалять старый кэш.
Цитата |
Добавил ссылку в админке, сгенерировался готовый файл с меню (или удалился старый) |
А там где выводится меню делать примерно так.
if(!$menu = cache::get('menu')) {
$menu = $Model->get_menu();
cache::set('menu',$menu);
}
echo $menu;
То есть если кэша нету, он создаётся, и если он даже не создаётся по каким либо причинам, то данные выводятся из базы.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Invis1ble
24.03.2015 - 23:55
Цитата (Arh @ 24.03.2015 - 22:50) |
cache::set('menu',$menu); |
хорошо, когда уже написана реализация cache::set(), можно удобно прикрыться абстракцией на форуме, мол, посмотрите, как всё просто!
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
sergeiss
24.03.2015 - 23:57
Цитата (Invis1ble @ 24.03.2015 - 23:16) |
ты предлагаешь кэшировать при изменении объекта, но это не самый лучший вариант, т.к. объект может вообще не понадобиться |
И что, что он может не понадобится? Arh правильно говорит и про сайтмап, и про меню (а также во многих других случаях) - лучше один раз перегенерить при изменении и потом использовать; как раз гимора меньше будет. Потому что не надо никаких особых условий, типа предложенных тобой: "можно делать генерацию кэша на лету при первом запросе на чтение к объекту, а при его изменении сбрасывать старый кэш."
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Invis1ble
24.03.2015 - 23:59
Цитата |
И что, что он может не понадобится? |
ну мы же тут типа про оптимизацию толкуем, а получается генерируем кэш (читай тратим ресурсы) в надежде, что он таки понадобится до следующего изменения объекта
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
sergeiss
25.03.2015 - 00:06
Цитата (Invis1ble @ 24.03.2015 - 23:59) |
ну мы же тут типа про оптимизацию толкуем, |
Так когда объект понадобится, то он будет быстро выдан. Зато нет никакой "изощренной" логики типа "тут читать, тут не читать, тут жена рыбу заворачивала". Если завести однозначное правило "всегда делаем кэш редко меняемого объекта сразу же после его изменения", то тогда не надо будет мудрить потом. Это тоже своего рода оптимизация, только оптимизация рабочего времени, а не кода.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)