Menghapus JavaScript yang Memblokir Perenderan

Aturan ini berlaku saat PageSpeed Insights mendeteksi bahwa HTML Anda merujuk pada file JavaScript eksternal yang memblokir di bagian paruh atas halaman.

Ringkasan

Sebelum browser dapat merender suatu halaman, browser harus membuat pohon DOM dengan menguraikan markup HTML. Ketika proses ini berlangsung, setiap kali parser menemukan skrip, parser harus berhenti dan mengeksekusinya sebelum parser melanjutkan penguraian HTML. Pada kasus skrip eksternal, parser juga dipaksa untuk menunggu sampai resource didownload, yang menyebabkan adanya 1 roundtrip jaringan atau lebih dan menunda waktu perenderan halaman untuk pertama kalinya. Lihat Menambahkan Interaktivitas dengan JavaScript untuk mempelajari lebih lanjut tentang cara JavaScript memengaruhi jalur perenderan kritis.

Saran

Sebaiknya Anda menghindari dan meminimalkan penggunaan JavaScript pemblokiran, khususnya skrip eksternal yang harus diambil sebelum dapat dieksekusi. Skrip yang diperlukan untuk merender konten halaman dapat dijadikan inline guna menghindari permintaan jaringan ekstra, namun konten yang dijadikan inline harus berukuran kecil dan harus dieksekusi dengan cepat agar dapat memberikan performa yang baik. Skrip yang tidak penting untuk perenderan awal harus dibuat dalam mode asinkron atau ditunda hingga perenderan pertama selesai. Harap diingat bahwa agar hal ini dapat meningkatkan waktu pemuatan, Anda juga harus mengoptimalkan pengiriman CSS.

JavaScript Inline

Skrip eksternal yang memblokir memaksa browser untuk menunggu JavaScript diambil, yang dapat menambah 1 roundtrip jaringan atau lebih sebelum halaman dapat dirender. Jika skrip eksternal berukuran kecil, Anda dapat menjadikan kontennya inline secara langsung ke dokumen HTML dan menghindari latensi permintaan jaringan. Misalnya, apabila dokumen HTML terlihat seperti ini:
<html>
  <head>
    <script type="text/javascript" src="small.js"></script>
  </head>
  <body>
    <div>
      Hello, world!
    </div>
  </body>
</html>
Dan resource small.js tampak seperti ini:
  /* contents of a small JavaScript file */
Anda dapat membuat skrip menjadi inline seperti berikut:
<html>
  <head>
    <script type="text/javascript">
      /* contents of a small JavaScript file */
    </script>
  </head>
  <body>
    <div>
      Hello, world!
    </div>
  </body>
</html>
Membuat konten skrip menjadi inline menghilangkan permintaan eksternal untuk small.js dan memungkinkan perenderan pertama kali dilakukan lebih cepat oleh browser. Namun, perlu diperhatikan bahwa membuat konten skrip menjadi inline juga memperbesar ukuran dokumen HTML dan konten skrip yang sama mungkin perlu dijadikan inline di beberapa halaman. Sehingga, dianjurkan untuk membuat skrip berukuran kecil menjadi inline agar dapat memberikan performa yang terbaik.

Membuat JavaScript pada Mode Asinkron

Secara default JavaScript memblokir kontruksi DOM sehingga menunda waktu untuk perenderan pertama kali. Untuk mencegah JavaScript memblokir parser, sebaiknya gunakan atribut async HTML pada skrip eksternal. Misalnya:
<script async src="my.js">
Lihat Pemblokiran Parser vs. JavaScript Asinkron untuk mempelajari lebih lanjut tentang skrip asinkron. Perlu diperhatikan bahwa skrip asinkron tidak dijamin akan dieksekusi pada perintah tertentu dan tidak boleh menggunakan document.write. Skrip yang bergantung pada perintah eksekusi atau perlu mengakses/mengubah DOM atau CSSOM halaman mungkin harus ditulis ulang terkait masalah batasan ini.

Menunda pemuatan JavaScript

Pemuatan dan eksekusi skrip yang tidak diperlukan untuk perenderan halaman awal dapat ditunda hingga perenderan awal atau bagian penting lain dari halaman telah selesai dimuat. Tindakan ini dapat membantu mengurangi pengisian konten pada resource dan meningkatkan performa.

FAQ

Bagaimana jika saya menggunakan library JavaScript seperti jQuery?
Banyak library JavaScript, seperti JQuery, digunakan untuk meningkatkan halaman guna menambah interaktivitas, animasi, dan efek tambahan lainnya. Namun, banyak dari perilaku ini yang dapat ditambahkan dengan aman setelah konten paruh atas dirender. Cari tahu cara membuat JavaScript asinkron atau menunda pemuatannya.
Bagaimana jika saya menggunakan framework JavaScript untuk menyusun halaman?
Apabila konten halaman disusun oleh JavaScript sisi klien, sebaiknya Anda memeriksa penyebarisan modul JavaScript yang relevan untuk menghindari roundtrip jaringan tambahan. Demikian pula, meningkatkan perenderan sisi server dapat meningkatkan kinerja pemuatan halaman pertama secara signifikan: merender template JavaScript pada server untuk memberikan perenderan pertama kali yang cepat, lalu menggunakan template sisi klien setelah halaman dimuat. Untuk informasi selengkapnya tentang perenderan sisi server, lihat http://youtu.be/VKTWdaupft0?t=14m28s.