Pengoptimuman boot OPCache PHP

Untuk laman web yang berdasarkan pada WordPress , Joomla atau Laravel , misalnya, dan tidak mempunyai kandungan khusus pengguna, disarankan untuk menyimpan semua halaman dalam cache HTML statik dan hanya membuat semula cache secara manual (atau secara automatik) jika ada perubahan pada backend. Namun, jika halaman tersebut mengandungi kandungan dinamis yang bergantung pada sesi dan kuki atau juga pada bahasa dan lokasi, OPcache sesuai .


Masa boot yang disebut untuk ketiga-tiga sistem yang disebutkan adalah lebih dari 100 ms dengan pelayan CentOS7 yang baru dipasang (dengan SSD dan PHP 7.1). Setiap kali skrip PHP dijalankan, skrip tersebut harus dikompilasi menjadi bytecode pada waktu runtime. OPcache sekarang menerapkan cache untuk bytecode ini - jika skrip PHP yang sama dijalankan dengan permintaan berikutnya, ia tidak perlu dikompilasi ulang. Setelah mengaktifkan OPcache kami menetapkan tetapan berikut:

9006cec6c5d3d2498ee26c5bfd91590a

Masa pelaksanaan (rata-rata lebih dari 10 pelaksanaan) kini telah dikurangkan dengan ketara:

WordPress 4.7.4 Joomla 3.7 Laravel 5.4
tanpa OPcache 295 ms 201 ms 110 ms
dengan OPcache 54 ms 59 ms 13 ms
Faktor 5,5 3,5 8,5

Oleh kerana kami menetapkan validate_timestamps ke 0 dan pada masa yang sama revalidate_freq untuk jangka masa satu hari, cache hampir tidak pernah dibina semula secara automatik (kami secara sedar melakukan ini secara manual). Dengan cangkuk git kecil, skrip PHP dijalankan dengan setiap "tarikan". Cara mengaktifkan cangkuk:

a1678610c8b4c7db5997375944183830

a1678610c8b4c7db5997375944183830

Fungsi pembantu berikut juga berguna untuk mengukur bahagian kod individu (atau keseluruhan masa pelaksanaan):

085f4291bbcc4e8a64bbea951ff49ab9

Sekiranya anda ingin mendapatkan maklumat berguna seperti status, memori terpakai atau jumlah fail dalam cache, anda menggunakan fungsi PHP ini:

3f6309d04bc7e48dd909859321b96209

Untuk mendapat keuntungan dari OPcache dalam lingkungan pengembangan tempatan (yang umumnya tidak disarankan), kami menggunakan tipuan.

OPcache aktif di semua pelayan yang telah memasang modul OPcache dan di mana tetapan opcache.enable tidak ditetapkan secara eksplisit. Kami membiarkannya begitu. Kami hanya menetapkan opcache.validate_timestamps = 1 dalam php.ini. Ini bermaksud opcache.revalidate_freq = 2. Ini bermakna OPcache disahkan semula hampir berterusan untuk setiap projek. Untuk projek-projek di mana kami ingin mengaktifkan OPcache secara kekal, kami menggunakan projek yang berkaitan dalam .htaccess tetapan berikut:

1dd64a3f2fe4425b29b1409410fe3fc0

Kemudian kami mulakan semula pelayan web dan buat skrip berikut:

91fb5289160e410607c9ea89112a575b

Skrip ini membersihkan cache dan membina semula pada masa yang sama. Sekarang kami menetapkan arahan RunOnSave yang berkaitan dengan ruang kerja dalam editor kegemaran kami VSCode:

91fb5289160e410607c9ea89112a575b

Belakang