سؤال

لدي زميل يبحث في التخزين المؤقت لشفرات التشغيل/تسريع Zend (افترضت دائمًا أنهما نفس الشيء) لتطبيقنا المستند إلى PHP.يبدو أن معاييره تشير إلى أننا لا نرى فائدة في الأداء إذا قمنا بتضمين مكتبات الفئات (الكبيرة) لدينا مع require_once، ولكننا نرى فائدة الأداء عند استخدام include_once.

تبدو هذه الرائحة مريبة لكلينا، لكن ليس لدي الوقت للتحقق من المنهجية المرجعية التي نتبعها بنفسي، كما أن زميلي لديه قدرة أكبر على تحمل رائحة السمك مني.:)

هل واجه أي شخص أي شيء مثل هذا من قبل؟إذا لم يكن الأمر كذلك، هل هناك أي أفكار حول أشياء أخرى قد تتسبب في ظهور زيادة في الأداء عن طريق التبديل من include_once إلى require_once؟

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

المحلول

بالنسبة للمبتدئين، كلا الاستدعاءين (require_once و include_once) يتحققان مرة أخرى مما إذا كان الملف لم يتم تضمينه من قبل.

لذا فإن الطريقة التي يحقق بها كلاهما ذلك هي من خلال البحث في الملف في جميع المسارات المتاحة والتحقق بشكل أساسي مما إذا لم يكن موجودًا في المزيج من قبل وما إلى ذلك.

ما يحدث في الخلفية هو أنهم يقومون بتقييم جميع الخيارات المختلفة (على سبيل المثال.متعددة include_path، وما إلى ذلك) ثم عن طريق إنشاء ملف com.realpath ومن هذا النموذج المختصر يقومون بإنشاء معرف فريد.هناك طريق واحد فقط ونفس الطريق، وليس طريقين.

هذه ليست بالفعل أسرع عملية على هذا الكوكب وتحدث بشكل عام مع كل طلب باستخدام PHP.ثم أضف عملية أخرى باهظة الثمن وهي الإحصائيات عندما تقوم بإنشاء ما أسميه com.realpath (المسار الحقيقي، لأنه نوع من ما مسار حقيقي () يفعل) للتحقق من وجود الملف.

صحّحوني إذا كنت مخطئًا، لكن APC لديها تحسينات خاصة لهذه الحالة.

على أي حال - الآن على الفرق بين require_once و include_once، وهو أن require_once يقوم بتقييم الملف (for.once). مستوى منخفض أخطاء التحليل، وما إلى ذلك) عندما يتضمن ذلك.يعد هذا فحصًا إضافيًا يمكنك التخلص منه إذا كان لديك ما يكفي من ضمان الجودة بحيث لا يمكن لخطأ التحليل أن يتسلل إلى التضمين.

من الصعب العثور على خلاف ذلك.:-)

(شيء يجب مراعاته:يمكنك التطوير باستخدام require_once واستبدال جميع الاستدعاءات بـ include_once عند النشر.)

أما بالنسبة لذاكرة التخزين المؤقت لرمز التشغيل - فأنا أوصي بها ناقلة جنود مدرعة.لقد تمت مناقشته حول تدفق المكدس من قبل.أنا شخصياً أستخدمه/نستخدمه لفترة من الوقت (نتعامل مع ما يقرب من 100 ألف زائر يوميًا مع 3 واجهات أمامية وواجهة خلفية واحدة) ونحن سعداء جدًا.تم أيضًا تحسين APC لجنون require_once/include_once.

أحد الآثار الجانبية الرائعة هو أن APC يسمح لك أيضًا بتخزين متغيرات PHP في الذاكرة - نوعًا ما من المتغيرات الثابتة، وما إلى ذلك.

بعض المؤشرات الإضافية:

  1. يدعي الكثير من الأشخاص إمكانية تسريع أي تطبيق باستخدام __تحميل تلقائى.
  2. باستخدام ذاكرة التخزين المؤقت لرمز التشغيل، تجنب الشرط require_once/include_once (على سبيل المثال.في الحلقات أو في تدفق التحكم).
  3. يقول بعض الأشخاص أن /absolute/path/to/file.php في include_ أو require_once أسرع من الاعتماد على include_path.
  4. ترتيب المسارات في include_path مهم أيضًا.

امل ان يساعد.

نصائح أخرى

وأنا لا يمكن أن guarantuee أي شيء وأنا لم ينظر بعمق بما فيه الكفاية في ذلك، ولكن نعم، لقد رأيت الخلافات السرعة بين البلدين. كانوا أبدا كبيرا بما يكفي بالنسبة لي للانتقال إلى include_once بدلا من require_once بالرغم من ذلك.

وأنا افترض دائما أن الاختلاف بسبب require_once له لبذل المزيد من تحت الماء العمل. واحد على الاقل الخطأ المحتمل للتحضير لوالتعامل معها، والكثير يجب القيام به عند عدم وجود الملف المطلوب.

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