Dengan membuat sistem pengujian dan pemantauan performa otomatis, Tim Kecepatan Situs Lowe's menguji permintaan pull terhadap anggaran performa, dan mencegah regresi performa masuk ke produksi.
Lowe's adalah retailer perlengkapan rumah senilai hampir $90 miliar yang mengoperasikan sekitar 2.200 toko dan mempekerjakan lebih dari 300.000 karyawan. Dengan membuat sistem pengujian dan pemantauan otomatis yang mencegah regresi performa di-deploy ke produksi, Tim Kecepatan Situs Lowe's dapat meningkatkan performa situsnya, yang berada di antara situs retail teratas.
Masalah
Sasaran Tim Kecepatan Situs adalah menjadikan situs Lowe's sebagai salah satu situs e-commerce tercepat dalam hal performa pemuatan halaman. Sebelum membuat sistem pengujian dan pemantauan otomatis, developer situs Lowe tidak dapat mengukur performa secara otomatis di lingkungan praproduksi. Alat yang ada hanya melakukan pengujian di lingkungan produksi. Akibatnya, build yang inferior masuk ke produksi, sehingga memberikan pengalaman pengguna yang buruk. Build yang lebih buruk ini akan tetap diproduksi hingga terdeteksi oleh Tim Kecepatan Situs dan dikembalikan oleh penulis.
Solusi
Tim Kecepatan Situs menggunakan alat open source untuk membuat sistem pemantauan dan pengujian performa otomatis untuk lingkungan praproduksi. Sistem ini mengukur performa setiap permintaan pull (PR) dan mengontrol PR agar tidak dikirim ke produksi jika tidak memenuhi anggaran performa dan kriteria metrik Tim Kecepatan Situs. Sistem ini juga mengukur kepatuhan SEO dan ADA.
Dampak
Dari sampel 1 tim selama 16 minggu yang men-deploy 102 build, sistem pengujian dan pemantauan performa otomatis mencegah 32 build dengan performa di bawah standar untuk diproduksi.
Jika sebelumnya Tim Kecepatan Situs memerlukan waktu tiga hingga lima hari untuk memberi tahu developer bahwa mereka telah mengirimkan regresi performa ke produksi, sistem kini otomatis memberi tahu developer tentang masalah performa lima menit setelah mengirimkan permintaan pull di lingkungan praproduksi.
Kualitas kode meningkat seiring waktu, seperti yang diukur dengan fakta bahwa lebih sedikit permintaan pull yang ditandai untuk regresi performa. Tim Kecepatan Situs juga secara bertahap memperketat anggaran tata kelola untuk terus meningkatkan kualitas situs.
Secara umum, memiliki kepemilikan yang jelas atas kode yang bermasalah telah mengubah budaya engineering. Daripada melakukan koreksi reaktif karena tidak pernah jelas siapa yang sebenarnya menyebabkan masalah, tim dapat melakukan pengoptimalan proaktif dengan kepemilikan kode bermasalah yang dapat diatribusikan secara objektif.
Penerapan
Inti dari aplikasi Site Speed Governance (SSG) adalah Lighthouse CI. Aplikasi SSG menggunakan Lighthouse untuk memvalidasi dan mengaudit performa halaman dari setiap permintaan pull.

Aplikasi SSG menyebabkan build gagal jika anggaran performa dan target metrik yang ditentukan Tim Kecepatan Situs tidak tercapai. Hal ini tidak hanya menerapkan performa pemuatan, tetapi juga SEO, PWA, dan aksesibilitas. Alat ini dapat segera melaporkan status kepada penulis, peninjau, dan tim SRE. Fitur ini juga dapat dikonfigurasi untuk mengabaikan pemeriksaan jika diperlukan pengecualian.
Alur proses Automated Speed Governance (ASG)
Spinnaker
Titik awal. Developer menggabungkan kodenya ke dalam lingkungan praproduksi.
- Deploy lingkungan praproduksi dengan aset CDN.
- Periksa deployment yang berhasil.
- Jalankan penampung Docker untuk mulai mem-build aplikasi ASG atau mengirim notifikasi (jika terjadi kegagalan deployment).
Jenkins dan Lighthouse
- Build aplikasi ASG dengan Jenkins.
- Menjalankan container Docker kustom yang telah menginstal Chrome dan Lighthouse.
Ambil
lighthouserc.json
dari aplikasi SSG dan jalankanlhci autorun --collect-url=https://example.com
.
Aplikasi Jenkins dan SSG
- Ekstrak
assertion-results.json
dari lhci dan bandingkan dengan anggaran yang telah ditentukan sebelumnya dibudgets.json
. Simpan output sebagai file teks dan upload ke Nexus untuk perbandingan di masa mendatang. - Bandingkan
assertion-results.json
saat ini dengan build terakhir yang berhasil (didownload dari Nexus) dan simpan sebagai file teks. - Buat email HTML dengan informasi keberhasilan atau kegagalan.
- Kirim email ke daftar distribusi yang relevan dengan Jenkins.