Qual é a maneira mais rápida de determinar um URL completo a partir de um URL relativo (dado um URL base)?

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

Pergunta

Atualmente estou usando o módulo URI::URL para gerar uma URL completa a partir de uma URL relativa;no entanto, ele não está funcionando tão rápido quanto eu gostaria.Alguém conhece outra maneira de fazer isso que possa ser mais rápida?

Foi útil?

Solução

O código a seguir deve funcionar.

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

Você também deve dar uma olhada a página URI em search.cpan.org.

Outras dicas

Acabou de acontecer Este artigo que apontam deficiências nas implementações Redhat/Centos/Fedora de Perl que afetam URI profundamente.

Se você estiver executando uma dessas versões do Linux, você pode querer recompilar o Perl a partir da fonte original (não da fonte RPM).

Percebi que qualquer pessoa executando código perl com o interpretador perl de distribuição no Redhat 5.2, Centos 5.2 ou Fedora 9 é provavelmente uma vítima.Sim, mesmo que seu código não use o idioma sofisticado de bênção/sobrecarga, muitos módulos CPAN usam!Esta pesquisa no Google mostra que mais de 1.500 módulos usam o idioma abençoar/sobrecarregar e incluem alguns realmente populares, como URI, JSON....

...Neste ponto, decidi recompilar o perl a partir do código-fonte.O bug desapareceu.E a diferença era terrível.Tudo ficou seriamente rápido.As CPUs estavam esfriando com uma carga média abaixo de 0,10 e estávamos processando dados 100x a 1000x mais rápido!

Brendan, eu deveria ter esclarecido que não posso garantir como será o caminho relativo.Pode ser bastante complicado (por ex.tem barra na frente, não tem barra, tem "../", etc).

Peter, é isso que estou usando agora.Ou isso é mais rápido do que usar URI::URL->new($path)->abs?

Pode depender um pouco de como você obtém essas 2 strings.Provavelmente a maneira segura e à prova de fogo de fazer isso é a que está em URI::URL ou bibliotecas similares, onde todas as alternativas, inclusive as maliciosas, seriam consideradas.Talvez mais lento, mas em alguns ambientes mais rápida será a velocidade de uma bala atingindo seu próprio pé.

Mas se você espera que haja algo simples e não complicado, veja se começa com /, cadeias de ../ ou qualquer outro caractere.O primeiro colocaria o nome do servidor + a url, o segundo cortaria os caminhos do uri base até entrar em uma das outras 2 alternativas, ou apenas adicionaria ao url base.

Talvez eu tenha entendido errado, mas não faria isso,

$full_url = $base_url . $relative_url

trabalhar?O processamento de texto IIRC Perl é bastante rápido.

@lennysan Ah, claro, sim, claro.Desculpe, não posso ajudar, meu Perl está bastante enferrujado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top