Bagaimana Cara Kerja JIT Compiler Dalam PHP

JIT Compiler merupakan sebuah fitur terbaru dari PHP yang berkomitmen untuk mengoptimasi website ...
Penulis
Admin
Kategori
Teknologi Web
Estimasi
5 menit baca
Dilihat
1.0K
Posting
20 Jun 2022
Bagaimana Cara Kerja JIT Compiler Dalam PHP JIT Compiler merupakan sebuah fitur terbaru dari PHP yang berkomitmen untuk mengoptimasi website agar lebih cepat. Disini kita akan membahas cara kerja dan cara mengaktifkan fitur ini. Bagaimana Cara Kerja JIT Compiler Dalam PHP
2022-11-25

Seperti yang diketahui, PHP merupakan salah satu bahasa pemrograman populer didunia dan juga salah satu bahasa pemrograman yang cukup ketinggalan dibandingkan dengan bahasa pemrograman lainnya yang berkaitan dengan fitur-fitur kinerja. Baru-baru ini PHP 8 sudah dirilis dengan berbagai optimasi dan fitur baru untuk meningkatkan performa aplikasi berbasis website.

Sejak PHP 8 dirilis, PHP sudah melakukan beberapa terobosan yang nyata dalam meningkatkan performa itu sendiri. Dimulai dengan versi 5, OPCache menjadi salah satu library yang hebat untuk kinerja aplikasi website, hingga sampai dengan versi 8 yang meluncurkan fitur JIT compiler yang memberi berita menyenangkan bagi developer. Disini kita akan membahas seputar JIT secara sederhana dan mudah dipahami, mungkin akan banyak menemukan kerumitan jika dijelaskan secara detail.

 

Bagaimana Cara Kerja JIT Compiler Dalam PHP

 

 

1. Apa itu JIT Compiler

JIT atau Just In Time Compiler adalah suatu metode dalam mengolah program untuk mengkompilasi code kedalam mesin sebelum dijalankan sepenuhnya dan juga merupakan suatu terobosan baru dalam PHP ketika menghasilkan eksekusi yang cepat dibandingkan dengan versi sebelumnya. JIT adalah sebuah teknik, diluncurkan untuk meningkatkan kinerja pemrosesan kode-kode aplikasi pada saat runtime.

 

2. Bagaimana JIT compiler PHP itu bekerja

Sebelum adanya fitur ini, PHP memiliki library yang berfokus pada kinerja aplikasi yaitu OPCache atau OPcode. OPCode sendiri adalah sekumpulan kode yang telah dicompile sebelumnya dalam bentuk perintah yang akan diberikan kepada processor untuk dieksekusi. Kode tersebut bukan kode yang asli, namun sebuah cache dari kode yang dapat dijalankan kedalam mesin virtual (VM) ketika kode pertama kali dijalankan.

JIT menawarkan implementasi kode mesin yang aktual bersamaan dengan OPCache. Artinya, teknik ini sendiri menawarkan kode-kode program yang sudah diimplementasikan untuk bekerja sama dengan OPCache ketika code skrip pertama kali dijalankan, dan kode program yang sudah di cache tadi akan dikembalikan. Kalian bisa melihat diagram dibawah ini untuk lebih detailnya.

 

JIT compiler pada PHP 8

 

3. Bagaimana cara untuk mengkonfigurasikan JIT dalam PHP

Jika kalian berfikir bahwa fitur ini adalah sebuah fitur yang otomatis adalah salah besar. JIT akan aktif jika sudah merubah konfigurasi tambahan pada php.ini dan OPCache.

Parameter opcache.enable secara default akan bernilai 0, jika ingin mengaktifkannya segera rubah nilainya menjadi 1 dan centang pilihan OPCache dalam PHP version jika mengunakan cPanel.

Namun, untuk mengaktifkan fitur ini, diperlukan dua parameter lain yang harus diaktifkan dalam php.ini, yaitu:

  • opcache.jit_buffer_size

Parameter ini akan menentukan jumlah buffer pada memori yang akan kita alokasikan untuk kode program, untuk menetapkan nilai pada opsi ini, bisa isi dengan nilai standar yaitu 256M, contoh:
opcache.jit_buffer_size=256M

  • opcache.jit

Dan parameter selanjutnya adalah opcache.jit, parameter ini akan mengaktifkan fitur dengan menetapkan nilai numeric RFC. Secara singkat, RFC merupakan barisan digit yang terpisah dengan memiliki nilai konfigurasi yang berbeda-beda. Dan perlu kalian ketahui, terdapat 3 nilai pada parameter ini yang sering digunakan dan masing-masing memiliki fungsi yang berbeda-beda, yaitu:

  • Nilai RFC 1205 merupakan konfigurasi dalam JIT untuk mengcompile semua kode kedalam JIT, 1205 merupakan nilai default jika parameter opcache.jit tidak diisi. opcache.jit=1205
  • Nilai RFC 1235 merupakan konfigurasi dalam JIT untuk mengkompile sebagian dari kode yang dipilih, yang nantinya akan diteruskan ke JIT compiler. opcache.jit=1235
  • Nilai RFC 1255 merupakan konfigurasi dalam JIT, beberapa kode dilacak untuk dikompilasi oleh JIT dan bagian kode yang dipilih tersebut akan diteruskan kedalam compiler. opcache.jit=1255

JIT dalam PHP, juga menerima tracing sebagai konfigurasi yang mewakili beberapa kombinasi pada konfigurasi yaitu:

opcache.jit=tracing

Saat mengaktifkan tracing pada konfigurasi, fungsi tersebut akan melihat keseluruhan history dan mencari kode yang bisa dioptimalkan, dan akan memberikan hasil yang cukup baik dalam meningkatkan kinerja aplikasi secara signifikan.

Beberapa function yang bisa kalian gunakan untuk mengecek status dan informasi pada OPCache dan JIT, yaitu:

var_dump(opcache_get_status());

Fungsi ini akan mengembalikan array dengan informasi status opcache saat ini, beberapa informasi tersebut seperti status cache (aktif, restart, atau tidak aktif), pengunaan memori dan lainnya.

Selanjutnya, kalian juga bisa mengunakan function ini untuk mendapatkan informasi khusus, seperti status, buffer size dan lainnya:

var_dump(opcache_get_status()['jit']);

Output yang dihasilkan:

array:7 [
  "enabled" => true
  "on" => true
  "kind" => 5
  "opt_level" => 4
  "opt_flags" => 6
  "buffer_size" => 4080
  "buffer_free" => 0
]

 

4. Apa dampak JIT compiler PHP dalam aplikasi website

Setiap pemilik website atau developer, pasti menginginkan kinerja aplikasi yang berkualitas didalam setiap baris kode-kodenya. Sebelum PHP 8 dirilis, OPCache sudah menjadi revolusi dalam pengembangan kinerja dalam bahasa pemrograman ini. Namun, OPCache tidak cukup untuk menahan keseluruhan kode program yang akan dijalankan kedalam mesin, maka hadirlah fitur ini sebagai solusi dalam mengkompilasi kumpulan kode program.

Namun yang menarik dari artikel medium yang kita temukan, ia melakukan perbandingan dengan mengunakan framework Laravel yang berjalan dalam PHP 7.3 dan PHP 8.0 (JIT), dan hasilnya menunjukan yang sama. Dikutip dari artikel tersebut, ini adalah hasil dari benchmark dari PHP 7.3 dengan PHP 8 + JIT:

PHP 7.3: 131,37 req/s 
PHP 8.0 + JIT: 133,57 req/s

Kita cukup terkejut dengan fitur ini yang hanya memberikan sedikit kinerja ketika menggunakan framework, apakah JIT ini hanyalah langkah awal PHP untuk membuka kemungkinan baru? fitur ini merubah kinerja eksekusi kode dalam CPU dan kemampuan untuk mengkompilasi kode-kode secara langsung dan akan menghilangkan ketergantungan pada bahasa pemrograman C, ini hanya baru kemungkinan yang tidak sepenuhnya benar.

Selain itu, kita juga menemukan pengujian benchmark JIT didalam situs resmi PHP:

 

JIT compiler pada PHP 8

 

Seperti yang kalian lihat, aplikasi web seperti Wordpress, Mediawiki dan Symfony Demo menunjukan hasil yang sama, dengan nilai yang sedikit lebih tinggi maupun rendah (Dengan mengunakan Function JIT) dibandingkan dengan yang tidak mengunakan JIT. Sisanya, kita lihat hasil yang berbeda yang menunjukan efisiensi yang 3 kali jauh lebih tinggi.

Kita tahu, banyak aplikasi website diluar sana yang mengunakan wordpress, lalu apa gunanya mengunakan fitur ini jika tidak menunjukan hasil maksimal? Dikutip dari droptica.com, pengenalan kompiler JIT di PHP sebenarnya merupakan langkah menuju membuka bahasa untuk kemungkinan baru. Teknik ini secara signifikan meningkatkan kinerja eksekusi kode dalam aplikasi kedalam CPU. Ini soal tujuan dan terobosan yang benar-benar baru, seperti pembelajaran mesin, perhitungan matematika yang rumit, atau pemrosesan/pemodelan gambar 2D/3D.

Terlepas dari itu, memang fitur ini dapat meningkatkan kinerja aplikasi kedalam tingkat yang lebih besar atau kecil. JIT bagaikan koin yang memiliki dua sisi, dimana dapat menghasilkan kinerja lebih baik atau dapat menghasilkan kinerja yang buruk. Itu tergantung cara kerja dalam proses development aplikasi.

 

Kesimpulan

Dengan adanya JIT, bahasa pemrograman PHP akan jauh lebih tumbuh sebagai bahasa pemrograman yang lebih cerah dan membuka kemungkinan-kemungkinan lainnya, mungkin dalam update berikutnya, fitur ini akan terus di optimalkan dalam segala aspek bahasa pemrogramanan, mengingat penambahan fitur ini masih tergolong baru.

Share