Hampir setiap upaya "biar lebih cepat" dimulai dengan tebakan dan sebuah pengaya. Mulailah dengan satu angka saja, karena ia membelah masalahnya jadi dua.
Waktu ke bita pertama
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/
- Di bawah 200 md - servernya baik-baik saja. Semua yang Anda rasakan ada di peramban: gambar, fon, skrip.
- Di atas 800 md - halamannya sedang dibangun dengan lambat. Tak ada apa pun di peramban yang akan memperbaiki itu.
- connect jauh lebih besar daripada dns - soal jarak atau jabat tangan TLS yang lambat, bukan aplikasinya.
Kalau servernya yang lambat
Halamannya mengerjakan terlalu banyak per permintaan. Urut menurut seberapa sering inilah jawabannya:
- Sebuah kueri tanpa indeks — Catatan kueri lambat menyebut namanya. Satu indeks biasanya memangkas beberapa detik.
- Kueri yang sama di dalam gelung — Dua puluh produk, dua puluh kueri untuk kategorinya. Satu join menggantikan semuanya.
- Panggilan ke luar tanpa batas waktu — API yang mati menahan halaman Anda selama soketnya masih terbuka.
- Tak ada singgahan kode operasi — Tanpa opcache, PHP mengompilasi ulang setiap berkas pada setiap permintaan.
Kalau perambannya yang lambat
- Gambar. Biasanya inilah sebagian besar bitanya. Sajikan ukuran yang dipakai halamannya, bukan ukuran yang dibuat kameranya.
- Fon. Tiap keluarga dan tiap ketebalan adalah satu berkas, dan fon yang menghambat pelukisan menahan seluruh halamannya.
- Skrip pihak ketiga. Bagian paling lambat dari kebanyakan halaman adalah kode dari server orang lain.
Pengaya singgahan pada halaman yang lambat menyembunyikan masalahnya dari Anda, tetapi bukan dari pengunjung pertama pada tiap putaran singgahan. Perbaiki halamannya, baru singgahkan.
Ukur halaman yang sama tiga kali, pada jam yang sama, sebelum dan sesudah tiap perubahan. Satu perubahan, satu pengukuran - kalau tidak, Anda tak akan tahu yang mana yang berhasil.