Pemantauan performa dengan Lighthouse CI

Cara menambahkan Lighthouse ke sistem continuous integration, seperti GitHub Actions.

Katie Hempenius
Katie Hempenius

Lighthouse CI adalah rangkaian alat untuk menggunakan Lighthouse selama integrasi berkelanjutan. Lighthouse CI dapat disertakan ke dalam alur kerja developer dengan berbagai cara. Panduan ini membahas topik berikut:

  • Menggunakan CLI CI Lighthouse.
  • Mengonfigurasi penyedia CI Anda untuk menjalankan Lighthouse CI.
  • Menyiapkan GitHub Action dan pemeriksaan status untuk Lighthouse CI. Tindakan ini akan otomatis menampilkan hasil Lighthouse di permintaan pull GitHub.
  • Membuat dasbor performa dan penyimpanan data untuk laporan Lighthouse.

Ringkasan

Lighthouse CI adalah serangkaian alat gratis yang memfasilitasi penggunaan Lighthouse untuk pemantauan performa. Laporan Lighthouse tunggal memberikan ringkasan performa halaman web pada saat halaman tersebut dijalankan; Lighthouse CI menunjukkan perubahan temuan ini dari waktu ke waktu. Hal ini dapat digunakan untuk mengidentifikasi dampak perubahan kode tertentu atau memastikan nilai minimum performa terpenuhi selama proses continuous integration. Meskipun pemantauan performa adalah kasus penggunaan paling umum untuk Lighthouse CI, pemantauan performa dapat digunakan untuk memantau aspek lain dari laporan Lighthouse, misalnya SEO atau aksesibilitas.

Fungsi inti Lighthouse CI disediakan oleh antarmuka command line Lighthouse CI. (Catatan: Ini adalah alat terpisah dari Lighthouse CLI.) Lighthouse CI CLI menyediakan kumpulan perintah untuk menggunakan Lighthouse CI. Misalnya, perintah autorun menjalankan beberapa eksekusi Lighthouse, mengidentifikasi laporan Lighthouse median, dan mengupload laporan untuk disimpan. Perilaku ini dapat sangat disesuaikan dengan meneruskan flag tambahan atau menyesuaikan file konfigurasi Lighthouse CI, lighthouserc.js.

Meskipun fungsi inti Lighthouse CI terutama dienkapsulasi dalam Lighthouse CI CLI, Lighthouse CI biasanya digunakan melalui salah satu pendekatan berikut:

  • Menjalankan CI Lighthouse sebagai bagian dari continuous integration
  • Menggunakan GitHub Action Lighthouse CI yang berjalan dan memberikan komentar pada setiap permintaan pull
  • Melacak performa dari waktu ke waktu melalui dasbor yang disediakan oleh Server Lighthouse.

Semua pendekatan ini dibuat berdasarkan Lighthouse CI CLI.

Alternatif untuk Lighthouse CI mencakup layanan pemantauan performa pihak ketiga atau menulis skrip Anda sendiri untuk mengumpulkan data performa selama proses CI. Anda harus mempertimbangkan untuk menggunakan layanan pihak ketiga jika lebih suka membiarkan orang lain menangani pengelolaan server pemantauan performa dan perangkat pengujian, atau, jika Anda menginginkan kemampuan notifikasi (seperti integrasi email atau Slack) tanpa harus membuat fitur ini sendiri.

Menggunakan Lighthouse CI secara lokal

Bagian ini menjelaskan cara menjalankan dan menginstal Lighthouse CI CLI secara lokal serta cara mengonfigurasi lighthouserc.js. Menjalankan Lighthouse CI CLI secara lokal adalah cara paling mudah untuk memastikan lighthouserc.js Anda dikonfigurasi dengan benar.

  1. Menginstal Lighthouse CI CLI.

    npm install -g @lhci/cli
    

    Lighthouse CI dikonfigurasi dengan menempatkan file lighthouserc.js di root repo project Anda. File ini bersifat wajib dan akan berisi informasi konfigurasi terkait Lighthouse CI. Meskipun Lighthouse CI dapat dikonfigurasi untuk digunakan tanpa repo git, petunjuk dalam artikel ini mengasumsikan bahwa repo project Anda dikonfigurasi untuk menggunakan git.

  2. Di root repositori Anda, buat file konfigurasi lighthouserc.js.

    touch lighthouserc.js
    
  3. Tambahkan kode berikut ke lighthouserc.js. Kode ini adalah konfigurasi Lighthouse CI kosong. Anda akan menambahkan ke konfigurasi ini di langkah berikutnya.

    module.exports = {
      ci: {
        collect: {
          /* Add configuration here */
        },
        upload: {
          /* Add configuration here */
        },
      },
    };
    
  4. Setiap kali Lighthouse CI berjalan, Lighthouse CI akan memulai server untuk menayangkan situs Anda. Server inilah yang memungkinkan Lighthouse memuat situs Anda, bahkan saat tidak ada server lain yang berjalan. Setelah selesai berjalan, Lighthouse CI akan menonaktifkan server secara otomatis. Untuk memastikan penayangan berfungsi dengan benar, Anda harus mengonfigurasi properti staticDistDir atau startServerCommand.

    Jika situs Anda bersifat statis, tambahkan properti staticDistDir ke objek ci.collect untuk menunjukkan lokasi file statis Anda. Lighthouse CI akan menggunakan servernya sendiri untuk menyalurkan file ini saat menguji situs Anda. Jika situs Anda tidak statis, tambahkan properti startServerCommand ke objek ci.collect untuk menunjukkan perintah yang memulai server Anda. Lighthouse CI akan memulai proses server baru selama pengujian dan menonaktifkannya setelah itu.

    // Static site example
    collect: {
      staticDistDir: './public',
    }
    
    // Dynamic site example
    collect: {
      startServerCommand: 'npm run start',
    }
    
  5. Tambahkan properti url ke objek ci.collect untuk menunjukkan URL tempat Lighthouse CI harus menjalankan Lighthouse. Nilai properti url harus disediakan sebagai array URL; array ini dapat berisi satu atau beberapa URL. Secara default, Lighthouse CI akan menjalankan Lighthouse tiga kali untuk setiap URL.

    collect: {
      // ...
      url: ['http://localhost:8080']
    }
    
  6. Tambahkan properti target ke objek ci.upload dan tetapkan nilainya ke 'temporary-public-storage'. Laporan Lighthouse yang dikumpulkan oleh Lighthouse CI akan diupload ke penyimpanan publik sementara. Laporan akan tetap ada selama tujuh hari, lalu dihapus secara otomatis. Panduan penyiapan ini menggunakan opsi upload "penyimpanan publik sementara" karena cepat dipersiapkan. Untuk informasi tentang cara lain menyimpan laporan Lighthouse, lihat dokumentasi.

    upload: {
      target: 'temporary-public-storage',
    }
    

    Lokasi penyimpanan laporan akan serupa dengan yang berikut:

    https://storage.googleapis.com/lighthouse-infrastructure.appspot.com/reports/1580152437799-46441.report.html
    

    (URL ini tidak akan berfungsi karena laporan telah dihapus.)

  7. Jalankan Lighthouse CI CLI dari terminal menggunakan perintah autorun. Tindakan ini akan menjalankan Lighthouse tiga kali dan mengupload laporan Lighthouse median.

    lhci autorun
    

    Jika Anda telah mengonfigurasi Lighthouse CI dengan benar, menjalankan perintah ini akan menghasilkan output yang mirip dengan ini:

      .lighthouseci/ directory writable
    ✅  Configuration file found
    ✅  Chrome installation found
    ⚠️   GitHub token not set
    Healthcheck passed!
    
    Started a web server on port 65324...
    Running Lighthouse 3 time(s) on http://localhost:65324/index.html
    Run #1...done.
    Run #2...done.
    Run #3...done.
    Done running Lighthouse!
    
    Uploading median LHR of http://localhost:65324/index.html...success!
    Open the report at https://storage.googleapis.com/lighthouse-infrastructure.appspot.com/reports/1591720514021-82403.report.html
    No GitHub token set, skipping GitHub status check.
    
    Done running autorun.
    

    Anda dapat mengabaikan pesan GitHub token not set di output konsol. Token GitHub hanya diperlukan jika Anda ingin menggunakan Lighthouse CI dengan Action GitHub. Cara menyiapkan GitHub Action akan dijelaskan nanti dalam artikel ini.

    Mengklik link dalam output yang dimulai dengan https://storage.googleapis.com... akan mengarahkan Anda ke laporan Lighthouse yang sesuai dengan median Lighthouse yang dijalankan.

    Nilai default yang digunakan oleh autorun dapat diganti melalui command line atau lighthouserc.js. Misalnya, konfigurasi lighthouserc.js di bawah ini menunjukkan bahwa lima operasi Lighthouse harus dikumpulkan setiap kali autorun dieksekusi.

  8. Perbarui lighthouserc.js untuk menggunakan properti numberOfRuns:

    module.exports = {
        // ...
        collect: {
          numberOfRuns: 5
        },
      // ...
      },
    };
    
  9. Jalankan kembali perintah autorun:

    lhci autorun
    

    Output terminal akan menunjukkan bahwa Lighthouse telah dijalankan lima kali, bukan tiga kali seperti default:

      .lighthouseci/ directory writable
    ✅  Configuration file found
    ✅  Chrome installation found
    ⚠️   GitHub token not set
    Healthcheck passed!
    
    Automatically determined ./dist as `staticDistDir`.
    Set it explicitly in lighthouserc.json if incorrect.
    
    Started a web server on port 64444...
    Running Lighthouse 5 time(s) on http://localhost:64444/index.html
    Run #1...done.
    Run #2...done.
    Run #3...done.
    Run #4...done.
    Run #5...done.
    Done running Lighthouse!
    
    Uploading median LHR of http://localhost:64444/index.html...success!
    Open the report at https://storage.googleapis.com/lighthouse-infrastructure.appspot.com/reports/1591716944028-6048.report.html
    No GitHub token set, skipping GitHub status check.
    
    Done running autorun.
    

    Untuk mempelajari opsi konfigurasi lainnya, lihat dokumentasi konfigurasi Lighthouse CI.

Menyiapkan proses CI untuk menjalankan CI Lighthouse

CI Lighthouse dapat digunakan dengan alat CI favorit Anda. Bagian Mengonfigurasi Penyedia CI dalam dokumentasi Lighthouse CI berisi contoh kode yang menunjukkan cara menggabungkan Lighthouse CI ke dalam file konfigurasi alat CI umum. Secara khusus, contoh kode ini menunjukkan cara menjalankan Lighthouse CI untuk mengumpulkan pengukuran performa selama proses CI.

Menggunakan Lighthouse CI untuk mengumpulkan pengukuran performa adalah tempat yang tepat untuk memulai pemantauan performa. Namun, pengguna lanjutan mungkin ingin melangkah lebih jauh dan menggunakan Lighthouse CI untuk gagal dalam build jika tidak memenuhi kriteria yang telah ditentukan, seperti lulus audit Lighthouse tertentu atau memenuhi semua anggaran performa. Perilaku ini dikonfigurasi melalui properti assert file lighthouserc.js.

Lighthouse CI mendukung tiga tingkat pernyataan:

  • off: mengabaikan pernyataan
  • warn: mencetak kegagalan ke stderr
  • error: mencetak kegagalan ke stderr dan keluar dari Lighthouse CI dengan kode keluar yang bukan nol

Di bawah ini adalah contoh konfigurasi lighthouserc.js yang menyertakan pernyataan. Performance Planner menetapkan pernyataan untuk skor performa dan kategori aksesibilitas Lighthouse. Untuk mencobanya, tambahkan pernyataan yang ditampilkan di bawah ini ke file lighthouserc.js, lalu jalankan kembali Lighthouse CI.

module.exports = {
  ci: {
    collect: {
      // ...
    },
    assert: {
      assertions: {
        'categories:performance': ['warn', {minScore: 1}],
        'categories:accessibility': ['error', {minScore: 1}]
      }
    },
    upload: {
      // ...
    },
  },
};

Output konsol yang dihasilkan akan terlihat seperti ini:

Screenshot pesan peringatan yang dihasilkan oleh Lighthouse CI

Untuk informasi selengkapnya tentang pernyataan Lighthouse CI, lihat dokumentasi.

Menyiapkan GitHub Action untuk menjalankan Lighthouse CI

GitHub Action dapat digunakan untuk menjalankan Lighthouse CI. Tindakan ini akan menghasilkan laporan Lighthouse baru setiap kali perubahan kode dikirim ke cabang repositori GitHub mana pun. Gunakan metode ini bersama dengan pemeriksaan status untuk menampilkan hasil ini pada setiap permintaan pull.

Screenshot pemeriksaan status GitHub
  1. Di root repositori Anda, buat direktori bernama .github/workflows. Alur kerja untuk project Anda akan berada di direktori ini. Alur kerja adalah proses yang berjalan pada waktu yang telah ditentukan (misalnya, saat kode dikirim) dan terdiri dari satu atau beberapa tindakan.

    mkdir .github
    mkdir .github/workflows
    
  2. Di .github/workflows, buat file bernama lighthouse-ci.yaml. File ini akan menyimpan konfigurasi untuk alur kerja baru.

    touch lighthouse-ci.yaml
    
  3. Tambahkan teks berikut ke lighthouse-ci.yaml.

    name: Build project and run Lighthouse CI
    on: [push]
    jobs:
      lhci:
        name: Lighthouse CI
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v1
          - name: Use Node.js 10.x
            uses: actions/setup-node@v1
            with:
              node-version: 10.x
          - name: npm install
            run: |
              npm install
          - name: run Lighthouse CI
            run: |
              npm install -g @lhci/cli@0.3.x
              lhci autorun --upload.target=temporary-public-storage || echo "LHCI failed!"
    

    Konfigurasi ini menyiapkan alur kerja yang terdiri dari satu tugas yang akan berjalan setiap kali kode baru dikirim ke repositori. Tugas ini memiliki empat langkah:

    • Lihat repositori tempat Lighthouse CI akan dijalankan
    • Menginstal dan mengonfigurasi Node
    • Menginstal paket npm yang diperlukan
    • Jalankan Lighthouse CI dan upload hasilnya ke penyimpanan publik sementara.
  4. Lakukan commit pada perubahan ini dan kirimkan ke GitHub. Jika Anda telah mengikuti langkah-langkah di atas dengan benar, mendorong kode ke GitHub akan memicu pengoperasian alur kerja yang baru saja Anda tambahkan.

  5. Untuk mengonfirmasi bahwa Lighthouse CI telah dipicu dan untuk melihat laporan yang dihasilkannya, buka tab Actions project Anda. Anda akan melihat alur kerja Build project and Run Lighthouse CI yang tercantum di bawah commit terbaru Anda.

    Screenshot tab 'Setelan' GitHub

    Anda dapat membuka laporan Lighthouse yang sesuai dengan commit tertentu dari tab Actions. Klik commit, klik langkah alur kerja Lighthouse CI, lalu luaskan hasil langkah run Lighthouse CI.

    Screenshot tab 'Setelan' GitHub

    Anda baru saja menyiapkan GitHub Action untuk menjalankan Lighthouse CI. Opsi ini akan paling berguna saat digunakan bersama dengan pemeriksaan status GitHub.

Menyiapkan pemeriksaan status GitHub

Pemeriksaan status, jika dikonfigurasi, adalah pesan yang muncul di setiap PR dan biasanya menyertakan informasi seperti hasil pengujian atau keberhasilan build.

Screenshot tab 'Setelan' GitHub

Langkah-langkah di bawah menjelaskan cara menyiapkan pemeriksaan status untuk Lighthouse CI.

  1. Buka halaman Lighthouse CI GitHub App, lalu klik Configure.

  2. (Opsional) Jika Anda adalah bagian dari beberapa organisasi di GitHub, pilih organisasi yang memiliki repositori tempat Anda ingin menggunakan Lighthouse CI.

  3. Pilih Semua repositori jika Anda ingin mengaktifkan Lighthouse CI di semua repositori atau pilih Hanya pilih repositori jika Anda hanya ingin menggunakannya di repositori tertentu, lalu pilih repositori. Kemudian, klik Instal & Otorisasi.

  4. Salin token yang ditampilkan. Anda akan menggunakannya di langkah berikutnya.

  5. Untuk menambahkan token, buka halaman Setelan di repositori GitHub Anda, klik Secret, lalu klik Tambahkan secret baru.

    Screenshot tab 'Setelan' GitHub
  6. Tetapkan kolom Name ke LHCI_GITHUB_APP_TOKEN dan tetapkan kolom Value ke token yang Anda salin di langkah terakhir, lalu klik tombol Add secret.

  7. Buka file lighthouse-ci.yaml dan tambahkan secret lingkungan baru ke perintah "run Lighthouse CI".

-           name: run Lighthouse CI
            run: |
              npm install -g @lhci/cli@0.3.x
              lhci autorun --upload.target=temporary-public-storage || echo "LHCI failed!"
+            env:
+              LHCI_GITHUB_APP_TOKEN: $
  1. Pemeriksaan status siap digunakan. Untuk mengujinya, buat permintaan pull baru atau kirim commit ke permintaan pull yang ada.

Menyiapkan Server CI Lighthouse

Server CI Lighthouse menyediakan dasbor untuk mempelajari pelaporan Lighthouse historis. Cloud Storage juga dapat berfungsi sebagai datastore pribadi jangka panjang untuk laporan Lighthouse.

Screenshot dasbor Server Lighthouse CI
Screenshot perbandingan dua laporan Lighthouse di Lighthouse CI Server
  1. Pilih commit yang akan dibandingkan.
  2. Jumlah perubahan skor Lighthouse antara dua commit.
  3. Bagian ini hanya menampilkan metrik yang telah berubah di antara dua commit.
  4. Regresi ditandai dengan warna merah muda.
  5. Peningkatan ditandai dengan warna biru.

CI Server Lighthouse paling cocok untuk pengguna yang sudah terbiasa dalam men-deploy dan mengelola infrastruktur mereka sendiri.

Untuk informasi tentang cara menyiapkan server Lighthouse CI, termasuk resep untuk menggunakan Heroku dan Docker untuk deployment, lihat petunjuk ini.

Cari tahu selengkapnya