¿Cuál es la forma más rápida de determinar una URL completa a partir de una URL relativa (dada una URL base)?

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

Pregunta

Actualmente estoy usando el módulo URI::URL generar una URL completa a partir de una URL relativa;sin embargo, no funciona tan rápido como me gustaría.¿Alguien conoce otra forma de hacer esto que pueda ser más rápida?

¿Fue útil?

Solución

El siguiente código debería funcionar.

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

También deberías echar un vistazo a la página URI en search.cpan.org.

Otros consejos

acaba de pasar al otro lado Este artículo que señalan deficiencias en las implementaciones de Perl en Redhat/Centos/Fedora que afectan URI profundamente.

Si está ejecutando una de estas versiones de Linux, es posible que desee volver a compilar Perl desde la fuente original (no desde la fuente RPM).

Me di cuenta de que cualquiera que ejecute código Perl con el intérprete de distribución Perl en Redhat 5.2, Centos 5.2 o Fedora 9 probablemente sea una víctima.Sí, incluso si su código no utiliza el sofisticado modismo de bendición/sobrecarga, ¡muchos módulos CPAN sí lo hacen!Esta búsqueda en Google muestra más de 1500 módulos que utilizan el modismo bless/overload e incluyen algunos muy populares como URI, JSON....

...En este punto, decidí recompilar Perl desde la fuente.El error desapareció.Y la diferencia era atroz.Todo fue muy rápido.Las CPU se enfriaban con una carga promedio inferior a 0,10 y estábamos procesando datos entre 100 y 1000 veces más rápido.

Brendan, debería haber aclarado que no puedo garantizar cómo será la ruta relativa.Podría ser bastante complicado (p. ej.tiene una barra al frente, no tiene barra, tiene "../", etc.).

Peter, eso es lo que estoy usando ahora.¿O es más rápido que usar URI::URL->new($path)->abs?

Podría depender un poco de cómo obtengas esas 2 cadenas.Probablemente la forma segura e incombustible de hacerlo sea la que se encuentra en URI::URL o bibliotecas similares, donde se considerarían todas las alternativas, incluidas las maliciosas.Quizás más lento, pero en algunos entornos más rápida será la velocidad de una bala que llega a tu propio pie.

Pero si espera que haya algo sencillo y no complicado, puede ver si comienza con /, cadenas de ../ o cualquier otro carácter.El primero pondría el nombre del servidor + la URL, el segundo cortaría las rutas desde el URI base hasta ingresar a una de las otras 2 alternativas, o simplemente lo agregaría a la URL base.

Tal vez me equivoqué de opinión, pero no lo haría,

$full_url = $base_url . $relative_url

¿trabajar?El procesamiento de texto IIRC Perl es bastante rápido.

@lennysan Ah claro que si claro.Lo siento, no puedo ayudar, mi Perl está bastante oxidado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top