Перейти к публикации

Проблема кеширования с {include} в коротких новостях или как остановить время


Рекомендованные сообщения

Здравствуйте.

В связи с необходимостью вставить в новость форму и обработчик была выявлена неприятность кеширования с {include} в коротких новостях, которую каждый может промоделировать у себя.

1. Создаем файлик вывода времени или чего-либо меняющегося now.php в engine/modules:

<?

echo 'Сейчас: '.date('H:i:s');

?>
2. Подключаем его в шаблоны короткой и полной новости в любом месте:
{include file="engine/modules/now.php"}[/code]

3. Заливаем на сайт now.php, шаблоны короткой и полной новости, чистим кеш (кеширование файловое должно быть включено).

4. Когда будем заходить [b]несколько раз [/b]в категории с выдачей коротких новостей, то заметим, что [b]время остановилось(!) [/b]и изменится только при след. именении кеша. Периодичности не знаю, наверное минут 5.

5. [b]В полных новостях время идет себе дальше[/b], несмотря на кеширование, а вот короткие новости с багами.

Очевидно, что {include} нуждается в опции cashe="no" по аналогии с custom?

Еще вопрос к разработчикам: "Как определить название файла кеша коротких новостей, и полных также. new_*.tmp, алгоритм?"

Ссылка на сообщение
Поделиться на других сайтах

В чем баг?

В новостях include это баг(!!!) - для этого делают статику..

Новости должны показывать одно и тоже, за тем и кешируються. Это новость, она не меняется от действий пользователя! Алле, ребята.

Если нужно форму вставить именно в новость, могу предложить вставлять именно форму, а не include. Хотя честно скажу, не понимаю зачем именно в новость вставлять форму.

Вставляем в новость и action у формы куда нужно.. или реализовать это все аяксом, что мне кажется самым верным путем. Я формы(да да той самой)) не видел, но думаю из-за неё не стоит внедрять новые алгоритмы в DLE(вот прям ни строчки ради этого, без обид).

Ссылка на сообщение
Поделиться на других сайтах

В чем баг?

Баг в том, что полная и короткая новость обрабатывают инклуде по-разному! Это нормально, когда один код работает по-разному? И предлжите, плиз, рабочий рецепт как вставить форму в короткую новость :)

И почему бы пользователям не дать возможность обновлять новость, а не только комментировать? Кроме того у кого новости, а у кого и целые статьи и хотелось бы дополнения от пользователя видеть через свой модуль. Типа Википедии на DLE.

Или электронный магазин на базе новостей может работать без форм?

Изменено пользователем marazm_ua
Ссылка на сообщение
Поделиться на других сайтах

Краткие новости берутся из кэша. Отключайте кэш на сайте, тогда и "модуль" будет работать так, как вам надо.

Ссылка на сообщение
Поделиться на других сайтах

Баг в том, что полная и короткая новость обрабатывают инклуде по-разному! Это нормально, когда один код работает по-разному? И предлжите, плиз, рабочий рецепт как вставить форму в короткую новость

Какой же это баг, это не баг, это разная работа кеширования для обеспечения максимальной производительности и при этом функциональности самого DLE. При показе кратких новостей он кеширует уже сформированный HTML код всех новостей. А при просмотре полной новости он кеширует только результаты запроса к БД, а не сформированный HTML. И все это потому что при показе полной новости из БД берется одна новость и для нее целесообразно кешировать результаты выборки из БД, а при показе кратких новостей, может показываться большое количество новостей одновременно и кешировать только результаты запроса к БД, для этого нецелесообразно.

Ссылка на сообщение
Поделиться на других сайтах

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

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

Вы не ответили как имя файла кеша новости расшифровать?

Изменено пользователем marazm_ua
Ссылка на сообщение
Поделиться на других сайтах

А по-моему это баг. Код PHP пользователя не отрабатывается, а вы говорите не баг.

Слово "кеширование" априори означает снижение нагрузки за счет того что сервер перестает обрабатывать определенные действия. Вы багом называете технологию, технологии не могут быть багом, они могут использоваться а могут не использоваться. DLE использует данную технологию для своих целей, для наибольшего обеспечения производительности. А вы пишите следующее: "сделайте DLE намного медленнее и потребляющим больше ресурсов, потому как мне нужно вставить мою форму, которую я вставляю неправильно и не обладаю знаниями как сделать чтобы и форма работала и кеширование".

Ну да ладно, если вам нравится то, что инклуде не работает в коротких новостях нормально при кешировании, то хоть предупредите про это людей в документации.

Какой документации? Кеширование это априори снижение нагрузки и невыполнение участков кодов. Писать об этом в инструкции, это тоже самое что в инструкции для еды писать "это еда, ее кладут в рот". Если вы решили заниматься программированием, то как минимум нужно знать и понимать базовые технологии, термины и обозначения. Неправильно пробелы в знаниях списывать на баги. Баг это ошибка. А здесь нет ошибок, значит нет багов.

И я точно никогда не буду умышленно увеличивать нагрузку от DLE, из-за того что вы изначально неверно проектируете свои приложения. Проектирование приложения это самый важный этап в программировании, а вы решили: "все я ставлю форму именно так и именно туда, а все остальное это баги других и все равно что помимо меня есть сотни тысяч других сайтов, которые станут работать намного медленнее и потреблять больше ресурсов, только из-за меня, потому как у меня форма, которую я вставил, и не умею использовать localstorage для хранения введенных данных, а мне их нужно вывести только обязательно на PHP, который видите ли кешируется и не выполняется". Это в корне неправильное отношение с вашей стороны к проектированию. Все ваши проблемы решаются лишь правильным написанием вашего модуля и задействованием JS и localstorage для хранения того что человек ввел в форму или воспользоваться банальным AJAX.

Кеширование и Real-Time выполнение это вещи принципиально несовместимые. Кеширование и делается чтобы убрать Real-Time выполнение, и вы вставляете "Real-Time выполнение" в область которая подлежит кешированию и хотите чтобы при этом "Real-Time выполнение" оставалось и кеширование оставалось. Это невозможно в принципе, и в данном случае баг только один это неверное проектирование выполнения реализуемой задачи, а не баг что DLE как то работает неправильно. DLE в данном работает абсолютно правильно, как он и был запрограммирован, на выполнение задачи по максимальному снижению нагрузки в данной области сайта.

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за огромный ответ на вопрос который я не задавал, ведь я описал свои мучения про которые меня вы не предупредили при обсуждении в Платной поддержке http://forum.dle-new...showtopic=65091 и предложил опцию ввести {include} cashe="no" по аналогии с custom. Ну ладно, Бог с вами, спрошу в третий раз "Как имя файла кеша новости расшифровать". И насчет "ошибок в проектировании" откуда мне знать, что в кешируемой полной новости {include} PHP выполняется, а в краткой - нет, можеть здесь "ошибка в проектировании", ведь в доках про это ни слова. Возможно причина в том, что кратких новостей на странице несколько. Как правило.

Изменено пользователем marazm_ua
Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах

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

Какое то странное у вас представление о программировании, вы думате что всe всё в новости пихают при разработке модулей. Новости и товары это как бы разные вещи, они должны быть в других таблицах БД, и показываться отдельными PHP кодами, а не вставляться в новости. Разработка электронного магазина это очень затратное мероприятие, которое стоит приличных денег и пользуется малым спросом. Потому как это разные целевые аудитории и тот кто делает себе сайты не DLE не продает тут же на сайте пылесосы или что то еще. Поэтому и не делают. Это экономически не целесообразно, а не потому что кеш в новостях :)

Ссылка на сообщение
Поделиться на других сайтах

Спрошу я в четвертый раз "Как имя файла кеша новости расшифровать?".

Никак, потому что имя файла кеша не основано на конретной новости, т.к. это показ кратких новостей и кеш формируется на страницу, на которой эта краткая новость показывается в данный момент. И для разных разделов сайта это могут быть разные имена, даже с одним и тем же содержимым. Если хотите узнать хеш конкретной вашей страницы то вам нужно вывести в файле engine/engine.php перед строчкой:


if ($cache_id < 6 and !isset ( $_POST['login'] )) $active = dle_cache ( "news", $cache_id . $cache_prefix, true );
[/CODE] написав
[CODE]
echo $cache_id . $cache_prefix;

Но это предварительное значение которое еще дополняется группой и оборачивается в md5

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за шифр. Но ведь движок как-то узнает что ему тянуть из кеша, занчит расшифровівает или как?

Ссылка на сообщение
Поделиться на других сайтах

Спасибо за шифр. Но ведь движок как-то узнает что ему тянуть из кеша, занчит расшифровівает или как?

Или как, если по простому, то формируется имя файла кеша и проверяется есть в наличии таковой или нет, если нет - создается с запросами к БД, если есть - выполняется без запросов к БД.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...