Кеширование на файлах

Главные вкладки

Комментарии

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 26 января 2008 в 17:38

Эти товарищи не учитывают того что база может быть нагружена десятком других сатов висящих на хостинге.

А чистка большой таблицы cache_page при большом числе записей и при частом обновлении пользователями создаст тормоза.
У меня нет удаления из кеша. у меня есть чекпойнт отображающий актуальность записи в кеше.
Это быстрее. Есть мысль как оптимизировать систему еще. Но еще сильнее - это будет несколько опасно.

Аватар пользователя B.X B.X 27 января 2008 в 0:39

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

Аватар пользователя marazmus marazmus 27 января 2008 в 22:28

Я так понял, что нужно заменить этим файлом файл cache.inc в папке includes Друпала. Правда, после этого вылезают ошибки типа
Warning: mkdir() [function.mkdir]: No such file or directory in z:\home\drupal1.local\www\includes\cache.inc on line 105
Я туплю и не могу понять, что где поправить, чтобы все заработало... Помогите, пожалуйста.

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 27 января 2008 в 23:44

Вообще то
1.заменять cache.inc не надо - это неграмотный подход. сходите на друпал орг - посмотрите как это делается для любой подмены того что в includes. Если вы этого не знаете значит модуль вам не нужен.
2. у вас наверно php4 и там это работать не будет. только php5
3. у вас винда - я не знаю как flock на винде себя ведет.

Вроде все.

Аватар пользователя marazmus marazmus 28 января 2008 в 9:21

1.заменять cache.inc не надо - это неграмотный подход. сходите на друпал орг - посмотрите как это делается для любой подмены того что в includes. Если вы этого не знаете значит модуль вам не нужен.

Спасибо, будем разбираться с методами подмены. Правда, то, что я этого пока не знаю, не означает, что мне не нужен файловый кеш, для ускорения работы друпала.

UPD: $conf['cache_inc'] ='includes/cache_0.inc';

2. у вас наверно php4 и там это работать не будет. только php5
PHP5.

3. у вас винда - я не знаю как flock на винде себя ведет.
Ок, будем пробовать в убунте, спасибо.

Аватар пользователя B.X B.X 22 июня 2008 в 11:05

http://brainstorm.name/node/128 - по поводу этого...

"Люди просто приходили и говорили что я им что-то и чем то обязан. Требовали объяснить как это работает."

Мда, ну если вы сами пришли на Друпал.ру и похвалились своей разработкой, даже не объяснив что и как работает, что вы хотели? А ничё, что Друпал бесплатный? а ничё, что советы на Друпал.орг и Друпал.ру тоже бесплатные?

"Все это при нуле реакции со стороны сообщества в плане тестирования модуля, предложений улучшений"

Логика просто блеск, сначала наверное надо было объяснить как "это" хотя бы работает, а потом ждать предложений.

Это всё не на наезд, разработка ваша, делать что угодно с ней можете, просто так и скажите, что хотите заработать, а не тупо кого-то обвиняйте.

Кстати, сомневаюсь, что вашу разработку ждёт коммерческий успех.
http://drupal.ru/node/11399 - здесь ответы просто превосходные: "Если вы этого не знаете значит модуль вам не нужен"... может и удалите этот код с Друпал.ру тоже? Такие люди сообществу не нужны...

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 22 июня 2008 в 12:38

а ничё, что советы на Друпал.орг и Друпал.ру тоже бесплатные?
Никто никого ни к чему не обязывает. я тоже бесплатно много че выкладываю

Такие люди сообществу не нужны...
вы вообще кто такой чтобы решать? вам сказать куда двигать с вашим фанатизмом?

http://drupal.org/node/214319 надо, разберетесь, берите.

Я на базе кеша от Zend Framework наваял свой модуль. Где и удаление есть, и блокировки для актуальности и все что надо. ща тестирую на скорость. Скрестил 2 алгоритма.

Аватар пользователя seaji seaji 22 июня 2008 в 13:45

Ilya1st,
скажите, а как при использовании Вашего кеша решается проблема с динамическими блоками?
Скажем у меня в блоке выводится случайная картинка из модуля Image. Это просто к примеру, таких примеров может быть куча (баннеры, кто онлайн и пр.).
Я так понимаю, что страница кешируется целиком, и "случайная" картинка перестает быть случайной. Так ли это?

Аватар пользователя seaji seaji 24 июня 2008 в 15:48

В этом то и есть главный минус кеширования. Зачастую "Page Cache" полностью неприемлем.
А где альтернатива?
У меня возникла мысль сделать модуль кеширования контента.
Что то вроде "Block Cache" только в отношении переменной $content из файла page.tpl.php

Как Вы думаете это реально?

Аватар пользователя PanDa777 PanDa777 24 июня 2008 в 21:15

Наверное, наиболее реально в данном случае написать свой cache.inc, в котором реализовать функции записи_в_кеш_всей_страницы/чтения_из_кеша_всей_страницы. И уже в ней вырезать нужный кусок (например, всё, кроме одного изменяющегося блока). Но это только идеи...

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 24 июня 2008 в 21:43

подгрузка кеша страниц для анонимусов идет раньше кода блоков... можно да.
только свой апи придется делать для этой "ранней" подгрузки. и с блочным у него будет мало чего общего.

А теперь коронный вопрос: как вы в нее нужный кусок будете врезать? Smile

ХЗ. мож и можно поролевой кеш страниц сделать да и так чтобы блоки прыгали динамически... но это надо вмешиваться в то как друпал шаблону данные дает...

И кешировать отдаваемые в шаблон данные а не страницу целиком. Другая модель, да?

И то и то - если адаптировать это к друпалу в его текущем виде и патчить ядро - городушки неестественные породит...
хз. думать надо.

Аватар пользователя PanDa777 PanDa777 25 июня 2008 в 21:48

Сейчас подробнее посмотрел. Действительно, на этапе даже "позднего" кеша страницы идёт тогда, когда доступен только DB API. Если изменяющийся блок простой - то можно при сохранении в кеш вместо него вставлять какой-нибудь <!---insert_block_here-->, а при загрузке этот <!---insert_block_here--> заменять на нужный код. С изменяющейся картинкой это замечательно пройдёт... А что-то более сложное уже более сложно Smile

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 25 июня 2008 в 23:17

ну вот мы тихонько наскребаем проект Smile
у нас будут кешироваться ДАННЫЕ.
а только потом они будут лететь в шаблонизатор и вот там можно будет отработать - что из этих данных - динамически меняющееся а что класть в шаблон как есть.

У друпал разделить ну никак не выходит... увы...

Аватар пользователя B.X B.X 24 июня 2008 в 16:07

"вы вообще кто такой чтобы решать? вам сказать куда двигать с вашим фанатизмом?"

а я не фанатик, просто вы нелогично поступаете, ничего не объясняете, а потом обвиняете сообщество, что оно вам не помогало... мне всё равно, за деньги там или бесплатно, просто не надо говорить "я это сделал потому, что мне не помогали"...

"http://drupal.org/node/214319 надо, разберетесь, берите."

"Если вы этого не знаете значит модуль вам не нужен"

По аналогии просто, "если вы не умеете что-то объяснить сообществу, значит вы ему не нужны"... ничего личного, понимаете? всё как у вас...

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 24 июня 2008 в 17:33

Quote:
Если вы этого не знаете значит модуль вам не нужен

Да, и только так. Нужно - изучите КАК. Или опять свалимся до уровня виндоуса и программеров на делфи с их вечным вопросом - "где мне взять такой-то компонент" - вместо его написания.
Quote:
По аналогии просто, "если вы не умеете что-то объяснить сообществу, значит вы ему не нужны"... ничего личного, понимаете? всё как у вас...

Веселые аналогии. да. Smile
У нас по всякому. В процессе продолжение модуля с кучей вкусностей и увы, фронтенд кеша не привязан к друпалу будет. Так само вышло.
А уж как распространять его - решать МНЕ. Не вам. Потому что я автор кода.

Аватар пользователя B.X B.X 24 июня 2008 в 17:41

"А уж как распространять его - решать МНЕ. Не вам. Потому что я автор кода."

так я же с самого начала сказал, что это ваше дело...
претензии только к словам относительно сообщества Друпала...
не умеете объяснить (банально сказать куда положить и что изменить), не надо кидаться обвинениями, что вам не тестируют вашу разработку...

вам ещё раз это повторить или на это раз дойдёт?

"Да, и только так. Нужно - изучите КАК"

интересно, а что же вы тут делаете тогда? Друпал.ру вам принципиально не нужен, так как и так всё знаете. Вам нужен Друпал.орг чтобы скачать последнюю версию Друпала и всё... хотя, постойте, если вы и так всё знаете, вы не должны пользоваться чужими наработками, вы сами ДОЛЖНЫ настрочить свою великую CMS. Вы же ДОЛЖНЫ знать как это делать "Или опять свалимся до уровня виндоуса и программеров на делфи с их вечным вопросом"...

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 24 июня 2008 в 17:47

Quote:
не умеете объяснить (банально сказать куда положить и что изменить), не надо кидаться обвинениями, что вам не тестируют вашу разработку...

Если у того кто тестирует нет квалификации... эмм... эммм... Smile

Quote:
вы сами ДОЛЖНЫ настрочить свою великую CMS

Вообще то свой движок в процессе. Biggrin
На великую пока затея не претендует.

PS. Расслабься, мужик. Все идет по плану.

Аватар пользователя B.X B.X 24 июня 2008 в 17:54

хех, да я расслаблен...
но надеюсь, мы наконец-то поняли друг друга...
сам не люблю навязчивых типов, которые что-то там требуют...
но сообщество - это святое...

интересно, что за движок? после того как Дима Смирнов свою разработку закрыл, русских нормальных движков почти и нету, по пальцам можно пересчитать, а уж, чтобы движок написал кто-то знакомый с принципами работы Друпала, о таком вообще сложно мечтать...

Аватар пользователя kiev1 kiev1 26 июня 2008 в 8:02

Вы не поверите - но как раз блоки то кешировать надо в самую последнюю очередь.

Потому что их в сравнении с количеством страничек очень мало - следовательно mysql сама закеширует повторяющиеся запросы и будет быстро их выдавать.

В отличие от блоков контент имеет склонность быть более постоянной величиной, но ввиду того что количество нод на сайте обычно более 1000 то любое кеширование которое кеширует целиком - тут не сработает - потому что будет включать в себя меняющиеся блоки и соответственно у разработчика такого кеша возникнет непреодолимое желание этот кеш сбрасывать и строить заново - таким образом если кеш будет сбрасываться раз в несколько часов а страничек на сайте тысяч пять и клиенты запрашивают наугад любую то к функции просто генерации странички добавится еще и функция обслуживания кеша - а это запрос передающий в базу огромное количество данных плюс в случае с типом MyISAM, как по дефолту в друпале, таблица будет целиком блокироваться при записи в нее - таким образом в один момент времени база сможет обслуживать только один коннект а апач по дефолту установлен на 150 (!!!) - другими словами создается очень большая вероятность того что в одно и то же время накопятся и будут перманентно висеть все 150 копий php/апача - и ждать пока mysql их обработает по одному по очереди, а хостер будет видеть что 150 одновременных коннектов к базе идут от вашего аккаунта и висят долгое время.

Конечно в некоторых случаях такой кеш нужен - это случаи когда вероятность запроса страниц с главной намного выше запроса других страниц и тогда кеш эффективен - то есть другие страницы у вас имеют большую степень вложенности и вероятность что к ним доберутся пользователи не велика, но если к ним не доберутся пользователи то доберутся поисковики которые по статистике заходят на сайт раз в 5-10 больше чем обычные пользователи и имеют склонность запрашивать странички наугад.

Вот примерно такое объяснение почему друпал вешает систему и создает множество коннектов к базе.

Таким образом возникает мысль что кешировать нужно не блоки а контент - типы данных отдельно, да и комментарии тоже можно отдельно , следя за тем когда он меняется, и не удалять ни в коем случае из кеша до того момента пока этот массив не изменится!

А пока в друпале, в отличие от многих коммерческих CMS я не видел не то что ни одной логически правильной реализации кеша, но спорят даже с самой логикой правильного построения кеша - когда контент не должен сам по себе сбрасываться пока он не изменится, ни при каких условиях.

Я знаю один сайт на smarty - не понятно как он работает, но даже когда тормозит база - странички он выдает моментально и не создает вообще никакой нагрузки на сервер.