تكاد كلُّ محاولةٍ لـ«جعله أسرع» تبدأ بتخمينٍ وإضافة. ابدأ برقمٍ واحد بدل ذلك، فهو يشقّ المشكلة نصفين.

زمن أوّل بايت

curl -o /dev/null -s -w 'dns %{time_namelookup}s  connect %{time_connect}s  ttfb %{time_starttransfer}s  total %{time_total}s\n' https://yourdomain.com/
  • دون 200 جزءٍ من الألف — الخادم بخير. وكلُّ ما تحسّه في المتصفّح: الصور والخطوط والسكربتات.
  • فوق 800 جزءٍ من الألف — الصفحة تُبنى ببطء. ولا شيء في المتصفّح يصلح ذلك.
  • زمنُ الاتّصال أكبر بكثير من زمن الـ DNS — مسافةٌ أو مصافحةُ تشفيرٍ بطيئة، لا التطبيق.

إن كان الخادم بطيئًا

فالصفحةُ تؤدّي عملًا أكثر من اللازم في كلّ طلب. وهذا ترتيبها بحسب تكرّرها جوابًا:

  1. استعلامٌ بلا فهرس — سجلُّ البطء يسمّيه. وفهرسٌ واحد يقتطع ثوانيَ في العادة.
  2. الاستعلامُ نفسه في حلقة — عشرون منتجًا وعشرون استعلامًا لتصنيفاتها. وضمٌّ واحد يحلّ محلّها.
  3. نداءٌ خارجيّ بلا مهلة — فواجهةٌ برمجيّة ميتة تحبس صفحتك ما ظلّ مقبسها مفتوحًا.
  4. لا مخزنَ للشفرة المترجَمة — فبلا opcache تعيد PHP ترجمةَ كلّ ملفٍّ في كلّ طلب.

وإن كان المتصفّح بطيئًا

  • الصور. وهي أكثرُ البايتات عادةً. قدّم المقاس الذي تستعمله الصفحة لا المقاس الذي صنعته الكاميرا.
  • الخطوط. فكلُّ عائلةٍ ووزنٍ ملفّ، والخطُّ الذي يحجب الرسم يحبس الصفحة كلَّها.
  • سكربتات الطرف الثالث. فأبطأُ جزءٍ في أكثر الصفحات شفرةٌ من خادم شخصٍ آخر.
وإضافةُ تخزينٍ على صفحةٍ بطيئة تخفي المشكلة عنك لا عن أوّل زائرٍ في كلّ دورةِ تخزين. أصلح الصفحة ثمّ خزّنها.
قِس الصفحة نفسها ثلاث مرّات، في الساعة نفسها من اليوم، قبل كلّ تغييرٍ وبعده. تغييرٌ واحد وقياسٌ واحد — وإلّا لم تعرف أيُّها نجح.