Какой самый быстрый способ определить полный URL-адрес по относительному URL-адресу (учитывая базовый URL)

StackOverflow https://stackoverflow.com/questions/26855

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

Возможно, я ошибся концом палки, но не стал бы,

$full_url = $base_url . $relative_url

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top