سؤال

ما الذي يمكنني فعله لزيادة أداء/سرعة نصوص PHP الخاصة بي دون تثبيت البرنامج على خوادمي؟

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

المحلول

حساب تعريفي.حساب تعريفي.حساب تعريفي.لست متأكدًا مما إذا كان هناك أي شيء متاح لـ PHP، ولكن يجب أن يكون من السهل كتابة أداة صغيرة لإدراج معلومات ملفات التعريف في التعليمات البرمجية الخاصة بك.ستحتاج إلى تحديد أوقات الوظائف وأوقات استعلام SQL.

إذن حيث لديك وظيفة:

function foo($stuff) {
    ...
    return ...;
}

أود تغييره إلى:

function foo($stuff) {
    trace_push_fn('foo');
    ...
    trace_pop_fn('foo');
    return ...;
}

(هذه إحدى الحالات التي تصبح فيها عمليات الإرجاع المتعددة في إحدى الوظائف عائقًا.)

و SQL:

function bar($stuff) {
    trace_push_fn('bar');

    $query = ...;
    trace_push_sql($query);
    mysql_query($query);
    trace_pop_sql($query);

    trace_pop_fn('bar');
    return ...;
}

في النهاية، يمكنك إنشاء تتبع كامل لتنفيذ البرنامج واستخدام جميع أنواع التقنيات لتحديد الاختناقات لديك.

نصائح أخرى

إحدى التقنيات المعقولة التي يمكن سحبها بسهولة من الرف هي التخزين المؤقت.يميل قدر كبير من الوقت إلى تخصيص موارد للعملاء المشتركة بين الطلبات (وحتى عبر العملاء)؛يمكن أن يؤدي التخلص من هذا العمل في وقت التشغيل إلى زيادات كبيرة في السرعة.يمكنك تفريغ المورد الذي تم إنشاؤه (أو جزء المورد) في ملف خارج شجرة الويب، ثم قراءته مرة أخرى عند الحاجة.من الواضح أنه ستكون هناك حاجة إلى بعض ملفات التعريف للتأكد من أن هذا أسرع بالفعل من التجديد - يمكن أن يكون إجبار خادم الويب على العودة إلى القرص بانتظام ضارًا، لذلك يحتاج المورد حقًا إلى إعادة استخدام مكثفة.

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

لا يقتصر أي منهما على PHP، على الرغم من أن بعض أساليب/وظائف PHP "السحرية" يمكن أن تحمي الشخص بشكل مفرط من التفكير في هذه المخاوف.على سبيل المثال، قمت مؤخرًا بتحديث برنامج نصي يستخدم array_search لاستخدام بحث ثنائي عبر مصفوفة مفروزة، وحصلت على التسريع الأسي المتوقع.

فكر حقًا في استخدام ملف تعريف XDebug:فهو يساعد في التحقق من مدى تنفيذ وظيفة معينة مقابل ما كنت تتوقعه.

أحاول تقليل التعليمات مع تحسين إمكانية قراءة التعليمات البرمجية عن طريق استبدال المنطق بعمليات البحث عن المصفوفات عندما يكون ذلك مناسبًا.هذا ما كتبه جيف أتوود في [أفضل كود ليس كود على الإطلاق] [1].

  • أيضا ، تجنب الحلقات داخل حلقة أخرى ، وتداخل If/بيانات أخرى.
  • وظائف قصيرة.في بعض الأحيان ، لا يلزم تنفيذ الكثير من التعليمات البرمجية عندما تكون قيمة النتيجة معروفة بالفعل.
  • اختبارات غير ضرورية:

    إذا (count($array) === 0) return;

    يمكن كتابتها أيضًا على النحو التالي:

    لو (!صفيف $) العودة؛

    تم إلغاء استدعاء وظيفة آخر!

    [1]: http://www.codinghorror.com/blog/archives/000878.html"أفضل كود ليس كودًا على الإطلاق"

يمكنك تحسين الكود من خلال شيئين أساسيين:

تحسين المكتبة والخادم المرتبطين بـ PHP

اذهب عبر https://www.digitalocean.com/community/articles/how-to-optimize-Apache-web-server-performance أو

يمكنك استخدام أداة إنشاء ملفات تعريف مثل xhprof لعرض الجزء الذي يمكن تحسينه من التعليمات البرمجية الخاصة بك، وإليك الرابط الذي يجب اتباعه: http://michaelsanford.com/compiling-xhprof-for-php-5-4/

تحسين التعليمات البرمجية الخاصة بك باستخدام ملف تعريف التعليمات البرمجية ومحلل التعليمات البرمجية

تحتاج إلى تثبيت Netbeans لتتمكن من استخدام هذا البرنامج الإضافي.فيما يلي الخطوات التي يجب عليك اتباعها:

1) افتح NetBeans ثم حدد الخيار من شريط القائمة "الأدوات" > "البرنامج المساعد".ثم ابحث عن اسم المكون الإضافي "phpcsmd" في علامة تبويب المكون الإضافي المتاح وقم بتثبيته من هناك.

2) الآن افتح الوحدة الطرفية وكن هناك كمستخدم متميز عن طريق كتابة الأمر "sudo su".

3) قم بتثبيت مكتبة PEAR (إذا لم تكن مثبتة) في نظامك عن طريق تشغيل الأوامر التالية في جهازك

a) wget http://pear.php.net/go-pear.phar
b) php go-pear.phar

لأننا نحتاج إلى هذا لتثبيت المزيد من الإضافات.

4) ثم قم بتشغيل الأمر

"pear config-set auto_discover 1"

سيتم استخدام هذا لتعيين الاكتشاف التلقائي للمسار "صحيح" للمكونات الإضافية المطلوبة.حتى يتم تثبيتهم على الموقع المطلوب تلقائيًا.

5) ثم قم بتشغيل الأمر أدناه لتثبيت PHP Code Sniffer.

"pear install --alldeps pear/PHP_CodeSniffer"

6) الآن لتثبيت PHP Mess Detector عن طريق تشغيل الأمر التالي

"pear install --alldeps phpmd/PHP_PMD"

إذا حصلت على خطأ مثل "اسم الحزمة/ملف الحزمة غير صالح "phpmd/PHP_PMD"" أثناء تثبيت هذه الوحدة.تحتاج إلى استخدام الأمر "pearchannel-discover pear.phpmd.org" للتخلص من هذا الخطأ.بعد هذا الأمر يمكنك تشغيل الأمر أعلاه مرة أخرى لتثبيت كاشف الفوضى.

7) الآن لتثبيت PHP Depend عن طريق تشغيل الأمر التالي

"pear install --alldeps pdepend/PHP_Depend"

8) الآن قم بتثبيت PHP Copy Paste Detector عن طريق تشغيل الأمر التالي

"pear install --alldeps phpunit/phpcpd"

9) ثم قم بتشغيل الأمر

"pear config-set auto_discover 0"

سيتم استخدام هذا لتعيين مسار الاكتشاف التلقائي "خطأ".

10) ثم افتح net Beans واتبع المسار Tools>Options>PHP>PHPCSMD

لا يوجد حل سحري، ومحاولة تقديم حلول عامة قد تكون مجرد مضيعة للوقت.

أين هي الاختناقات الخاصة بك؟على سبيل المثال، هل معالج البرامج النصية/قاعدة البيانات/الذاكرة مكثفة؟

هل قمت بإجراء أي ملف تعريف؟

يعد تضمين الملفات بطيئًا، كما أن طلبها يكون أبطأ.إذا كنت تستخدم __autoload لتضمين كل فئة، فسيؤدي ذلك إلى إضافة ما يصل.على سبيل المثال.

أنا دائمًا حذر بعض الشيء من محاولة أن أكون ذكيًا جدًا فيما يتعلق بتحسين الكود، إذا كان ذلك يضحي بوضوح الكود.إذا كنت بحاجة إلى جعل التعليمات البرمجية غامضة لجعلها سريعة، أليس من الأرخص ترقية الأجهزة بدلاً من إضاعة وقتك في محاولة تعديل التعليمات البرمجية؟دورات المعالج أرخص من دورات المبرمج، بعد كل شيء.

الذين أستطيع التفكير بهم...

  • ثوابت الحلقة هي دائما جيدة لمشاهدة.

  • اكتب رمزًا متوافقًا مع E_Strict و E_Notice ، خاصة إذا كنت تخطئ في تسجيل الأخطاء.

  • تجنب العامل @.

  • المسارات المطلقة اللازمة ويشمل.

  • استخدم strpos وstr_replace وما إلى ذلك.بدلاً من التعبيرات العادية كلما أمكن ذلك.

ثم هناك مجموعة من الطرق الأخرى التي قد تنجح، ولكن ربما لن تعطيك الكثير من الفوائد.

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

وهذا بالطبع لا يتطلب أي أجهزة جديدة أو برامج خاصة، بل مجرد نظرة ناقدة على التعليمات البرمجية الموجودة.

ومع ذلك، فإن هذا لن ينجح إلا لفترة طويلة ...إذا كنت تحصل بالفعل على ما يكفي من حركة المرور للوصول إلى حدود أجهزتك، و/أو كان هناك بعض التعليمات البرمجية التي تكون بطيئة بطبيعتها ومطلوبة حقًا، فسيتعين عليك النظر في الاحتمالات الأخرى.

أنا مسؤول عن نظام تقارير كبير ونقوم بتتبع أبطأ التقارير من هذا القبيل.أقوم بإطلاق مفتاح فريد في قاعدة البيانات عندما يبدأ التقرير، وبعد ذلك عندما ينتهي يمكنني تحديد المدة التي يستغرقها التقرير.أنا أستخدم قاعدة البيانات لأنه بهذه الطريقة يمكنني اكتشاف وقت انتهاء مهلة الصفحات (والذي يحدث أكثر بكثير مما أريد)

اتبع بعض النصائح الأخرى أولاً مثل التوصيف واتخاذ قرارات جيدة لتخصيص الموارد، على سبيل المثال.التخزين المؤقت.

ضع في الاعتبار أيضًا أداء الموارد الخارجية مثل قاعدة البيانات الخاصة بك.في MySQL يمكنك التحقق من سجل الاستعلام البطيء على سبيل المثال.بالإضافة إلى ذلك تأكد من أنك لم تصمم قاعدة البيانات الخاصة بك ونسيانها.تحسين استفساراتك (مرة أخرى لـ MySQL) ضد البيانات الحقيقية يمكن أن تدفع مبالغ كبيرة.

قدم راسموس ليردورف بعض النصائح الجيدة في عرضه التقديمي الأخير "البسيط هو الصعب"في FrOSCon '08.إذا كنت تستخدم ذاكرة تخزين مؤقت للرمز الثانوي (ويجب عليك حقًا استخدام واحدة)، فإن تضمين أخطاء المسار يضر كثيرًا، لذا قم بتحسين متطلباتك/require_once.

يمكنك استخدام أداة إنشاء ملفات تعريف مثل xhprof لعرض الجزء الذي يمكن تحسينه من التعليمات البرمجية الخاصة بك!

1) استخدم أحدث إصدار من PHP

يعمل الفريق الأساسي جاهدًا على تحسين أداء PHP في كل إصدار.

2) استخدم ذاكرة التخزين المؤقت للرمز الثانوي

منذ PHP 5.5، تمت إضافة ذاكرة تخزين مؤقت للرمز الثانوي إلى PHP باسم OPcache.استخدام OPcache يمكن أن يحدث فرقًا كبيرًا خاصة منذ PHP 7.يتلقى تحسينات في كل إصدار PHP وربما يحصل على تنفيذ JIT في المستقبل.

3) التنميط

بينما يمنحك تطوير ملفات التعريف رؤية عظيمة لما يحدث بالضبط.يساعد هذا كثيرًا في العثور على الاختناقات في التعليمات البرمجية الخاصة بك.

واحدة من الأدوات الأكثر استخداما هي XHProf ولكنه لم يعد مدعومًا رسميًا بعد الآن ولديه مشكلات مع PHP >= 7.البديل عندما تريد إنشاء ملف تعريف PHP >= 7 هو Tideways وهو شوكة XHProf.

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