Страниц: [1]   Вниз
  Отправить эту тему    Печать  
Автор Тема: Эффективное кэширование форума: ссылки на посты и на страницы темы  (Прочитано 15390 раз)
0 Пользователей и 1 Гость смотрят эту тему.
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« : 20 марта 2007, 15:00:36 »

Недано решил создать эффективный набор правил HC для этого форума. И натолкнулся на проблему:
ссылки на страницы темы имеют вид:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.100/
А ссылки на конкретный пост имеют вид:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.msg3072/#msg3072

Причём, если ввести
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.100/#msg3072
то страница откроется правильно, и будет прокручена к нужному сообщению!

Не понимаю, почему последний вариант не используется по умолчанию, а вместо него применяется ссылка
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.msg3072/#msg3072
которая заново загружает всю страницу ради просмотра одного поста???

Кроме того, непонятно, как написать правило для HC, исправляющее этот глюк - ведь URL
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.msg3072/#msg3072
не содержит числа 100 - т.е. из него неясно, как можно получить "нормальный" URL, который уже есть в кэше (если тема ранее просматривалась):
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.100/

Это весьма досадный недостаток, учитывая не только зряшний расход траффика, но и то, что страницы форума открываются почему-то заметно медленнее, чем, например, на RU-Board...
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #1 : 20 марта 2007, 16:45:12 »

Почему нам не использовать традиционную ссылку на форум?
http://handycache.ru/forum/index.php
Там таких приколов нет, похоже. Отличие только в отсутствии ссылок на сайт в шапке.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #2 : 20 марта 2007, 18:08:16 »

Почему нам не использовать традиционную ссылку на форум?
http://handycache.ru/forum/index.php
Там таких приколов нет, похоже. Отличие только в отсутствии ссылок на сайт в шапке.

Да все также! Вот ссылка на твой пост выше:
http://handycache.ru/forum/index.php?topic=359.msg3125#msg3125
Номера страницы в ней нет!
Сообщить модератору   Записан
Сергей
Beta tester
*****

Репутация: +9/-2
Offline Offline

Сообщений: 621



« Ответ #3 : 20 марта 2007, 19:21:38 »

И что дальше делать будем? Надо бороться с этим безобразием. Кэш ведь замусоривается.
Сообщить модератору   Записан
cepera_ang
Beta tester
*****

Репутация: +9/-4
Offline Offline

Сообщений: 355


« Ответ #4 : 20 марта 2007, 20:05:24 »

Забить? Ибо форум - значит регулярно обновляется. А для старых страниц - отрицательный критерий свежести.
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #5 : 20 марта 2007, 21:54:39 »

И что дальше делать будем? Надо бороться с этим безобразием. Кэш ведь замусоривается.

Я уже локально борюсь от замусоривания своего кэша правилом в "Преобразовании URL":
#5#~#True#~#(handycache\.ru/component/option,com_smf/Itemid,\d+/topic,\d+)(\.\d+)?(;all)?[./].*#~#\1\2\3#~#False#~#True

Оно:
1. Сохраняет страницы топика не как отдельные каталоги с вложенным файлом #_ , а просто как файлы topic,102.0 и т.д.
2. Отбрасывает многочисленные вариации типа: .msg* , .new/ , /topicseen,1/ чтобы не плодить кучу бесполезных файлов, придти на которые в автономке второй раз практически нереально!

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



Забить? Ибо форум - значит регулярно обновляется. А для старых страниц - отрицательный критерий свежести.

Не всегда это возможно! Вот, к примеру, старый пост:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.msg534/#msg534
Такого файла может и не быть у тебя в кэше, зато наверняка есть старая страница:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.0/
на который тот пост находится, но сопоставить их правилом ты не можешь!
« Последнее редактирование: 20 марта 2007, 22:06:47 от DenZzz » Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #6 : 21 марта 2007, 14:26:23 »

DenZzz
Может, попросить администратора исправить этот глюк?
Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #7 : 21 марта 2007, 16:04:14 »

ссылки на страницы темы имеют вид:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.100/
А ссылки на конкретный пост имеют вид:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.msg3072/#msg3072
Правильно. Здесь "topic,78" - указывает на топик.
"100" или "msg3072" - определяет страницу с которой показывать топик. Зависит от значения установки сколько сообщений на одной странице. Сейчас это значение 20. Т.е. 0, 1, ... 19 - приведут на первую страницу. 20-39 - на вторую и т.д.
"msg3072" явно не указывает с какой страницы показывать топик, форум находит это сообщение и сам определяет на какой странице это сообщение должно показываться исходя из текущего значения количества сообщений на одной странице.
Т.е. это два разных подхода: первый пляшет от порядкого номера сообщения в топике, а второй от уникального номера сообщения.

Цитировать
Причём, если ввести
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.100/#msg3072
то страница откроется правильно, и будет прокручена к нужному сообщению!
А если ввести любое значение <100 или >119 якоря #msg3072 на открывшейся странице не будет как и самого сообщения msg3072.
Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #8 : 21 марта 2007, 17:57:09 »

"msg3072" явно не указывает с какой страницы показывать топик, форум находит это сообщение и сам определяет на какой странице это сообщение должно показываться исходя из текущего значения количества сообщений на одной странице.
Т.е. это два разных подхода: первый пляшет от порядкого номера сообщения в топике, а второй от уникального номера сообщения.
А если ввести любое значение <100 или >119 якоря #msg3072 на открывшейся странице не будет как и самого сообщения msg3072.
Но ведь ссылки вида
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.msg3072/#msg3072
генерируются автоматически, когда мы цитируем, например! Почему бы не делать их такими, чтобы при клике по заголовку цитаты  страница бралась из кэша, а не загружалась заново из Интернета? На этом форуме введено ограничение, что редактировать свой пост можно только в течение часа - так зачем принуждать пользователей форума загружать всегда заново всю страницу с этим сообщением, если отрицательный критерий свежести в один час и так гарантирует, что интересующее меня сообщение не изменилось???
Я даже на RU-Board не обновляю старые страницы, хотя там нет ограничения в один час на редактирование сообщения! И оно может измениться в любой момент! Здесь же сообщения нельзя менять, но именно на этом форуме пользователи вынуждены грузить всё по новой, тратя время и деньги впустую!
"msg3072" явно не указывает с какой страницы показывать топик, форум находит это сообщение и сам определяет на какой странице это сообщение должно показываться исходя из текущего значения количества сообщений на одной странице.
Может быть, сделать какой-то простой алгоритм пересчёта (в скрипте самой страницы) или хотя бы перенаправлять на "нормальную" ссылку, а не выдавать в ответ на запрос
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.msg3072/#msg3072
всю страницу заново?

Почему бы тогда просто не перенаправлять? И загружалось бы всё быстрее, и нагрузка на сервер снизилась бы... А то всё тормозит... Да ещё иногда вообще сообщения о перегрузке сервера возникают...
« Последнее редактирование: 21 марта 2007, 18:08:33 от popkov » Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #9 : 21 марта 2007, 18:15:57 »

Rick

Так все-таки, технически возможно сделать, чтобы ссылки на конкретные посты в "Последних сообщениях", "Непрочитанных сообщениях" и самих темах выглядели как номер конкретной страницы топика с якорем поста?

Это бы существенно увеличило экономию трафика/времени за счет загрузки старых страниц форума из кэша!
Сообщить модератору   Записан
Rick
Администратор
*****

Репутация: +15/-1
Offline Offline

Сообщений: 868


WWW
« Ответ #10 : 21 марта 2007, 22:24:07 »

технически все можно - можно и форум с нуля переписать.

так зачем принуждать пользователей форума загружать всегда заново всю страницу с этим сообщением, если отрицательный критерий свежести в один час и так гарантирует, что интересующее меня сообщение не изменилосьНепонимаю
Зависит от ссылки по которой пользователь зашел на страницу. В большинстве случаев никакой повторной загрузки той же страницы нет.
« Последнее редактирование: 21 марта 2007, 22:30:45 от Rick » Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #11 : 23 марта 2007, 17:14:01 »

технически все можно - можно и форум с нуля переписать.
Мне кажется, сделать переадресацию вместо того, чтобы выдавать заново всю страницу - это реальная задача.
Зависит от ссылки по которой пользователь зашел на страницу. В большинстве случаев никакой повторной загрузки той же страницы нет.
Я говорил конкретно о ссылках на посты темы типа:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,359.msg3208/#msg3208
Такие ссылки всегда приводят к повторной загрузке всей страницы темы и заодно замусоривают кэш файлами одноразового использования (и заметного размера, кстати!)
Я уж не говорю о тормозах и расходе траффика впустую!
« Последнее редактирование: 23 марта 2007, 17:57:56 от popkov » Сообщить модератору   Записан
popkov
Beta tester
*****

Репутация: +3/-0
Offline Offline

Сообщений: 349


« Ответ #12 : 27 марта 2007, 23:55:06 »

Размышления над тем, как эффективнее кэшировать форумы с таким неудачным для нас устройством, как у этого, натолкнули меня на интересную мысль.
Одним из недостатков этого форума для нас является отсутствие того самого знака вопроса "?", от которого пляшет "Алгоритм преобразования URL в имя файла в кэше". Форум (да и весь сайт handycache.ru) устроен так, что параметры для скрипта форума записываются через слэш "/", а не через "&" или ";", как уже давно стало стандартом для многих других серверов. И никакого знака вопроса "?", который бы указывал на то, что начинаются параметры скрипта, здесь не наблюдается. Вот типичные URL:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78/
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.0/
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.0/prev_next,next/
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.40/
http://handycache.ru/component/option,com_smf/Itemid,10/action,post2/
http://handycache.ru/component/option,com_smf/Itemid,10/action,post2/start,0/board,1/
http://handycache.ru/component/option,com_smf/Itemid,10/action,post/msg,3236/topic,367.0/sesc,dc240277a57de189bd192db6214877ff/
http://handycache.ru/component/option,com_smf/Itemid,10/action,post2/start,0/msg,3236/sesc,dc240277a57de189bd192db6214877ff/board,5/
http://handycache.ru/component/option,com_simplefaq/task,display/Itemid,3/catid,7/
Ну и "больное место" этого форума (по таким запросам сервер сам ищет, на какой странице находится требуемый контент, и отдаёт эту страницу целиком, вместо того, чтобы перенаправить на идентичную страницу, которая уже есть в кэше):
http://handycache.ru/component/option,com_smf/Itemid,10/topic,367.msg3236/
http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.new/

Скрипт этого сайта, по сути, весь запрос, отправляемый на сервер handycache.ru (естесственно, не содержащий имени серевера) - как раз и воспринимает как параметры скрипта. Причём разбор параметров производится именно по символам "/" (слэш), каждый из которых создаёт в нашем кэше отдельный каталог, что сильно увеличивает время, которое тратится на поиск файла в кэше, а также увеличивает фрагментацию и вообще нагрузку на винчестер, приводя к его ускоренному износу! Причём создание такого количества вложенных каталогов, по сути, совершенно неоправдано - ни с точки зренияя эффективности работы кэша, ни с точки зрения удобства анализа его содержимого!
Вообще, для чего, собственно, решено было воспроизводить в кэше структуру каталогов сервера? Для удобства анализа и исследования содержимого кэша, чтобы можно было сделать выводы о внутреннем устройстве сайта, чтобы файлы, лежащие на сервере в одной папке, на диске располагались так же, а не как в кэше IE - все файлы с разных сайтов в перемешку!
Но какой смысл воспроизводить на диске в виде структуры каталогов последовательности параметров сайтового скрипта??? Не лучше ли все их объединить и вместо последовательности вложенных каталогов создавать только один каталог с кучей файлов в нём или даже проще - множество файлов в корневом каталоге?
Куда меньше была бы нагрузка на винчестер и куда быстрее производился бы поиск и чтение файла с диска при запросе браузера!

Откровенно говоря, даже не знаю, какое универсальное решение данного вопроса предложить: ведь всё же есть на данном сайте и "нормальные" ссылки, для которых стоило бы (хоть и не обязательно создавая такое количество вложенных каталогов) сохранять структуру запроса в виде директорий:
http://handycache.ru/forum/avatars/Actors/Brad_Pitt.jpg
http://handycache.ru/forum/avatars/Musicians/Jewel.jpg
http://handycache.ru/images/stories/mailporter.png
Этот сайт, как я понимаю, не единственный, устроенный таким образом.
Одно из возможных решений - для всех ссылок на данном сайте, которые не оканчиваются на "известное" расширение - заменять все слэши "/" на "#!".

Кто что думает по этому поводу?
Сообщить модератору   Записан
DenZzz
Модератор
*****

Репутация: +179/-11
Offline Offline

Сообщений: 5589



« Ответ #13 : 28 марта 2007, 00:30:27 »

Одно из возможных решений - для всех ссылок на данном сайте, которые не оканчиваются на "известное" расширение - заменять все слэши "/" на "#!".

Это не спасет от замусоривания кэша одинаковыми файлами, которые вряд ли когда пригодятся даже в автономном режиме!
Например ссылки:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,359.msg3350/#new
http://handycache.ru/component/option,com_smf/Itemid,10/topic,359.msg3235/#msg3235
http://handycache.ru/component/option,com_smf/Itemid,10/topic,359.msg3208/#msg3208
http://handycache.ru/component/option,com_smf/Itemid,10/topic,359.msg3199/#msg3199
http://handycache.ru/component/option,com_smf/Itemid,10/topic,359.msg3349/topicseen,1/#msg3349
все ведут на одну страницу:
http://handycache.ru/component/option,com_smf/Itemid,10/topic,359.0/
Ну и зачем в кэше хранить столько файлов? Как я борюсь с этой проблемой локально, написал выше...

Еще у меня в "Белом списке" есть пара правил, запрещающих кэширование служебных страниц:
#10#~#True#~#^handycache\.ru/forum/index\.php\?action=(keepalive|post|quotefast)#~##~##~#False#~#True#~#False#~#False#~#False#~#False
#10#~#True#~#^handycache\.ru/component/option,com_smf/Itemid,\d+/action,#~##~##~#True#~#True#~#False#~#False#~#False#~#False
Сообщить модератору   Записан
Страниц: [1]   Вверх
  Отправить эту тему    Печать  

 
Перейти в: