ما هي أسرع طريقة لتحديد عنوان URL الكامل من عنوان URL نسبي (بالنظر إلى عنوان URL الأساسي)

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

سؤال

أنا أستخدم الوحدة حاليًا URI::URL لإنشاء عنوان URL كامل من عنوان URL نسبي؛ومع ذلك، فإنه لا يعمل بالسرعة التي أريدها.هل يعرف أحد طريقة أخرى للقيام بذلك قد تكون أسرع؟

هل كانت مفيدة؟

المحلول

يجب أن تعمل التعليمات البرمجية التالية.

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

يجب عليك أيضا إلقاء نظرة على صفحة URI على search.cpan.org.

نصائح أخرى

حدث للتو عبر هذا المقال والتي تشير إلى أوجه القصور في تطبيقات Redhat/Centos/Fedora لـ Perl والتي تؤثر على URI بعمق.

إذا كنت تستخدم إحدى نكهات Linux هذه، فقد ترغب في إعادة ترجمة Perl من المصدر الأصلي (وليس مصدر RPM).

لقد أدركت أن أي شخص يقوم بتشغيل كود Perl باستخدام مترجم Perl للتوزيع على Redhat 5.2 أو Centos 5.2 أو Fedora 9 من المحتمل أن يكون ضحية.نعم، حتى لو كان الكود الخاص بك لا يستخدم المصطلح الرائع/التحميل الزائد، فإن العديد من وحدات CPAN تفعل ذلك!يُظهر بحث Google هذا أكثر من 1500 وحدة تستخدم لغة Bless/overload، وتتضمن بعض الوحدات الشائعة حقًا مثل URI وJSON....

...عند هذه النقطة، قررت إعادة ترجمة بيرل من المصدر.لقد ذهب الخلل.وكان الفرق مروعا.كل شيء أصبح سريعًا جدًا.كانت وحدات المعالجة المركزية (CPU) تقشعر لها الأبدان عند معدل تحميل أقل من 0.10 وكنا نعالج البيانات بشكل أسرع بمعدل 100 إلى 1000 مرة!

بريندان، كان ينبغي علي أن أوضح أنني لا أستطيع ضمان الشكل الذي سيبدو عليه المسار النسبي.يمكن أن يكون الأمر صعبًا جدًا (على سبيل المثال.به شرطة مائلة في المقدمة، ولا يحتوي على شرطة مائلة، وله "../"، وما إلى ذلك).

بيتر، هذا ما أستخدمه الآن.أم أن ذلك أسرع من استخدام URI::URL->new($path)->abs؟

يمكن أن يعتمد قليلاً على كيفية الحصول على هاتين السلسلتين.ربما تكون الطريقة الآمنة والمقاومة للحريق للقيام بذلك هي ما هو موجود في URI::URL أو المكتبات المشابهة، حيث سيتم أخذ جميع البدائل، بما في ذلك البدائل الضارة، بعين الاعتبار.ربما أبطأ، ولكن في بعض البيئات ستكون سرعة الرصاصة التي تصل إلى قدمك أسرع.

ولكن إذا كنت تتوقع أن هناك شيئًا واضحًا وغير صعب، فيمكنك معرفة ما إذا كان يبدأ بـ /، أو سلاسل ../، أو أي حرف آخر.الأول سيضع اسم الخادم + عنوان url، والمسارات الثانية من عنوان url الأساسي حتى الوصول إلى أحد البديلين الآخرين، أو قم فقط بإضافته إلى عنوان url الأساسي.

ربما أخطأت في وضع نهاية العصا ولكني لم أفعل ذلك،

$full_url = $base_url . $relative_url

عمل؟معالجة النصوص IIRC Perl سريعة جدًا.

@لينيسان اه بالتأكيد نعم بالطبع.آسف لا أستطيع المساعدة، فبرنامج Perl الخاص بي صدئ جدًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top