+  HandyCache форум
|-+  Главная категория» Общие вопросы» Алгоритм преобразования URL в имя файла в кэше
Имя пользователя:
Пароль:
Страниц: 1 ... 4 5 [6] 7 8 ... 13   Вниз
  Отправить эту тему    Печать  
Автор Тема: Алгоритм преобразования URL в имя файла в кэше  (Прочитано 237615 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Сергей
Beta tester
*****

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

Сообщений: 621



« Ответ #100 : 19 марта 2007, 07:36:40 »

Все логично. Осталось уточнить, откуда взялись числа 200 и 190.

Цитировать
Как быть с длинными URL, которые сейчас уже сохранены в кэше?
Удалить? Их не много.
Сообщить модератору   Записан
Сергей
Beta tester
*****

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

Сообщений: 621



« Ответ #101 : 19 марта 2007, 09:45:34 »

Цитировать
- высчитывать CRC32 на основе URL, а не имени файла. Так будет более однозначный результат и меньше вероятнось потерь при преобразованиях.
Вообще-то не очень хорошо получится. Надо будет еще учитывать знак ? в  URL. И прогонять через Преобразование URL перед вычислением CRC32.
Лучше оставить как есть, но дополнить алгоритм этими пунктами.
Цитировать
- помечать строку хеша. Так будет стразу понятно, что это урл был длинным.
- сделать опцию типа "Для длинных URL сохранять *.url". Возможно кому-то может понадобиться узнать реальный урл.
Сообщить модератору   Записан
v0lt
Beta tester
*****

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

Сообщений: 127


« Ответ #102 : 19 марта 2007, 21:50:35 »

DenZzz
Цитировать
Как быть с длинными URL, которые сейчас уже сохранены в кэше?
как правило там мусор, ничего полезного...

Сергей
Цитировать
Все логично. Осталось уточнить, откуда взялись числа 200 и 190.
Полная длина пути ограничена примерно 250 символами (кто-то высчитывал точнее, не помню). 50 символов мы оставляем на имя корневой папки кеша, остальные 200 используем на свое усмотрение.
#-12345678 - код+CRC32 - итого 10 символов
200-10=190
...
Хотя если быть более точным, то теоретически может понадобиться 202 символа для редиректа. И 204 символа для .url и .new
Тогда есть вариант: 195 и 185 - тут мы точно за предел в 200 символов не вылезем...

Цитировать
Вообще-то не очень хорошо получится. Надо будет еще учитывать знак ? в  URL. И прогонять через Преобразование URL перед вычислением CRC32.
да про знак я забыл... поправлю...
тут я ошибся знак "?" не важен

а прогонять ничего не надо(опять ошибка, см. следующий пост), кодить будем именно кусок урла
урл http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.100/
файл handycache.ru\component\option,com_smf\#-A30935E6
где A30935E6 = CRC32(component/option,com_smf/Itemid,10/topic,78.100/) для 50 и 40
« Последнее редактирование: 19 марта 2007, 22:39:26 от v0lt » Сообщить модератору   Записан
popkov
Beta tester
*****

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

Сообщений: 349


« Ответ #103 : 19 марта 2007, 22:02:06 »

а прогонять ничего не надо, кодить будем именно кусок урла
урл http://handycache.ru/component/option,com_smf/Itemid,10/topic,78.100/
файл handycache.ru\component\option,com_smf\#-A30935E6
где A30935E6 = CRC32(component/option,com_smf/Itemid,10/topic,78.100/) для 50 и 40
Нет, здесь ты забываешь о множестве способов попасть на одну и ту же страницу, даже на данном форуме! Преобразование URL для того и нужно, чтобы для одной и той же страницы создавался только один файл, хотя URL'ов для неё может быть несколько...
Сообщить модератору   Записан
v0lt
Beta tester
*****

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

Сообщений: 127


« Ответ #104 : 19 марта 2007, 22:51:05 »

popkov
Цитировать
Нет, здесь ты забываешь о множестве способов попасть на одну и ту же страницу, даже на данном форуме! Преобразование URL для того и нужно, чтобы для одной и той же страницы создавался только один файл, хотя URL'ов для неё может быть несколько...
сорри, я перепутал список Преобразование URL с алгоритмом url2filename Улыбка

Вообщем Преобразование URL итак идет до получения имени файла (до url2filename) и оно никуда не денется.
т.е. логика остается почти такой же
...->Запись в кеш->Преобразование URL->fix_URL->URL2filename->Кеш
(выделено новое/измененное)
Сообщить модератору   Записан
Михаил
Gold beta tester
*****

Репутация: +337/-14
Offline Offline

Сообщений: 5513



« Ответ #105 : 19 марта 2007, 23:01:51 »

И 204 символа для .url и .new
Расскажи, плиз, когда появляется .url? Не встречался мне никогда, а знать хочется.
Сообщить модератору   Записан
v0lt
Beta tester
*****

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

Сообщений: 127


« Ответ #106 : 19 марта 2007, 23:20:42 »

Михаил
Цитировать
Расскажи, плиз, когда появляется .url? Не встречался мне никогда, а знать хочется.
никогда Улыбка, в текущеq версии не предусмотренно
есть только предложение создавать такой файл для очень длинных урлов

Выкладываю новую версию алгоритма:
измения v1.21:
-Добавлено кодирование длинных урлов
(для упрощения тестирования ввел доп. ограничения длины в 50, 100 и 150 символов)
-Улучшен интерфейс Улыбка

PS: Кто знает как firefox фиксит урл (полная версия)?
PPS: У кого-нибудь есть исходники для функции unescape?

* URL2filename_ver1_21.zip (18.23 Кб - загружено 48 раз.)
Сообщить модератору   Записан
popkov
Beta tester
*****

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

Сообщений: 349


« Ответ #107 : 20 марта 2007, 00:40:08 »

А вот использовать "неразрывный пробел" мне не очень нравится!
Во-первых, потому что визуально он ничем не отличается от обычного, что может создать неудобство для пользователя, который захочет открыть файл в сторонней программе, набрав вручную его имя. Естественно, он вряд ли сам догадается, что там используется "неразрывный пробел".
Во-вторых, как ты уже озвучил, его очень не просто ввести с клавиатуры (надо помнить код) и нельзя скопировать из наглядного в этом плане Word-а.
В общем, использование "неразрывного пробела" затруднит ручную правку имен файлов и ручной ввод их в сторонних программах!
Должен сделать важное замечание: оказывается, в URL'ах встречается не так уж мало символов, которые невозможно ввести с клавиатуры...
Выполнил ради интереса поиск с помощью PowerGrep в своих логах по RegExp шаблону [^\w\s].
Шаблон простой, а результаты удивили (сгруппированы по возрастанию количества совпадений, первая цифра - это число найденных символов):

TOTAL:    8320744 matches in 47 groups in 391 files
       1  ’
       1  ¤
       3  ?
       4  ”
       4  †
       5  …
       8  ‡
      10  #
      10  ¦
      26  ‹
      27  \
      27  ¶
      35  „
      50  №
      52  <
      54  ±
      69  ·
      74  }
      78  {
      80  !
     103  »
     106  ‚
     138  >
     171  °
     176  |
     217  ^
     218  $
     287  [
     289  ]
     290  ~
    1156  '
    1166  @
   10035  +
   24378  *
   75837  ;
   97087  (
   97138  )
  102882  ?
  169410  -
  216965  ,
  238311  &
  342741  =
  591334  %
  724050  "
 1107050  :
 2130843  /
 2387748  .
« Последнее редактирование: 20 марта 2007, 00:50:45 от popkov » Сообщить модератору   Записан
cepera_ang
Beta tester
*****

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

Сообщений: 355


« Ответ #108 : 20 марта 2007, 02:23:58 »

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

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

Сообщений: 5589



« Ответ #109 : 20 марта 2007, 08:32:08 »

Должен сделать важное замечание: оказывается, в URL'ах встречается не так уж мало символов, которые невозможно ввести с клавиатуры...

Большинство этих символов можно ввести с клавиатуры! А те, которые нельзя ввести, встретились в твоих логах крайне редко! Да и вообще, непонятно, как они там оказались! Если следовать стандартам, то их не должно быть в URL в чистом виде - только в виде кодов!
Сообщить модератору   Записан
popkov
Beta tester
*****

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

Сообщений: 349


« Ответ #110 : 20 марта 2007, 14:05:45 »

Да и вообще, непонятно, как они там оказались!
У меня большинство из них оказались в параметрах запросов на сайт
http://m.webtrends.com
Попробуй поискать все URL, начинающиеся на http://m.webtrends.com
- а затем посмотри, есть ли там такие "ненормальные" символы.
Я согласен, что это-баннерный сайт, однако наличие таких URL говорит о том, что возможны и другие сайты, при просмотре которых генерируются URL с незакодированными такими символами.
Тем более, что у меня нашлось несколько таких URL, имеющих отношение к программе Windows Update - оказывается, она иногда тоже генерирует URL c незакодированными символами. Вот какой нашёлся:
http://office.microsoft.com/officeupdate/error.aspx?Code=3&Error=Объект%20не%20поддерживает%20это%20свойство%20или%20метод

Я провёл поиск по более частному шаблону: [^!-~\w\s]
Результат:

TOTAL:    687 matches in 17 groups in 12 files
       1  ’
       1  ¤
       3  ?
       4  ”
       4  †
       5  …
       8  ‡
      10  ¦
      26  ‹
      28  ¶
      35  „
      51  №
      55  ±
      69  ·
     104  »
     111  ‚
     172  °

Количество URL в логах у меня около 300000.
Сообщить модератору   Записан
DenZzz
Модератор
*****

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

Сообщений: 5589



« Ответ #111 : 20 марта 2007, 16:37:54 »

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

(687 / 8320744) *100% = 0,008% - вероятность встретить такие символы в URL по данным твоих логов!

Не пойму, что ты предлагаешь?

Да эти символы могут встречаться в нестандартных URL и именах файлов.
Я был против использования "неразрывного пробела" в качестве спецсимвола в основном из-за того, что его визуально не отличить от обычного! А если в имени одного файла они вдруг окажутся одновременно, то это будет настоящая головоломка, если потребуется вручную набирать имя файла!

Поэтому и было предложено отказаться от использования "неразрывного пробела" в пользу другого символа "`", который есть на клаве, различим визуально и даже отсутствует в твоих логах! Какие проблемы? Улыбка
Сообщить модератору   Записан
popkov
Beta tester
*****

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

Сообщений: 349


« Ответ #112 : 20 марта 2007, 19:45:24 »

Какие проблемы? Улыбка
Да никаких Улыбка
Просто для ясности отметил 2 момента:
1) Могут появляться файлы в кэше, имена которых нельзя ввести с клавиатуры
2) Есть вероятность (не уверен), что некоторые сторонние программы могут отказаться обрабатывать файлы с такими именами. Но EmEditor открывает - а мне на остальные по фигу... Улыбка

Но проблемы здесь особой не вижу, т.к. это - большая редкость (хоть и чаще, чем ты посчитал: надо скорее 687 делить на 300000 URL). Улыбка
Сообщить модератору   Записан
DenZzz
Модератор
*****

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

Сообщений: 5589



« Ответ #113 : 20 марта 2007, 22:22:31 »

хоть и чаще, чем ты посчитал: надо скорее 687 делить на 300000 URL. Улыбка

Не! У тебя не может быть в логах 687 разных URL с этими символами! Вот смотри, только в одном твоем примере:
http://office.microsoft.com/officeupdate/error.aspx?Code=3&Error=ОбъекС%20РЅРµ%20поддерРиваеС%20СЌСРѕ%20СЃРІРѕРСЃСРІРѕ%20или%20РјРµСРѕРґ
я насчитал 10 символов из твоих 687 ! Улыбка
Сообщить модератору   Записан
v0lt
Beta tester
*****

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

Сообщений: 127


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

ввел в Firefox-е этот урл, лис его естественно поправил
IE ничего не делал, так и оставил
в обоих случаях получил редирект на нормальный урл

повторю вопрос: кто смотрел исходники фокса, дайте функцию исправления URL. Или там что-то готовое используется?
Сообщить модератору   Записан
v0lt
Beta tester
*****

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

Сообщений: 127


« Ответ #115 : 21 марта 2007, 19:01:57 »

Люди, как все-таки лучше проверять длину имени файла?
Смотреть чтобы имя файла было меньше 200 или 195?
Первый вариант лучше нагляднее запоминается, но на самом деле файл может получиться из 204 символов.
Вариант 195 на вид не очень, но в результате получим гарантированно не более 200.


Пора поговорить о втроенной сортировке...
Мне кажется вопрос уже для многих актуален. У себя я сделал простейшую сортировку по имени домена.

Пример: файлы с handycache.ru лежат в \_h_\handycache.ru\
файлы с forum.ru-board.com лежат в _r_\forum.ru-board.com\
домены начинающиеся на цифры лежать в _0_\

Это примитывный вариант, я сделал через преобразование URL. В результате в корневой папке всего 27 папок, а в каждой в среднем во столько же раз меньше хостов, чем раньше. Открыть такую папку куда быстрее. К тому же структура кеша осталось почти такой же.
Сообщить модератору   Записан
popkov
Beta tester
*****

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

Сообщений: 349


« Ответ #116 : 21 марта 2007, 19:32:02 »

Первый вариант лучше нагляднее запоминается
Не понимаю, чем он лучше? Надо просто решить, сколько символов оставлять для пути к папке Cache. 45 или 50 - по-моему, неважно - в любом случае, вряд ли кто-то будет делать для неё большую вложенность каталогов.
Пора поговорить о втроенной сортировке...
Мне кажется вопрос уже для многих актуален. У себя я сделал простейшую сортировку по имени домена.

Пример: файлы с handycache.ru лежат в \_h_\handycache.ru\
файлы с forum.ru-board.com лежат в _r_\forum.ru-board.com\
домены начинающиеся на цифры лежать в _0_\

Это примитывный вариант, я сделал через преобразование URL. В результате в корневой папке всего 27 папок, а в каждой в среднем во столько же раз меньше хостов, чем раньше. Открыть такую папку куда быстрее. К тому же структура кеша осталось почти такой же.
Я уже поднимал этот вопрос на RU-Board, но меня не поняли. Для себя я сделал иначе: у меня просто создаются в кэше только папки для доменов второго уровня. Например, forum.ru-board.com у меня лежит в папке:
.\Cache\ru-board..com\forum\
А сайт ru-board.com у меня хранится в папке
.\Cache\ru-board..com\_NULL_\
Аналогично для всех остальных сайтов.
По-моему, это очень удобно, потому что всё, что относится к конкретному серверу (в данном случае ru-board.com) лежит в одной папке, а не разбросано по разным каталогам.
Для того, чтобы сохранить функционал Историка, мне пришлось написать также правила для Переадресации, которые переделывают имена сайтов обратно. В качестве признака, что это - запрос от Историка, я использовал присутствие двух точек подряд, отделяющих имя домена первого от имени домена второго уровня (вместо одной точки).
К сожалению, в Историке нет функции, позволяющей задать структуру кэша (то есть указать правило, по которому путь к файлу на диске должен преобразовываться в URL). По-моему, отсутствие такой возможности - серьёзная недоработка Историка. Именно из-за отсутствия такой возможности мне пришлось вместо одной точки ставить две между именами доменов 1 и 2-го уровней.
« Последнее редактирование: 21 марта 2007, 19:37:13 от popkov » Сообщить модератору   Записан
v0lt
Beta tester
*****

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

Сообщений: 127


« Ответ #117 : 21 марта 2007, 20:57:43 »

popkov
Цитировать
По-моему, это очень удобно, потому что всё, что относится к конкретному серверу (в данном случае ru-board.com) лежит в одной папке, а не разбросано по разным каталогам.
Есть такое...
Но такой вариант может усложнить приведение кеша к стандартному виду (без спец. утилит). Поэтому я подобное не делал, да и лень было Улыбка

еще можно расмотреть такие варианты:
(r)\ru-board.com(forum)\
_R_\ru-board.com[forum]\
R\ru-board.com[forum]\
R\ru-board.com,forum\
но, как я понимаю, скобки не очень удобны для регулярных выражений...
Сообщить модератору   Записан
DenZzz
Модератор
*****

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

Сообщений: 5589



« Ответ #118 : 21 марта 2007, 21:05:49 »

Люди, как все-таки лучше проверять длину имени файла?
Смотреть чтобы имя файла было меньше 200 или 195?

ИМХО, без разницы.

Цитировать
Пора поговорить о втроенной сортировке...
...
Открыть такую папку куда быстрее. К тому же структура кеша осталось почти такой же.

Чем открыть такую папку быстрее? Сторонней программой для ручного просмотра кэша?

Более полезным мне кажется предложение из ToDo о сортировке параметров:

Цитировать
  • Сортировка параметров в URL, чтобы image.php?num=1&size=large и image.php?size=large&num=1 ссылались на один и тот же файл в кеше; (Линк)
Сообщить модератору   Записан
Дем
Постоялец
***

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

Сообщений: 167



« Ответ #119 : 22 марта 2007, 03:46:59 »

Цитировать
Открыть такую папку куда быстрее. К тому же структура кеша осталось почти такой же.
У меня сделано иначе - отдельная папка, в которую прилинкованы "любимые" каталоги из кеша - порядка десятка штук.
А в общую лазаю редко, так что могу и подождать.
Сообщить модератору   Записан
Страниц: 1 ... 4 5 [6] 7 8 ... 13   Вверх
  Отправить эту тему    Печать  

 
Перейти в: