Artikel ini menyajikan solusi praktis untuk optimasi PHP, buffering, dan kompresi.
Sebagai bahasa pemrograman Web yang populer, keunggulan terbesar PHP adalah kecepatan. PHP4 telah melakukan hal ini dengan sangat baik, dan Anda hampir tidak dapat menemukan bahasa skrip yang lebih cepat daripada itu. Namun jika beban aplikasi Anda berat, bandwidth Anda relatif kecil, atau ada hambatan lain yang memengaruhi kinerja server Anda, sebaiknya Anda mencoba beberapa resep yang saya berikan untuk melihat apakah berhasil.
1. Optimasi Kode
Dalam hal optimasi kode, Anda mungkin memikirkan kode yang rapi dan jelas, tetapi bukan itu maksud artikel ini, karena jika Anda ingin mencari kecepatan, Anda harus melakukan penyesuaian yang sesuai pada kode sumber PHP. Secara umum, komentar yang berlebihan akan dihapus sehingga kode tidak dapat dibaca. Namun bagi seorang programmer dengan kualitas bagus, ini sungguh luar biasa. Untungnya, Zend Technologies telah merilis Zend Optimization Engine untuk membantu Anda melakukan hal ini. Sekarang gratis, tetapi Anda harus mengikuti lisensi Zend Optimizer. Produk ini dapat mengoptimalkan kode perantara yang dihasilkan oleh mesin.
Menginstal mesin ini relatif sederhana. Setelah mengunduh versi yang sesuai dengan platform, unzip file terkompresi, lalu tambahkan dua baris berikut ke file php.ini, restart server web, dan selesai.
zend_optimizer.optimization_level=15
zend_extension="/path/to/ZendOptimizer.so"
zend_loader.enable=Mati
Jika ini adalah platform Win32, seharusnya:
zend_optimizer.optimization_level=15
zend_extension_ts="C:path atau endOptimizer.dll"
zend_loader.enable=Mati
! Itu bukan sebuah kesalahan? Mengapa tiga baris? Sebenarnya baris ketiga adalah opsional. Karena sepertinya mematikan zend_loader dapat sedikit meningkatkan kecepatan, ada baiknya meletakkan baris ketiga ini di php.ini. Perlu diperhatikan bahwa prasyarat untuk mematikannya adalah Anda tidak menggunakan program enkripsi Zend.
2. Buffering
Jika kita ingin lebih meningkatkan kecepatan, kita perlu mempertimbangkan penggunaan teknologi buffering. Ada beberapa solusi alternatif, antara lain Zend Cache (versi beta), APC, dan Afterburner Cache, serta jpCache.
Di atas adalah semua modul buffer. Mereka menyimpan kode perantara yang dihasilkan oleh permintaan pertama untuk file .php di memori server Web, dan kemudian mengembalikan versi "yang dikompilasi" untuk permintaan berikutnya. Karena hal ini mengurangi pembacaan dan penulisan disk, dan semua pekerjaan di memori, proses ini dapat meningkatkan kinerja aplikasi secara signifikan.
Ada banyak produk seperti itu yang tersedia, jadi siapa yang harus Anda pilih?
Zend Cache adalah produk komersial yang bagus. Setelah memuat halaman PHP berukuran besar untuk pertama kalinya, Anda jelas akan merasakan peningkatan kecepatan, dan server akan menyisihkan lebih banyak sumber daya. Sayangnya, produk ini membutuhkan biaya, namun dalam beberapa kasus, Anda tidak ingin berhemat.
Afterburner Cache adalah produk dari Bware Technologies dan saat ini dalam versi Beta. Tampaknya sama dengan Zend Cashe, tetapi tidak dapat mencapai hasil sebaik Zend Cache, juga tidak dapat bekerja dengan mesin pengoptimalan Zend, tetapi gratis. , jadi saya Modul ini digunakan.
APC (Alternative PHP Cache) adalah modul gratis lainnya yang dirilis oleh Community Connect yang tampaknya siap untuk lingkungan produksi.
3. Kompresi konten web
Untuk jaringan yang semakin padat, menghemat bandwidth sama berharganya dengan menghemat air. Menurut standar IETF, sebagian besar browser harus mendukung konten yang dikompresi menggunakan gzip. Ini berarti Anda dapat mengirim konten terkompresi gzip ke browser, dan browser akan mendekompresi data secara transparan.
mod_gzip adalah modul Apache gratis yang diluncurkan oleh Remote Communications, yang dapat mengompresi konten Web statis dan mengirimkannya ke browser. Untuk sebagian besar halaman web statis, modul ini cocok. Meskipun
orang-orang dari perusahaan Remotecommunications mengatakan bahwa modul ini mendukung semua konten dinamis yang dihasilkan oleh mod_php, mod_perl, mod dan sebagainya, sepertinya modul ini masih tidak berfungsi. Dilihat dari milis mod_gzip, masalah ini diperkirakan tidak akan terselesaikan hingga 1.3.14.6f.
Jika kita ingin mengompres konten dinamis, kita bisa menggunakan class.gzip_encode.php, kelas PHP yang digunakan di awal dan akhir skrip. Untuk keseluruhan situs web, fungsi di auto_prepend dan auto_append dari php.ini dipanggil. Untuk detailnya, Anda dapat membaca program kelas ini. Program ini mendapat komentar yang baik dan penulis memberi tahu Anda hampir semuanya. Namun sebelum menggunakannya, PHP Anda harus dikompilasi untuk mendukung zlib.
Untuk PHP 4.0.4, solusi baru adalah dengan menggunakan ob_gzhandler, yang dapat mencapai efek yang sama seperti kelas di atas. Cukup tambahkan kalimat berikut ke php.ini:
output_handler = ob_gzhandler;
Ini memungkinkan PHP mengaktifkan buffering keluaran dan mengompresi semua keluaran. Jika ada alasan khusus mengapa Anda tidak ingin semua konten dikompresi dan dikeluarkan, Anda dapat menambahkan baris berikut ke file .htaccess untuk mengompresi file di direktori yang sesuai.
php_value output_handler ob_gzhandler
juga bisa ditambahkan langsung ke kode PHP:
ob_start("ob_gzhandler");
Teknologi kompresi ini sangat efektif, namun bagi pengguna Netscape Communicator sepertinya tidak lengkap karena tidak bisa mengompres file grafik? kompresi file jpeg dan gif? IE tidak memiliki masalah ini.
Kesimpulan:
Menggunakan teknik yang dibahas dalam artikel ini akan meningkatkan kinerja situs web Anda, namun perlu diketahui bahwa:
- PHP mungkin bukan penyebab kemacetan, periksa kembali penyebab lain (misalnya basis data)
- Anda tidak dapat memaksimalkan status kinerja server. Jadi sebelum mengeluh tentang PHP dan bufferingnya, pertimbangkan apakah sudah waktunya untuk mengupgrade server Anda atau mengadopsi teknologi penyeimbangan beban dinamis (itu menghabiskan banyak uang).
- Jangan meremehkan kompresi konten. Meskipun Anda melihat peningkatan kecepatan pada aplikasi PHP di intranet 100 Mb Anda, jangan lupa di mana pengguna modem Anda mengeluh tentang halaman HTML 100Kb Anda.