Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

DNSearch — скрипт поиска для Денвера. (Ant, оценка: 7)
Goto page 1, 2, 3, 4, 5, 6  Next
Author Message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Thu Jan 15, 2004 3:45 pm (написано за 2 минуты 24 секунды)
   Post subject: DNSearch — скрипт поиска для Денвера.
Reply with quote

В этой теме обсуждается скрипт поиска для Денвера — DNSearch (Denwer Search).

Задавайте любые вопросы/предложения. Все они будут незамедлительно рассмотрены.

Официальная тема в «готовых решениях»: DNSearch (Denwer Search) (forum.dklab.ru/perl/advises/DnsearchDenwerSearch.html).
Последняя версия скрипта доступна по адресу: debugger.dklab.ru/download/scripts/dnsearch/latest.

Last edited by Ant on Fri Apr 14, 2006 11:29 pm; edited 8 times in total
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 194
   поощрить/наказать

Location: 007 495

PostPosted: Thu Jan 15, 2004 4:48 pm (спустя 1 час 2 минуты)
   Post subject:
Reply with quote

Что хотелось бы:

1) сделать все же систему индексирования, чтобы поиск был в [10] раз быстрее (можно просто спросить, сделать ли индекс)
2) сделать сортировку по количеству совпадений
3) сделать [кэширование] результата и разделение на страницы
4) если не делать разделение на страницы, то выводить результаты сразу через flush() (так получится во многих случаях лучше)

А так - форма очень хорошая и юзабельная. (вывод результатов тоже), только скорость явно подкачала
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Thu Jan 15, 2004 5:24 pm (спустя 36 минут)
   Post subject:
Reply with quote

yUAC wrote:
1) сделать все же систему индексирования, чтобы поиск был в [10] раз быстрее (можно просто спросить, сделать ли индекс)
то, думаю, пока отпадает. Скрипт писался для Денвера и для малых и средних сайтов. Если брать во внимание Денвер, то кому захочется делать индексирование документации? Если же брать второе, то на малых и средних сайтах это просто не к чему (объём небольшой, да и индексировать заново сайт после нескольких изменений — мало приятное занятие).
yUAC wrote:
2) сделать сортировку по количеству совпадений
Вот это хорошее предложение (сам об этом думал). Тут есть один вопрос. Такое действие можно сделать путём создание массива (хотя, лучше хеша) с последующей сортировкой и выводом результатов. Вопрос, собственно, в том, не «утяжелит» ли этот процесс сам поиск (то есть, как скажется такая функция на скорость работы).
yUAC wrote:
3) сделать [кэширование] результата и разделение на страницы
Ну это уже перебор. Поиск изначально не был рассчитан на такие возможности. Тем более мы сошлись с ДК на том, что пользователь вообще не поёдёт на следующую страницу, а, следовательно, это бессмысленно (так же следует учитывать алгоритм поиска, который совершенно не рассчитан на постраничный вывод).
yUAC wrote:
4) если не делать разделение на страницы, то выводить результаты сразу через flush() (так получится во многих случаях лучше)
Как я понимаю, Вы говорите на PHP-ном «жаргоне». Можно подробнее (на алгоритмическом языке) что это делает?
yUAC wrote:
только скорость явно подкачала
На счёт скорости это Вы зря. Только подумайте, сколько теперь времени надо, чтобы что-нибудь найти в документации?! (-;
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 194
   поощрить/наказать

Location: 007 495

PostPosted: Thu Jan 15, 2004 7:21 pm (спустя 1 час 56 минут)
   Post subject:
Reply with quote

Ant wrote:
Вопрос, собственно, в том, не «утяжелит» ли этот процесс сам поиск
Нет, по сравнению с чтением файлов, сортировка занимает очень мало времени
Ant wrote:
что это делает
ИМХО в Perl это тоже есть, эта штука сразу отдает браузеру буфер вывода после вызова этой функции (конструкции).
Ant wrote:
Только подумайте, сколько теперь времени надо, чтобы что-нибудь найти в документации?!
Поиск по индексу документации занимает менее 0.5 сек.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Thu Jan 15, 2004 7:52 pm (спустя 30 минут)
   Post subject:
Reply with quote

yUAC wrote:
Нет, по сравнению с чтением файлов, сортировка занимает очень мало времени
Что ж, как только появится секунда свободного времени — сразу этим займусь (скорее всего, что пока Денвер выйдет с версией скрипта, которая уже сущ-ет).
yUAC wrote:
ИМХО в Perl это тоже есть, эта штука сразу отдает браузеру буфер вывода после вызова этой функции (конструкции).
Если честно, то никогда не встречался с этой функцией. В документации Perl (которая есть в электронном виде под рукой) отыскал такое вот утверждение:
Quote:
$|
$OUTPUT_AUTOFLUSH
    Если присвоить этой переменной не нулевое значение то будет
сброс буфера вывода после каждой операции вывода. Значение по умолчанию -0
Это из той же области?
yUAC wrote:
Поиск по индексу документации занимает менее 0.5 сек.
Всё это я понимаю. Ессно дело, что поиск по индексу — это совсем другое. Но опять же повторяю, что этот скрипт писался не для этих целей. Кому захочется индексировать документацию к Денверу (при этом надо учитывать, что индекс занимает определённое место).
Да и на сайтах мало кому захочется индексировать сайт заново каждый раз при добавлении новой статьи, например.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 194
   поощрить/наказать

Location: 007 495

PostPosted: Thu Jan 15, 2004 8:51 pm (спустя 58 минут)
   Post subject:
Reply with quote

Ant wrote:
Это из той же области?
Угу.
Ant wrote:
Да и на сайтах мало кому захочется индексировать сайт заново каждый раз при добавлении новой статьи, например.
Можно пополнять индекс (делать "синхронизацию"), заменив только изменившиеся файлы. В любом случае, для документации по крайней мере можно сделать такую вещь. + к тому, у меня например в папке /home/ находится 200 мегабайт :).
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Thu Jan 15, 2004 10:21 pm (спустя 1 час 30 минут)
   Post subject:
Reply with quote

yUAC wrote:
у меня например в папке /home/ находится 200 мегабайт
Ого! А какие файлы там доминируют (что создаёт такой «вес»)?
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Thu Jan 15, 2004 10:25 pm (спустя 4 минуты)
   Post subject:
Reply with quote

yUAC wrote:
Можно пополнять индекс (делать "синхронизацию"), заменив только изменившиеся файлы.
Так я и говорю, что лень (вот лично мне было бы лень) этим заниматься. Спросите у ДК на счёт этого. (-;
yUAC wrote:
 В любом случае, для документации по крайней мере можно сделать такую вещь
При этом документация начнёт занимать в два раза больше (индекс, как никак).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 4:30 am (спустя 6 часов 4 минуты)
   Post subject:
Reply with quote

Я думаю, что индексирование тут — это перебор. Слишком сложно поддерживать.
Ant wrote:
$|
$OUTPUT_AUTOFLUSH
Если присвоить этой переменной не нулевое значение то будет
сброс буфера вывода после каждой операции вывода. Значение по умолчанию -0
Это из той же области?
Да, это оно. Но только тогда сортировку не получится сделать.

Что касается кэширования — это для того, чтобы поиск по одному и тому же запросу второй раз происходил мгновенно. Делается довольно легко — достаточно перед выводом результатов записывать их в файл "/tmp/dnsearch/"+urlencode($search_params), а при следующем поиске — пытаться вначале считать оттуда (сели time()-(stat $fname)[9]<3600).
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 4:26 pm (спустя 11 часов 56 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Что касается кэширования — это для того, чтобы поиск по одному и тому же запросу второй раз происходил мгновенно.
Ну, это и понятно.

На счёт предложенного алгоритма...
Как я понял, Вы предлагаете каждый найденный результат записывать в файл с определённым названием (в т.ч. и с параметрами поиска в названии), а затем поочерёдно проверять, не совпадают параметры поиска и не перешло ли определённый барьер время создания такого файла. Верно?

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

P.S. Опять обновил версию скрипта. См. первый пост.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 5:45 pm (спустя 1 час 19 минут)
   Post subject:
Reply with quote

Зачем в один файл? Один запрос — один файл, как генерировать его имя (пример) — я уже писал. Имена найденных файлов можно записывать прямо в текстовом виде — по одной строке на файл. Реализация — максимум строк 5-6, и, заметьте, это не вносит структурных изменений в библиотеку (кэширование вообще всегда реализуется в виде дополнительного слоя, легко отделяющегося от основного кода).

Время создания нужно проверять, чтобы кэш иногда устаревал (вдруг документы поменяются).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 5:47 pm (спустя 1 минуту 38 секунд)
   Post subject:
Reply with quote

Кстати, Антон, обратите внимание, что я чуть-чуть изменил шаблон form.html — улучшил «резиновость» (и прислал Вам полную версию). А Вы мне прислали новую версию со старой формой, пришлось вручную вставлять назад.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 6:27 pm (спустя 40 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
 Один запрос — один файл
Ну, это я и имел ввиду. То есть, при каждом «новом» поиске создавать файл со специфичечким названием (по которому потом можно определить, совпадает ли новый поиск с кешем) и записывать туда только пути к файлам, в которых поиск был удачным.
Далее, если скрипт видит, что кеш ещё не устарел, то считывает массив оттуда и подсовывает этот список в функцию поиска.
Я правильно понял?

Есть одна идея: может быть сделать checkbox с возможностью принудительного поиска через кеш («искать с помощью кеша, если это возможно»)?
Дмитрий Котеров wrote:
Кстати, Антон, обратите внимание, что я чуть-чуть изменил шаблон form.html — улучшил «резиновость» (и прислал Вам полную версию). А Вы мне прислали новую версию со старой формой, пришлось вручную вставлять назад.
Это когда по почте высылал? Если да, то эту ошибку я понял давно, а здесь выложен полностью Ваш шаблон (кстати, повторяю, что сегодня я обновил скрипт и выложил его здесь, всё в том же первом посте).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 7:33 pm (спустя 1 час 5 минут)
   Post subject:
Reply with quote

Ant wrote:
искать с помощью кеша, если это возможно
Если кэш существует, то по определению надо искать через него. (-;
А чекбокс только запутает — никто не знает, что такое кэш.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 8:02 pm (спустя 29 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Если кэш существует, то по определению надо искать через него.
Если только он не устарел... (-;
Дмитрий Котеров wrote:
А чекбокс только запутает — никто не знает, что такое кэш.
Да уж.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 8:18 pm (спустя 16 минут)
   Post subject:
Reply with quote

Ant wrote:
Если только он не устарел
Если кэш устарел, то он не существует! У кэша вообще может быть только 2 состояния: либо он есть (существует, валидный), либо его нет (пустой, не существует, инвалидный).
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Fri Jan 16, 2004 8:32 pm (спустя 13 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Если кэш устарел, то он не существует! У кэша вообще может быть только 2 состояния: либо он есть (существует, валидный), либо его нет (пустой, не существует, инвалидный).
Но сначала его надо удалить...
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 1:14 am (спустя 4 часа 42 минуты)
   Post subject:
Reply with quote

В общем так. Как обычно я обновил в первом посте архив со скриптом.

Изменения:
1). Теперь может происходить кэширование результатов поиска, при чём:
а). возможно указать надо ли делать кэширование или нет;
б). кэширование происходит *полностью* (то биш, все данные, которые выводятся на страницу после поиска, пишутся в кэш);
в). возможность самому выбрать время жизни кэша (по умолчанию — 1 час).

2). Появилась сортировка по количеству совпадений.

Прошу всех протестировать в работе данный скрипт. Я просто не в состоянии отловить всех ошибок (а они, скорее всего, есть).

P.S.
Дмитрий Котеров wrote:
Реализация — максимум строк 5-6,
Ну да... (=
Дмитрий Котеров wrote:
заметьте, это не вносит структурных изменений в библиотеку
Вот это, да (шаблонность, как-никак). (-;
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 1:30 am (спустя 16 минут)
   Post subject:
Reply with quote

Ant wrote:
Ну да... (=
А что? Например, такая модель.

Было:
Code (perl): скопировать код в буфер обмена
my @elements;
@elements = getResult();
Стало:
Code (perl): скопировать код в буфер обмена
my @elements;
my $cache = "/tmp/search/".do{ ($_=$query)=~s (www.perldoc.com/perl5.6/pod/func/s.html)/(.)/sprintf (www.perldoc.com/perl5.6/pod/func/sprintf.html) "%%%02X", ord (www.perldoc.com/perl5.6/pod/func/ord.html) $1/sge; $_ };
if (time (www.perldoc.com/perl5.6/pod/func/time.html)() - (stat (www.perldoc.com/perl5.6/pod/func/stat.html) $cache)[9] < 3600) {
  open (www.perldoc.com/perl5.6/pod/func/open.html)(local (www.perldoc.com/perl5.6/pod/func/local.html) *F, $cache);
  @elements = split (www.perldoc.com/perl5.6/pod/func/split.html) "\n", <F>;
} else {
  open (www.perldoc.com/perl5.6/pod/func/open.html)(local (www.perldoc.com/perl5.6/pod/func/local.html) *F, ">$cache");
  print (www.perldoc.com/perl5.6/pod/func/print.html) F join (www.perldoc.com/perl5.6/pod/func/join.html) "\n", (@elements=getResult());
}
Добавилось 7 строчек.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 1:55 am (спустя 25 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Добавилось 7 строчек.
А толку-то мало. (-:

Там ещё с десяток операций нужно проделать. Меньше, конечно, но всё же.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 2:32 am (спустя 36 минут)
   Post subject:
Reply with quote

Кстати, как можно узнать сколько «весит» директория (для фиксирования размера кэша)? Или надо поочерёдно сложить размеры всех файлов в директории?
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 194
   поощрить/наказать

Location: 007 495

PostPosted: Sat Jan 17, 2004 11:55 am (спустя 9 часов 22 минуты)
   Post subject:
Reply with quote

Ant wrote:
документация начнёт занимать в два раза больше (индекс, как никак).
Это смотря как туда записывать (у меня индекс документации получился чуть ли не в 5 раз меньше). Обычно индекс занимает существенно меньше места, и именно в этом он обычно выигрывает...
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 2:05 pm (спустя 2 часа 10 минут)
   Post subject:
Reply with quote

yUAC wrote:
Это смотря как туда записывать (у меня индекс документации получился чуть ли не в 5 раз меньше).
Ну, на счёт 5 раз от действительного значения (если сравнивать с исходным размером, полностью выбросив из него то, по чему поиск не производится)... что-то я сильно сомневаюсь. Но даже если и так, то ( 200мб / 5 ) = 40мб нового лишнего «веса». Мало приятного, если место на хостинге осталось мало...
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9994
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 2:11 pm (спустя 6 минут)
   Post subject:
Reply with quote

Ant wrote:
Мало приятного, если место на хостинге осталось мало...
Так, что-то я не понял -- хостинг тут при чём? Или Денвер уже "позиционируется" как полноценный пакет для интернета?
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 2:23 pm (спустя 12 минут)
   Post subject:
Reply with quote

baev wrote:
Или Денвер уже "позиционируется" как полноценный пакет для интернета?
Это не Денвер так позиционируется, а скрипт для поиска (он не только для Денвера писался).
Back to top
View user's profile Send private message Send e-mail
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9994
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 2:28 pm (спустя 4 минуты)
   Post subject:
Reply with quote

Ant wrote:
Это не Денвер так позиционируется, а скрипт для поиска (он не только для Денвера писался).
А топик как называется?..
(По-моему, его переименовать бы -- типа, "скрипт поиска не только для Денвера.")
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sat Jan 17, 2004 3:05 pm (спустя 37 минут)
   Post subject:
Reply with quote

baev wrote:
А топик как называется?..
Ну да хватит не по теме...
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 194
   поощрить/наказать

Location: 007 495

PostPosted: Sat Jan 17, 2004 4:16 pm (спустя 1 час 10 минут)
   Post subject:
Reply with quote

Ant wrote:
что-то я сильно сомневаюсь
Попробуйте, и если действительно выбрасывать все лишнее, то примерно так оно и будет
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 12:34 am (спустя 8 часов 17 минут)
   Post subject:
Reply with quote

Ant wrote:
Там ещё с десяток операций нужно проделать. Меньше, конечно, но всё же.
Погодите, какой «десяток операций»? Это полный код (разве что не все параметры поиска учитываются, но это еще 2 строчки), и он подходит для чего угодно, а не только для поиска.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 12:39 am (спустя 5 минут)
   Post subject:
Reply with quote

Я понял, какие операции Вы имели в виду. Что ж, если хранить в кэше еще и ошибки, тогда да.

Кстати, кэшировать лучше прежде всего в /tmp/dnsearch (и только если /tmp не существует, в своей директории). Это относится и к хостингу: там тоже обычно есть /tmp, в которой удобно хранить разные временные файлы.

И, конечно, директорию кэша нужно каждый раз создавать заново (если она не существует), а то пользователь будет весьма смущен, если вдруг ее удлит. В заглушке sendmail сделано так:
Code (perl): скопировать код в буфер обмена
mkPath($out) or die (www.perldoc.com/perl5.6/pod/func/die.html) "Could not create directory structure $out\n";
# ...
# Creates the specified directory path.
sub mkPath
{        my ($dir) = @_;
        my @parts = split (www.perldoc.com/perl5.6/pod/func/split.html) m (www.perldoc.com/perl5.6/pod/func/m.html){[/\\]}, $dir;
        my $path = ".";
        foreach (@parts) {
                $path = "" if $_ eq "";
                $path .= "/$_";
                warn (www.perldoc.com/perl5.6/pod/func/warn.html) "$path\n";
                if (!-e $path) {
                        mkdir (www.perldoc.com/perl5.6/pod/func/mkdir.html) $path, 0770 or return (www.perldoc.com/perl5.6/pod/func/return.html);
                }
        }
        return (www.perldoc.com/perl5.6/pod/func/return.html) 1;
}
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 12:50 am (спустя 11 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Я понял, какие операции Вы имели в виду. Что ж, если хранить в кэше еще и ошибки, тогда да.
И не только. Кэш ещё надо проверять на инвалидность, а это — ещё лишние 4-5 строк. Плюс, надо удалять кеш при его «критическом» размере. Там много чего надо сделать, чтобы учесть все тонкие моменты.
Дмитрий Котеров wrote:
Кстати, кэшировать лучше прежде всего в /tmp/dnsearch
Это всё настраиваемо, так что не думаю, что это создаст какие-нибудь трудности.
Дмитрий Котеров wrote:
, конечно, директорию кэша нужно каждый раз создавать заново (если она не существует), а то пользователь будет весьма смущен, если вдруг ее удлит.
Хорошая идея, спасибо.

Есть у меня один вопрос (о путях поиска, которые скрипт так «умно» обрабатывает):
Если указывается URL, то всё окей;
Если указывается путь вида «z:/home», то так же всё окей;
Но, если указывается путь вида «/home/» (ну, или вроде того), то получается весьма интересная штука: скрипт выводит все результаты в виде «/home/что_то/там/нашлось.html». Но система не знает, как открыть этот файл, так как не указан диск. Что можно сделать в данной ситуации?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 12:54 am (спустя 3 минуты)
   Post subject:
Reply with quote

О, господи!

Зачем же Вы HTML-то закэшировали?
Кэширование должно работать на том же слое, что и система, которая кэшируется, и быть невидимым из более высоких слоев. В частности, если кэширование идет на уровне контроллера, то кэшируются только данные без привязки к шаблону, а если на уровне шаблона (как в шаблонизаторе) — то только на уровне HTML (не образая внимание на структуру данных — это обычный текст). У Вас же мешанина получилась.

Я скажу, чем это неудобно. Если бы кэшировались только результаты поиска (а именно — найденные пути к файлам), то очень легко было бы приделать разбивку по страницам. А как теперь ее приделать? Практически невозможно. Кроме того, теперь изменение шаблона не отразится на внешнем виде закэшированного результата.

А следовательно, нарушен главный принцип кэширования — это его прозрачность.
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 1:11 am (спустя 17 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
О, господи!
Воистину... (-;
Дмитрий Котеров wrote:
У Вас же мешанина получилась.
Ну, не скажите.
Дмитрий Котеров wrote:
Если бы кэшировались только результаты поиска (а именно — найденные пути к файлам)
...то надо было бы делать весь поиск заново. Как не крути, а надо было бы делать повторные операции, которые уже были сделаны.
Дмитрий Котеров wrote:
то очень легко было бы приделать разбивку по страницам. А как теперь ее приделать?
Ну, с этим я с Вами очень долго буду спорить, после того, как Вы ответите мне на мой предыдущий вопрос (о путях).
Разбивку на страницы я как раз-таки уже сделал (именно такая структура позволила её реализовать в два счёта) и осталась одна проблема: с путями.
Дмитрий Котеров wrote:
А следовательно, нарушен главный принцип кэширования — это его прозрачность.
Да на кой нам эта прозрачность?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 1:32 am (спустя 21 минуту)
   Post subject:
Reply with quote

Ant wrote:
...то надо было бы делать весь поиск заново
Это, наверное, Вы верно заметили — структуру пришлось бы переделать.
Ну да все равно, я писал про кэширование в общем случае.
Ant wrote:
Да на кой нам эта прозрачность?
Из идеологических соображений. (-;
Вообще, все идеологические соображения вдруг резко становятся практическими, как только размер программы насчинает возрастать.
Ant wrote:
Но, если указывается путь вида «/home/» (ну, или вроде того), то получается весьма интересная штука: скрипт выводит все результаты в виде «/home/что_то/там/нашлось.html». Но система не знает, как открыть этот файл, так как не указан диск. Что можно сделать в данной ситуации?
Боюсь, только указать слева имя диска. Как его вычислить — боюсь, только через вызов system("dir>/tmp/a") (использовать `` — обратные апострофы — не рекомендуется, потому что в ActivePerl с этим иногда глюки — система виснет) и последующий анализ получившегося файла.
А кроме того, приписать префикс "file://" к началу пути.

Да, только что мне удалось экспериментальным путем выяснить, (stat '.')[0] в Windows для A: возвращает 0, для B: — 1 и т.д., т.е. можно попробовать сделать chr(ord('A')+(stat '.')[0]) (правда, я не проверял это в Windows 95, только в 2003).
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 2:11 am (спустя 39 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
структуру пришлось бы переделать
Тут немного не так. В этом случае структуру бы вообще не пришлось переделывать. Просто берём и «подсовываем» программе список файлов для поиска из кэша. Вот и всё. Я тоже хотел так сделать, но при работе пришла идея: «зачем, собственно, делать кэш, если поиск всё равно будет происходить?». После этого я хотел сделать так, чтобы в кеш записывались только найденные значения (потом из него доставать и «подсовывать» функциям, которые обрабатывают шаблоны). Но это оказалось уже слишком сложным, и я решил просто писать выходные данные в файл.
Дмитрий Котеров wrote:
Вообще, все идеологические соображения вдруг резко становятся практическими, как только размер программы насчинает возрастать.
Вот здесь Вы правы!
Дмитрий Котеров wrote:
А кроме того, приписать префикс "file://" к началу пути.
Ага. Я пробовал так сделать. Но на путь вроде «file:///usr/...» система очень сильно плевалась. (-;

В общем, я оставлю возможность поиска таким способом, но это будет на совести и пользователя.
То есть, остаются 2 основных способов поиска:
1). «z:/home/...»;
2). «localhost/something».

Всё остальное будет на совести у пользователя (может просто быть удобным указание в качестве пути «/home/» — ищется-то всё нормально).

P.S. Завтра выложу новую версию с постраничным выводом (я уже всерьёз начинаю подумывать над индексом (-; ).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 2:17 am (спустя 6 минут)
   Post subject:
Reply with quote

Ant wrote:
этого я хотел сделать так, чтобы в кеш записывались только найденные значения (потом из него доставать и «подсовывать» функциям, которые обрабатывают шаблоны).
Вообще, обычно именно так и делается. (-;
Кэшируют то, что больше всего нагружает процессор, при этом стараются, чтобы это «нечто» было минимально параметризировано (т.е. зависело от минимального числа параметров).

Если же потом обнаруживается, что какая-то другая часть тоже нагружает процессор — просто делают второе кэширование, не обращая внимание на первое. В этом преимущество «прозрачности».
Ant wrote:
Но на путь вроде «file:///usr/...» система очень сильно плевалась. (-;
И правильно делала. Откуда ж браузер узнает текущий диск?
Ant wrote:
z:/home/...
Вы знаете, такой путь нельзя ни в коем случае оставлять в Денвере, ибо имя виртуального диска неизвестно (это не обязательно Z: — можно ставить куда угодно).
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 11:04 am (спустя 8 часов 46 минут)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Вообще, обычно именно так и делается. (-;
Согласен.
Дмитрий Котеров wrote:
Кэшируют то, что больше всего нагружает процессор, при этом стараются, чтобы это «нечто» было минимально параметризировано (т.е. зависело от минимального числа параметров).
Ну, хорошо. Давайте прямо говорить. Изменить то, что есть сейчас на то, что предлагаете Вы — дело 5-ти минут (т.е., очень просто). Менять? Я просто не особо понимаю, как надо поступть.

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

Всё это отлично, но тут пришла идея: что если сделать индекс? Если оставить кэширование на том уровне, что есть сейчас, то индекс с лёгкостью будет кэшироваться по точно такой же схеме, что и обычный поиск. Если же в кэше указывать только пути к файлам, то кэширование индекса... даже пока и не знаю как это сделать (пока не рассматривал оптимальную структуру оного).

Что думаете?
Может ещё кто-нибудь подключится к решению проблемы?
Дмитрий Котеров wrote:
И правильно делала. Откуда ж браузер узнает текущий диск?
Естесственно.
Дмитрий Котеров wrote:
Вы знаете, такой путь нельзя ни в коем случае оставлять в Денвере, ибо имя виртуального диска неизвестно (это не обязательно Z: — можно ставить куда угодно).
Так вот я про это и говорю! Что делать-то с Денвером (где Вами была указана опция поиска по корневосу каталогу)?
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 12:35 pm (спустя 1 час 31 минуту)
   Post subject:
Reply with quote

Кстати, ещё один вопрос: какие права доступа надо назначать (и вообще, надо ли их трогать) при создании новых папок/файлов в данном случае?
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6836
Карма: 131
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 12:55 pm (спустя 19 минут)
   Post subject:
Reply with quote

Что ж ко мне идеи-то всё лезут?

Думаю, что прописывать в кэше пути к файлам всё-таки придётся. Хочу сделать опцию «поиск в найденном». А без путей в данном случае не обойтись.

Вот блин, придётся и так и эдак делать. Одно плохо: размер кэша оставляет желать лучшего...
Как бы это сделать по солиднее?
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 409
   поощрить/наказать


PostPosted: Sun Jan 18, 2004 8:38 pm (спустя 7 часов 43 минуты)
   Post subject:
Reply with quote

Ant wrote:
Всё это отлично, но тут пришла идея: что если сделать индекс? Если оставить кэширование на том уровне, что есть сейчас, то индекс с лёгкостью будет кэшироваться по точно такой же схеме, что и обычный поиск. Если же в кэше указывать только пути к файлам, то кэширование индекса... даже пока и не знаю как это сделать (пока не рассматривал оптимальную структуру оного).
Что Вы подразумеваете под «индексом»? Ничего не понимаю.
Ant wrote:
Ну, хорошо. Давайте прямо говорить. Изменить то, что есть сейчас на то, что предлагаете Вы — дело 5-ти минут (т.е., очень просто). Менять? Я просто не особо понимаю, как надо поступть.
Это Вам решать. (-;
Главный критерий — это чтобы программа работала, все остальное — лишь детали.
Ant wrote:
С другой — не надо делать лишний раз поиск (за то надо делать больше телодвижений).
Вот этого я не понимаю. Почему «лишний раз поиск»? В кэше же сохраняются имена файлов, в которых было что-то найдено. Таких файлов — обычно штук 10...100. Искать в них слово для подсветки его контекста — относительно грошовая операция, а если будет разбиение на страницы — то и подавно.
Ant wrote:
Что делать-то с Денвером (где Вами была указана опция поиска по корневосу каталогу)?
Выше я писал про решение с (stat $fname)[0].
Ant wrote:
какие права доступа надо назначать
0770 для директорий, для файлов — по умолчанию, можно не менять.
Для директорий надо ставить именно 0770 потому, что они могут создаваться в /tmp, а там права чтения для всех ни к чему.
Ant wrote:
Хочу сделать опцию «поиск в найденном».
Вы уверены, что это юзабельно? По-моему, мало кто этим пользуется. К тому же если сделать несколько раз поиск в найденном, очень легко запутаться.
Ant wrote:
Вот блин, придётся и так и эдак делать. Одно плохо: размер кэша оставляет желать лучшего...
Как бы это сделать по солиднее?
Зачем делать «и так, и эдак»? Можно просто хранить в кэше имена файлов, в которых было что-то найдено, и все, больше ничего. Тогда и размер будет маленьким.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page 1, 2, 3, 4, 5, 6  Next
Page 1 of 6    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML