Quel est le moyen le plus rapide de déterminer une URL complète à partir d'une URL relative (à partir d'une URL de base)

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

Question

J'utilise actuellement le module URI::URL pour générer une URL complète à partir d'une URL relative ;cependant, il ne fonctionne pas aussi vite que je le souhaiterais.Quelqu'un connaît-il une autre façon de procéder, qui pourrait être plus rapide ?

Était-ce utile?

La solution

Le code suivant devrait fonctionner.

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

Vous devriez également jeter un oeil à la page URI sur search.cpan.org.

Autres conseils

C'est juste arrivé à travers Cet article qui soulignent des lacunes dans les implémentations Redhat/Centos/Fedora de Perl qui affectent URI profondément.

Si vous utilisez l'une de ces versions de Linux, vous souhaiterez peut-être recompiler Perl à partir de la source d'origine (et non de la source RPM).

J'ai réalisé que quiconque exécute du code Perl avec l'interpréteur Perl de distribution sur Redhat 5.2, Centos 5.2 ou Fedora 9 est probablement une victime.Oui, même si votre code n’utilise pas l’idiome sophistiqué de bénédiction/surcharge, de nombreux modules CPAN le font !Cette recherche Google montre que plus de 1 500 modules utilisent l'idiome bless/overload et qu'ils incluent des modules très populaires comme URI, JSON....

...À ce stade, j'ai décidé de recompiler Perl à partir des sources.Le bug avait disparu.Et la différence était épouvantable.Tout est devenu très vite.Les processeurs refroidissaient à une charge moyenne inférieure à 0,10 et nous traitions les données 100 à 1 000 fois plus rapidement !

Brendan, j'aurais dû préciser que je ne peux pas garantir à quoi ressemblera le chemin relatif.Cela pourrait être assez délicat (par ex.a une barre oblique à l'avant, n'a pas de barre oblique, a "../", etc.).

Peter, c'est ce que j'utilise maintenant.Ou est-ce plus rapide que d'utiliser URI::URL->new($path)->abs ?

Cela pourrait dépendre un peu de la façon dont vous obtenez ces 2 chaînes.La manière sécurisée et ignifuge de le faire est probablement ce qui se trouve dans URI::URL ou dans des bibliothèques similaires, où toutes les alternatives, y compris les plus malveillantes, seraient prises en compte.Peut-être plus lentement, mais dans certains environnements, la vitesse d'une balle atteignant votre propre pied sera plus rapide.

Mais si vous vous attendez à quelque chose de simple et pas compliqué, vous pourrez voir si cela commence par /, des chaînes de ../ ou tout autre caractère.Le 1er mettrait le nom du serveur + l'URL, le 2ème chemins de coupe depuis l'URI de base jusqu'à entrer dans l'une des 2 autres alternatives, ou l'ajouterait simplement à l'URL de base.

Peut-être que je me suis trompé de bâton, mais je ne le ferais pas,

$full_url = $base_url . $relative_url

travail?Le traitement de texte IIRC Perl est assez rapide.

@lennysan Ah bien sûr oui bien sûr.Désolé, je ne peux pas aider, mon Perl est plutôt rouillé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top