Saya telah berupaya mengoptimalkan kinerja program selama beberapa waktu baru-baru ini, dan saya memiliki ide menarik yang ingin saya bagikan kepada Anda.
Cache adalah mode aplikasi khas dari strategi "ruang untuk waktu" dan merupakan metode penting untuk meningkatkan kinerja sistem. Penggunaan cache dapat sangat mengurangi jumlah operasi database jika volume akses besar, secara signifikan mengurangi beban sistem dan meningkatkan kinerja sistem. Dibandingkan dengan cache halaman, kumpulan hasil adalah semacam "data mentah" yang tidak berisi informasi format. Jumlah datanya relatif kecil dan dapat diformat lagi, sehingga cukup fleksibel. Karena PHP adalah bahasa skrip yang "mengkompilasi dan mengeksekusi pada saat yang sama", PHP juga menyediakan metode yang sangat nyaman untuk menggunakan cache kumpulan hasil sampai batas tertentu - menggunakan cache dengan secara dinamis menyertakan segmen kode definisi data yang sesuai. Jika cache dibangun di "RamDisk", efisiensinya harus lebih ditingkatkan. Di bawah ini adalah contoh kode kecil untuk referensi.
// memuat data dengan cache
fungsi load_data($id,$cache_lifetime) {
// data yang dikembalikan
$data = susunan();
// buat nama file cache
$cache_filename = 'cache_'.$id.'.php';
// periksa waktu modifikasi terakhir file cache
$cache_filetime = waktu file($cache_filename);
jika (waktu() - $cache_filetime <= $cache_lifetime) {
//** cache belum kedaluwarsa
include($cache_namafile);
} kalau tidak {
//** cache sudah habis masa berlakunya
// memuat data dari database
// ...
while ($dbo->nextRecord()) {
// $data[] = ...
}
// memformat data sebagai file php
$data_cache = "
while (daftar($kunci, $val) = masing-masing($data)) {
$data_cache .= "$data['$kunci']=array('";
$data_cache .= "'NAMA'=>"".qoute($val['NAMA'])."","
$data_cache .= "'VALUE'=>"".qoute($val['VALUE'])."""
$data_cache .= ";);rn";
}
$data_cache = "?>rn";
// simpan data ke file cache
if ($fd = fopen($cache_namafile,'w+')) {
fput($fd,$data_cache);
fclose($fd);
}
}
kembalikan $data;
}
?>
Situasi yang berlaku:
1. Data relatif stabil, terutama operasi membaca.
2. Operasi file lebih cepat dibandingkan operasi database.
3. Akses data yang kompleks, akses volume data yang besar, akses data yang intensif, dan beban yang sangat berat pada database sistem.
4. Struktur pemisahan web/DB atau struktur DB tunggal multi-Web.
Pertanyaan yang belum dikonfirmasi:
1. Apakah membaca dan menulis file selama akses bersamaan akan menyebabkan masalah penguncian.
2. Bagaimana kinerjanya bila ada terlalu banyak file data yang terlibat?
Ide perluasan:
1. Hasilkan kode definisi data JavaScript dan panggil di klien.
2. Belum memikirkannya…
Semoga bisa berdiskusi bersama.
cache
Jika Anda ingin membuat aplikasi PHP besar Anda memiliki performa lebih baik, menggunakan caching juga merupakan cara yang baik. Ada banyak solusi caching yang tersedia, termasuk: Zend Cache, APC, dan Afterburner Cache.
Semua produk ini adalah "modul caching". Ketika permintaan untuk file .php pertama kali muncul, mereka menyimpan kode perantara PHP di memori server web, dan kemudian menanggapi permintaan berikutnya dengan versi "yang dikompilasi". Pendekatan ini benar-benar dapat meningkatkan kinerja aplikasi karena mengurangi akses disk seminimal mungkin (kode telah dibaca dan diurai), dan kode berjalan langsung di memori, membuat server merespons permintaan lebih cepat. Tentu saja, modul caching juga akan memantau perubahan pada file sumber PHP dan melakukan cache ulang halaman jika diperlukan, sehingga mencegah pengguna mendapatkan halaman yang masih dihasilkan oleh kode PHP yang sudah ketinggalan zaman. Karena modul caching dapat secara signifikan mengurangi beban pada server dan meningkatkan efisiensi respons aplikasi PHP, modul ini sangat cocok untuk situs web dengan beban berat.
Bagaimana memilih produk caching ini
Zend Cache adalah perangkat lunak komersial dari Zend Technologies, perusahaan yang disebutkan sebelumnya yang memberi kita mesin PHP dan Zend Optimizer gratis. Zend Cache memang layak didapatkan! Untuk halaman PHP yang besar, Anda dapat merasakan bahwa kecepatannya akan meningkat setelah dijalankan pertama kali, dan server akan memiliki lebih banyak sumber daya yang tersedia. Sayangnya produk ini tidak gratis, namun dalam beberapa kasus masih bisa bernilai tinggi.
Afterburner Cache adalah modul caching gratis dari Bware Technologies. Produk ini saat ini dalam versi Beta. Afterburner Cache terlihat mirip dengan Zend Cache, tetapi (belum) meningkatkan kinerja sebanyak Zend Cache, dan tidak berfungsi dengan Zend Optimizer.
APC adalah singkatan dari Alternative PHP Cache, yang merupakan modul caching gratis lainnya dari Community Connect. Produk ini sudah cukup stabil untuk penggunaan formal, dan tampaknya meningkatkan kecepatan menanggapi permintaan secara signifikan.
Tentang kompresi
Modul Apache gratis mod_gzip dari Remote Communications memiliki kemampuan untuk mengompresi konten Web statis untuk browser yang mendukung jenis pengkodean konten ini. Untuk sebagian besar konten web statis, mod_gzip berfungsi dengan sangat baik. mod_gzip dapat dengan mudah dikompilasi ke dalam Apache dan juga dapat digunakan sebagai DSO. Menurut Remote Communications, mod_gzip juga dapat mengompresi konten dinamis dari mod_php, mod_perl, dll. Saya mencoba lagi dan lagi, tetapi sepertinya tidak berhasil. Saya telah membaca banyak forum dan artikel tentang mod_gzip dan sepertinya masalah ini diharapkan dapat diselesaikan di versi mod_gzip berikutnya (mungkin 1.3.14.6f). Sampai saat itu, kita dapat menggunakan mod_gzip pada bagian statis situs web.
Namun, terkadang kita sebenarnya tidak ingin mengompres konten dinamis, sehingga kita harus mencari cara lain. Salah satu caranya adalah dengan menggunakan class.gzip_encode.php, yaitu kelas PHP yang dapat digunakan untuk mengompresi konten halaman dengan memanggil fungsi tertentu dari kelas tersebut di awal dan akhir skrip PHP. Jika Anda ingin mengimplementasikan solusi ini di tingkat situs web, Anda dapat memanggil fungsi-fungsi ini dari arahan auto_prepend dan auto_append di file php.ini. Meskipun metode ini efektif, tidak diragukan lagi metode ini membawa lebih banyak overhead ke situs web dengan muatan tinggi. Untuk petunjuk rinci tentang cara menggunakan kelas ini, lihat kode sumbernya. Deskripsi kode sumbernya cukup lengkap, dan penulisnya memberi tahu Anda semua yang perlu Anda ketahui.
PHP 4.0.4 memiliki pengendali cache keluaran baru ob_gzhandler, yang mirip dengan kelas sebelumnya tetapi memiliki penggunaan yang berbeda. Konten berikut harus ditambahkan ke php.ini saat menggunakan ob_gzhandler:
keluaran_handler = ob_gzhandler;
Baris kode ini menyebabkan PHP mengaktifkan caching keluaran dan mengompresi semua yang dikirimkannya. Jika karena alasan tertentu Anda tidak ingin menambahkan baris kode ini ke php.ini, Anda juga dapat mengubah perilaku server default (tanpa kompresi) melalui file .htaccess di direktori tempat file sumber PHP berada Sintaksnya adalah sebagai berikut:
php_value output_handler ob_gzhandler
Atau panggil dari kode PHP, sebagai berikut: ob_start("ob_gzhandler");
Cara penggunaan output cache handle ini memang sangat efektif dan tidak memberikan beban khusus pada server. Namun, harus dicatat bahwa Netscape Communicator memiliki dukungan yang buruk untuk grafis terkompresi, jadi kecuali Anda dapat memastikan bahwa semua pengguna menggunakan browser IE, Anda harus menonaktifkan grafis JPEG dan GIF terkompresi. Secara umum, kompresi ini berfungsi untuk semua file lainnya, namun disarankan agar Anda mengujinya secara terpisah untuk setiap browser, terutama jika Anda menggunakan plug-in atau penampil data khusus. Ini sangat penting.