Провел свои тесты на производительность со своим модулем кеша.
Вот результаты: http://brainstorm.name/blog/filecache-benchmarks
Провел свои тесты на производительность со своим модулем кеша.
Вот результаты: http://brainstorm.name/blog/filecache-benchmarks
Комментарии
положи свой файловый кэш на мемдиск и оттестируй. отошли результаты. пускай убьются ап стену![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
Эти товарищи не учитывают того что база может быть нагружена десятком других сатов висящих на хостинге.
А чистка большой таблицы cache_page при большом числе записей и при частом обновлении пользователями создаст тормоза.
У меня нет удаления из кеша. у меня есть чекпойнт отображающий актуальность записи в кеше.
Это быстрее. Есть мысль как оптимизировать систему еще. Но еще сильнее - это будет несколько опасно.
а вы не постучитесь в 842264?
жаль, что нет минимального ридми к вашему кэшу...
было бы всем понятнее что это и как работает...
Я так понял, что нужно заменить этим файлом файл cache.inc в папке includes Друпала. Правда, после этого вылезают ошибки типа
Warning: mkdir() [function.mkdir]: No such file or directory in z:\home\drupal1.local\www\includes\cache.inc on line 105
Я туплю и не могу понять, что где поправить, чтобы все заработало... Помогите, пожалуйста.
Вообще то
1.заменять cache.inc не надо - это неграмотный подход. сходите на друпал орг - посмотрите как это делается для любой подмены того что в includes. Если вы этого не знаете значит модуль вам не нужен.
2. у вас наверно php4 и там это работать не будет. только php5
3. у вас винда - я не знаю как flock на винде себя ведет.
Вроде все.
удалил. круто друпал ру отдает 502. аксель, таймауты подкрути )
1.заменять cache.inc не надо - это неграмотный подход. сходите на друпал орг - посмотрите как это делается для любой подмены того что в includes. Если вы этого не знаете значит модуль вам не нужен.
Спасибо, будем разбираться с методами подмены. Правда, то, что я этого пока не знаю, не означает, что мне не нужен файловый кеш, для ускорения работы друпала.
UPD:
$conf['cache_inc'] ='includes/cache_0.inc';
2. у вас наверно php4 и там это работать не будет. только php5
PHP5.
3. у вас винда - я не знаю как flock на винде себя ведет.
Ок, будем пробовать в убунте, спасибо.
http://brainstorm.name/node/128 - по поводу этого...
"Люди просто приходили и говорили что я им что-то и чем то обязан. Требовали объяснить как это работает."
Мда, ну если вы сами пришли на Друпал.ру и похвалились своей разработкой, даже не объяснив что и как работает, что вы хотели? А ничё, что Друпал бесплатный? а ничё, что советы на Друпал.орг и Друпал.ру тоже бесплатные?
"Все это при нуле реакции со стороны сообщества в плане тестирования модуля, предложений улучшений"
Логика просто блеск, сначала наверное надо было объяснить как "это" хотя бы работает, а потом ждать предложений.
Это всё не на наезд, разработка ваша, делать что угодно с ней можете, просто так и скажите, что хотите заработать, а не тупо кого-то обвиняйте.
Кстати, сомневаюсь, что вашу разработку ждёт коммерческий успех.
http://drupal.ru/node/11399 - здесь ответы просто превосходные: "Если вы этого не знаете значит модуль вам не нужен"... может и удалите этот код с Друпал.ру тоже? Такие люди сообществу не нужны...
а ничё, что советы на Друпал.орг и Друпал.ру тоже бесплатные?
Никто никого ни к чему не обязывает. я тоже бесплатно много че выкладываю
Такие люди сообществу не нужны...
вы вообще кто такой чтобы решать? вам сказать куда двигать с вашим фанатизмом?
http://drupal.org/node/214319 надо, разберетесь, берите.
Я на базе кеша от Zend Framework наваял свой модуль. Где и удаление есть, и блокировки для актуальности и все что надо. ща тестирую на скорость. Скрестил 2 алгоритма.
Ilya1st,
скажите, а как при использовании Вашего кеша решается проблема с динамическими блоками?
Скажем у меня в блоке выводится случайная картинка из модуля Image. Это просто к примеру, таких примеров может быть куча (баннеры, кто онлайн и пр.).
Я так понимаю, что страница кешируется целиком, и "случайная" картинка перестает быть случайной. Так ли это?
вообще то да, страница кешируется целиком.![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
В этом то и есть главный минус кеширования. Зачастую "Page Cache" полностью неприемлем.
А где альтернатива?
У меня возникла мысль сделать модуль кеширования контента.
Что то вроде "Block Cache" только в отношении переменной $content из файла page.tpl.php
Как Вы думаете это реально?
ну не знаю как у вас - у меня контент внутри строится по очень разным правилам....
не реально это. шаблон собирается в последнюю очередь
альтернатива в патчах "по ролям" на тот же node_load и node_view![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
а также на все куски с pager_query и ... ну я думаю вы поняли
Наверное, наиболее реально в данном случае написать свой cache.inc, в котором реализовать функции записи_в_кеш_всей_страницы/чтения_из_кеша_всей_страницы. И уже в ней вырезать нужный кусок (например, всё, кроме одного изменяющегося блока). Но это только идеи...
подгрузка кеша страниц для анонимусов идет раньше кода блоков... можно да.
только свой апи придется делать для этой "ранней" подгрузки. и с блочным у него будет мало чего общего.
А теперь коронный вопрос: как вы в нее нужный кусок будете врезать?![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
ХЗ. мож и можно поролевой кеш страниц сделать да и так чтобы блоки прыгали динамически... но это надо вмешиваться в то как друпал шаблону данные дает...
И кешировать отдаваемые в шаблон данные а не страницу целиком. Другая модель, да?
И то и то - если адаптировать это к друпалу в его текущем виде и патчить ядро - городушки неестественные породит...
хз. думать надо.
Сейчас подробнее посмотрел. Действительно, на этапе даже "позднего" кеша страницы идёт тогда, когда доступен только DB API. Если изменяющийся блок простой - то можно при сохранении в кеш вместо него вставлять какой-нибудь <!---insert_block_here-->, а при загрузке этот <!---insert_block_here--> заменять на нужный код. С изменяющейся картинкой это замечательно пройдёт... А что-то более сложное уже более сложно![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
ну вот мы тихонько наскребаем проект![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
у нас будут кешироваться ДАННЫЕ.
а только потом они будут лететь в шаблонизатор и вот там можно будет отработать - что из этих данных - динамически меняющееся а что класть в шаблон как есть.
У друпал разделить ну никак не выходит... увы...
"вы вообще кто такой чтобы решать? вам сказать куда двигать с вашим фанатизмом?"
а я не фанатик, просто вы нелогично поступаете, ничего не объясняете, а потом обвиняете сообщество, что оно вам не помогало... мне всё равно, за деньги там или бесплатно, просто не надо говорить "я это сделал потому, что мне не помогали"...
"http://drupal.org/node/214319 надо, разберетесь, берите."
"Если вы этого не знаете значит модуль вам не нужен"
По аналогии просто, "если вы не умеете что-то объяснить сообществу, значит вы ему не нужны"... ничего личного, понимаете? всё как у вас...
Да, и только так. Нужно - изучите КАК. Или опять свалимся до уровня виндоуса и программеров на делфи с их вечным вопросом - "где мне взять такой-то компонент" - вместо его написания.
Веселые аналогии. да.![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
У нас по всякому. В процессе продолжение модуля с кучей вкусностей и увы, фронтенд кеша не привязан к друпалу будет. Так само вышло.
А уж как распространять его - решать МНЕ. Не вам. Потому что я автор кода.
"А уж как распространять его - решать МНЕ. Не вам. Потому что я автор кода."
так я же с самого начала сказал, что это ваше дело...
претензии только к словам относительно сообщества Друпала...
не умеете объяснить (банально сказать куда положить и что изменить), не надо кидаться обвинениями, что вам не тестируют вашу разработку...
вам ещё раз это повторить или на это раз дойдёт?
"Да, и только так. Нужно - изучите КАК"
интересно, а что же вы тут делаете тогда? Друпал.ру вам принципиально не нужен, так как и так всё знаете. Вам нужен Друпал.орг чтобы скачать последнюю версию Друпала и всё... хотя, постойте, если вы и так всё знаете, вы не должны пользоваться чужими наработками, вы сами ДОЛЖНЫ настрочить свою великую CMS. Вы же ДОЛЖНЫ знать как это делать "Или опять свалимся до уровня виндоуса и программеров на делфи с их вечным вопросом"...
Если у того кто тестирует нет квалификации... эмм... эммм...
Вообще то свой движок в процессе.![Biggrin](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/biggrin.gif)
На великую пока затея не претендует.
PS. Расслабься, мужик. Все идет по плану.
хех, да я расслаблен...
но надеюсь, мы наконец-то поняли друг друга...
сам не люблю навязчивых типов, которые что-то там требуют...
но сообщество - это святое...
интересно, что за движок? после того как Дима Смирнов свою разработку закрыл, русских нормальных движков почти и нету, по пальцам можно пересчитать, а уж, чтобы движок написал кто-то знакомый с принципами работы Друпала, о таком вообще сложно мечтать...
Отстаньте Вы от человека.
Сообществу все нужны.
Вы не поверите - но как раз блоки то кешировать надо в самую последнюю очередь.
Потому что их в сравнении с количеством страничек очень мало - следовательно mysql сама закеширует повторяющиеся запросы и будет быстро их выдавать.
В отличие от блоков контент имеет склонность быть более постоянной величиной, но ввиду того что количество нод на сайте обычно более 1000 то любое кеширование которое кеширует целиком - тут не сработает - потому что будет включать в себя меняющиеся блоки и соответственно у разработчика такого кеша возникнет непреодолимое желание этот кеш сбрасывать и строить заново - таким образом если кеш будет сбрасываться раз в несколько часов а страничек на сайте тысяч пять и клиенты запрашивают наугад любую то к функции просто генерации странички добавится еще и функция обслуживания кеша - а это запрос передающий в базу огромное количество данных плюс в случае с типом MyISAM, как по дефолту в друпале, таблица будет целиком блокироваться при записи в нее - таким образом в один момент времени база сможет обслуживать только один коннект а апач по дефолту установлен на 150 (!!!) - другими словами создается очень большая вероятность того что в одно и то же время накопятся и будут перманентно висеть все 150 копий php/апача - и ждать пока mysql их обработает по одному по очереди, а хостер будет видеть что 150 одновременных коннектов к базе идут от вашего аккаунта и висят долгое время.
Конечно в некоторых случаях такой кеш нужен - это случаи когда вероятность запроса страниц с главной намного выше запроса других страниц и тогда кеш эффективен - то есть другие страницы у вас имеют большую степень вложенности и вероятность что к ним доберутся пользователи не велика, но если к ним не доберутся пользователи то доберутся поисковики которые по статистике заходят на сайт раз в 5-10 больше чем обычные пользователи и имеют склонность запрашивать странички наугад.
Вот примерно такое объяснение почему друпал вешает систему и создает множество коннектов к базе.
Таким образом возникает мысль что кешировать нужно не блоки а контент - типы данных отдельно, да и комментарии тоже можно отдельно , следя за тем когда он меняется, и не удалять ни в коем случае из кеша до того момента пока этот массив не изменится!
А пока в друпале, в отличие от многих коммерческих CMS я не видел не то что ни одной логически правильной реализации кеша, но спорят даже с самой логикой правильного построения кеша - когда контент не должен сам по себе сбрасываться пока он не изменится, ни при каких условиях.
Я знаю один сайт на smarty - не понятно как он работает, но даже когда тормозит база - странички он выдает моментально и не создает вообще никакой нагрузки на сервер.