Какой самый быстрый способ определить полный URL-адрес из относительного URL-адреса (с учетом базового URL-адреса) - PullRequest
4 голосов
/ 26 августа 2008

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

Ответы [ 5 ]

4 голосов
/ 26 августа 2008

Только что произошло в этой статье , которая указывает на недостатки в реализациях Perl в Redhat / Centos / Fedora, которые сильно влияют на URI.

Если вы используете один из этих вариантов Linux, вы можете перекомпилировать Perl из исходного источника (не RPM-источника).

Я понял, что любой, кто запускает perl-код с дистрибутивом perl-интерпретатора на Redhat 5.2, Centos 5.2 или Fedora 9, скорее всего, является жертвой. Да, даже если ваш код не использует причудливую форму благословения / перегрузки, многие модули CPAN используют! Этот поиск в Google показывает, что более 1500 модулей используют идиому благословения / перегрузки и включают в себя некоторые действительно популярные, такие как URI, JSON. ...

... В этот момент я решил перекомпилировать Perl из исходного кода. Ошибка исчезла. И разница была ужасающей. Все стало очень быстро. Процессоры охлаждались при нагрузке ниже 0,10, и мы обрабатывали данные в 100-1000 раз быстрее!

3 голосов
/ 26 августа 2008

Следующий код должен работать.

$uri = URI->new_abs( $str, $base_uri )

Вы также должны взглянуть на страницу URI на search.cpan.org .

1 голос
/ 28 августа 2008

Может немного зависеть, как вы получите эти 2 строки. Вероятно, безопасный, несгораемый способ сделать это - то, что находится в URI :: URL или подобных библиотеках, где будут рассмотрены все альтернативы, включая вредоносные. Возможно, медленнее, но в некоторых средах быстрее будет скорость пули, идущей к вашей ноге.

Но если вы ожидаете, что что-то простое и не хитрое может увидеть, начинается ли оно с /, цепочек ../ или любого другого символа. 1-й будет помещать имя сервера + URL-адрес, 2-й путь прерывания от базового URI до получения одного из двух других вариантов или просто добавить его в базовый URL-адрес.

1 голос
/ 26 августа 2008

Брендан, я должен был уточнить, что я не могу гарантировать, как будет выглядеть относительный путь. Это может быть довольно сложно (например, с косой чертой в передней части, без косой черты, с "../" и т. Д.).

Питер, это то, что я сейчас использую. Или это быстрее, чем при использовании URI :: URL-> new ($ path) -> abs?

0 голосов
/ 26 августа 2008

Возможно, я получил неправильный конец палки, но не смогу,

$full_url = $base_url . $relative_url

работа? Обработка текста в IIRC Perl довольно быстрая.

@ lennysan Да, конечно, конечно. Извините, я не могу помочь, мой Perl довольно ржавый.

...