موقع Lowe's على الويب من بين أسرع مواقع التجارة الإلكترونية أداءً

من خلال إنشاء نظام مبرمَج لاختبار الأداء ومراقبته، يختبر فريق سرعة الموقع الإلكتروني في شركة Lowe Site Speed الطلبات عند مقارنتها بميزانيات الأداء، ويمنع أي تراجع في الأداء في مرحلة الإنتاج.

Abhimanyu Raibahadur
Abhimanyu Raibahadur
Ashish Choudhury
Ashish Choudhury
Dhilip venkatesh Uvarajan
Dhilip venkatesh Uvarajan
Dinakar Chandolu
Dinakar Chandolu
Safwan Samla
Safwan Samla

شركة Lowe's هي شركة بيع بالتجزئة تقدر بنحو 90 مليار دولار أمريكي لتحسين المنازل وتدير حوالي 2,200 متجر ويعمل بها أكثر من 300,000 موظف. من خلال إنشاء نظام آلي للاختبار والمراقبة يمنع نشر تراجع الأداء في مرحلة الإنتاج، تمكّن فريق سرعة الموقع في شركة Lowe من تحسين أداء موقعه الإلكتروني، واحتل ترتيبه بين أفضل المواقع الإلكترونية للبيع بالتجزئة.

المشكلة

يتمثّل هدف فريق "سرعة الموقع" في جعل موقع الويب "منخفض" أحد أسرع مواقع التجارة الإلكترونية من حيث أداء تحميل الصفحات. قبل أن ينشئوا نظام الاختبار والمراقبة الآليين، لم يكن بمقدور مطوري مواقع الويب في Lowe قياس الأداء تلقائيًا في بيئات ما قبل الإنتاج. تم إجراء اختبارات في بيئة الإنتاج فقط على الأدوات الحالية. ونتيجة لذلك، دخلت البنى الرديئة إلى الإنتاج، ما أدى إلى ترك انطباع سيئ لدى المستخدم. وستظل هذه الإصدارات الرديئة في مرحلة الإنتاج إلى أن يكتشفها فريق سرعة الموقع ويعيدها المؤلف.

الحلّ

استخدم فريق سرعة الموقع أدوات مفتوحة المصدر لإنشاء نظام آلي لاختبار الأداء ومراقبة بيئات ما قبل الإنتاج. يقيس النظام أداء كل طلب سحب (PR) ويوجّه PR من الشحن إلى الإنتاج إذا كان لا يفي بميزانية الأداء ومعايير المقياس الخاصة بفريق سرعة الموقع. يقيس النظام أيضًا الامتثال لمتطلبات تحسين محركات البحث وقانون الأمريكيين ذوي الإعاقة (ADA).

التأثير

ومن خلال عيّنة تضم فريقًا واحدًا يمتدّ على 16 أسبوعًا من خلال نشر 102 إصدار، منع نظام الاختبار المبرمَج ومراقبة الأداء 32 إصدارًا من خلال أداء متدني من مرحلة الإنتاج.

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

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

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

التنفيذ

Lighthouse CI هي الركيزة الأساسية لتطبيق "إدارة سرعة الموقع الإلكتروني" (SSG). يستخدم تطبيق SSG أداة Lighthouse للتحقق من أداء الصفحة لكل طلب سحب والتدقيق فيه.

مخطط عمليات لتطبيق SSG، يتم توضيح الخطوات الموضحة في الرسم لاحقًا في المقالة.

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

مسار عملية الحوكمة التلقائية للسرعة (ASG)

Spinnaker

نقطة البداية يدمج مطوّر الرمز البرمجي الخاص به في بيئة ما قبل الإنتاج.

  1. نشر بيئة ما قبل الإنتاج باستخدام مواد عرض شبكة توصيل المحتوى (CDN)
  2. تحقَّق من عملية النشر الناجحة.
  3. شغِّل حاوية Docker لبدء إنشاء تطبيق ASG أو إرسال إشعار (في حال تعذُّر النشر).

جنكنز ومنارة

  1. أنشِئ تطبيق ASG باستخدام Jenkins.
  2. شغِّل حاوية Docker مخصّصة تم تثبيت Chrome وLighthouse عليها. اسحب lighthouserc.json من تطبيق SSG وشغِّل lhci autorun --collect-url=https://example.com.

تطبيق Jenkins وSSG

  1. استخرِج assertion-results.json من lhci وقارنه بالميزانيات المحدَّدة مسبقًا في budgets.json. احفظ الناتج كملف نصي وحمِّله على Nexus لإجراء المقارنات في المستقبل.
  2. مقارنة assertion-results.json الحالي بآخر إصدار ناجح (تم تنزيله من Nexus) وحفظه كملف نصي.
  3. أنشئ رسالة إلكترونية بتنسيق HTML تتضمّن معلومات النجاح أو الإخفاق.
  4. أرسِل الرسالة الإلكترونية إلى قوائم التوزيع ذات الصلة باستخدام Jenkins.