Какой самый быстрый способ определить полный URL-адрес по относительному URL-адресу (учитывая базовый URL)
-
09-06-2019 - |
Вопрос
В настоящее время я использую этот модуль 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 изрядно заржавел.