Очередной патчик. Менеджер меню.

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Очередной патчик. Менеджер меню.

Post by von-hamster »

В кратце:
Смысл патча в том, что он добавляет кэширование сгенереного nodelist. Я постарался сделать изменения, намменее всего затрагивающие код. По хорошему - его вообще нужно переписать, но обновляться будет трудно. Патч актуален для версии 1.5.4, думаю, что для других версий тоже будет актуален.

Для чего и почему?
Менеджер меню местами очень ресурсоемок, особенно, когда количество страниц очень большое. Например, для каждого элемента меню делается минимум 1 запрос в базу. Для 1-2х десятков страниц - это не особо актуально, а представьте - вам нужно вывести меню на 100 элементов и больше. Когда я посмотрел, как на одном из моих проектов количество запросов достигло 2000 - мне стало не по себе :) Решил поковырятся, и вот что получилось.

Подробнее:
Работает следующим образом: первый раз всеравно придется генерировать все дерево (или его часть), от этого никуда не деться. Но сразу после генерации я записываю сгенереный список в файл. А при каждом вызове меню, вначале проверяю - есть ли этот файл, если да, то читается файл, и запускается смарти (перенес полностью кусок со смарти, тк иначе в код пришлось бы залезть основательно).

Итого на странице получилось
против

Теоретически изменения должны работать с любыми наборами параметров, кроме collapse="1" - в этом случае само дерево генерится заново, а параметры остаются прежними. Для этого случая возможно следует к параметрам идентификатора файла кэша добавить текущую страницу, но на текущий момент у меня не возникла такая необходимость. Возможно позже допишу или оставляю на ваше усмотрение.

Если кто обнаружит какие-либо ошибки в работе - просьба сообщить.

В приложениях - исправленый файл и патч.
Attachments

[The extension txt has been deactivated and can no longer be displayed.]

[The extension txt has been deactivated and can no longer be displayed.]

von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Очередной патчик. Менеджер меню.

Post by von-hamster »

Опять тока с пятой попытки создал тему :)
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Очередной патчик. Менеджер меню.

Post by von-hamster »

Да, забыл самое главное: при изменении контента нужно сбрасывать кэш вручную!!! Иначе меню останется старым :-) Если влом - можно подвесить какой-нть юзертаг на изменение и удаление контента...
ilia3d

Re: Очередной патчик. Менеджер меню.

Post by ilia3d »

von-hamster wrote: Да, забыл самое главное: при изменении контента нужно сбрасывать кэш вручную!!! Иначе меню останется старым :-) Если влом - можно подвесить какой-нть юзертаг на изменение и удаление контента...
а на форге это есть?  :)
Sonya

Re: Очередной патчик. Менеджер меню.

Post by Sonya »

В бете 1.6 присутствуют существенные изменения в меню менеджере.

Появится новый параметр

loadprops="0" - Позволяет загрузку развернутой информации о странице ( extra1, image, thumbnail, ...) в меню . По умолчанию он устанавливается на 0, и там экономится куча запросов.

Но вообще меню - это самое страшный пожиратель запросов, его кэширование через тег или модуль было бы идеально. Лазать каждый раз в core не позволяют заказчики, любящие обновления.
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Очередной патчик. Менеджер меню.

Post by von-hamster »

Я хотел вначале через тэг, но не нашел за что зацепиться. Нужно сам модуль переписывать. Ну или хотябы его презентационную часть :)
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Очередной патчик. Менеджер меню.

Post by von-hamster »

ilia3d wrote:
von-hamster wrote: Да, забыл самое главное: при изменении контента нужно сбрасывать кэш вручную!!! Иначе меню останется старым :-) Если влом - можно подвесить какой-нть юзертаг на изменение и удаление контента...
а на форге это есть?  :)
Врятли, я, например, делал так:

Code: Select all

$r = glob(TMP_CACHE_LOCATION . '/RZ_menu.*.php');
foreach ($r as $file) {
    @unlink($file);
}
И чеплял его на события...
Sonya

Re: Очередной патчик. Менеджер меню.

Post by Sonya »

von-hamster wrote: Я хотел вначале через тэг, но не нашел за что зацепиться.
Вот тут товариСЧ за что-то вроде цепляется http://dev.cmsmadesimple.org/projects/cached_menu Правда, я сама не пробовала, может там идея какая есть?
Last edited by Sonya on Tue May 19, 2009 10:40 am, edited 1 time in total.
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Очередной патчик. Менеджер меню.

Post by von-hamster »

Sonya wrote:
von-hamster wrote: Я хотел вначале через тэг, но не нашел за что зацепиться.
Вот тут товариСЧ за что-то вроде цепляется http://dev.cmsmadesimple.org/projects/cached_menu Правда, я сама не пробовала, может там идея какая есть?
Посмотрел. По умолчанию там привязка к конкретной странице. Тоесть даже если меню одно и тоже - кэш всеравно первый раз генерится. Есть, правда возможность указать идентификатор для одинаковых меню. Хороший вариант, но в моем случае это-бы не подошло: у меня иерархия одна, а меняются только текущая страница и родители. С этим меню у меня для каждой страницы пришлось бы создавать кэш. Представь, скока места займет это все дело для 200 страниц. А у меня для четырех разделов получилось всего 4 файла.
ZYV
Language Partners
Language Partners
Posts: 868
Joined: Tue Nov 15, 2005 9:08 pm

Re: Очередной патчик. Менеджер меню.

Post by ZYV »

Если на одну страницу кеш - 5 кб, то на 200 - 1 мб. Стоимость хранения 1 мб сейчас около 0.7 копеек (RAID зеркало)
unsigned double ZYV;
von-hamster
Power Poster
Power Poster
Posts: 339
Joined: Thu Nov 01, 2007 3:11 pm

Re: Очередной патчик. Менеджер меню.

Post by von-hamster »

тоже, вобщем-то верно :)
Post Reply

Return to “Russian - русский”