Menggunakan PEAR untuk buffering program PHP
Buffering adalah topik hangat di dunia PHP, karena halaman dinamis yang dihasilkan oleh PHP perlu dihitung ulang setiap kali pengguna memintanya, terlepas dari apakah hasil permintaannya sama. Pada saat yang sama, PHP mengkompilasi skrip setiap saat. Kelebihan beban seperti itu tentu tidak tertahankan bagi situs web dengan lalu lintas tinggi. Untungnya, hasil Web dapat di-cache tanpa perlu menjalankan ulang dan mengkompilasi skrip. Produk komersial seperti ZendCache atau Alternate PHP Cache yang open source menyediakan cara untuk mengkompilasi skrip PHP ke dalam kode byte dan menyimpannya dalam cache.
Paket buffering PEAR menyediakan kerangka kerja untuk buffering konten dinamis, query database, dan pemanggilan fungsi PHP.
Sama seperti Perl yang memiliki CPAN dan TeX memiliki CTAN, PHP juga memiliki perpustakaan sumber daya pusatnya sendiri untuk menyimpan kelas, perpustakaan, dan modul. Perpustakaan ini disebut PEAR (Ekstensi PHP dan Repositori Add-On).
Artikel ini mengasumsikan bahwa Anda telah menginstal lingkungan PEAR. Jika belum, Anda dapat mendownloadnya dari situs web PHP. Paket buffer PEAR berisi kelas buffer keseluruhan dan beberapa subkelas khusus. Kelas buffer menggunakan kelas kontainer untuk menyimpan dan mengelola data yang di-buffer.
Berikut ini adalah container yang saat ini terdapat dalam buffer PEAR, dan parameternya masing-masing:
file — Penampung file menyimpan data yang di-buffer dalam sistem file dan merupakan penampung tercepat.
cache_dir — Ini adalah direktori tempat container menyimpan file.
filename_prefix — Awalan file yang di-cache, misalnya: "cache_".
shm — Kontainer shm menempatkan data yang di-buffer ke dalam memori bersama. Tolok ukur menunjukkan bahwa dengan implementasi saat ini, kontainer ini lebih lambat dibandingkan kontainer file.
shm_key — Kunci yang digunakan oleh memori bersama.
shm_perm — Izin untuk menggunakan segmen data memori bersama.
shm_size — ukuran memori bersama yang dialokasikan.
sem_key — Nilai kunci semaphore.
sem_perm — Izin untuk semaphore.
db — lapisan abstraksi database PEAR.
dsn — DSN koneksi database. Anda dapat merujuk ke dokumentasi DB PEAR.
cache_table — Nama tabel.
phplib — Kontainer phplib menggunakan lapisan abstraksi database untuk menyimpan buffer.
db_kelas
db_file
db_path
file_lokal
jalur_lokal
ext/dbx - ekstensi lapisan abstraksi database PHP. Jika Anda ingin menyimpan buffer dalam database, Anda dapat menggunakan container ini.
modul
tuan rumah
db
nama belakang
kata sandi
cache_table
gigih
Peningkatan kinerja yang diperoleh dengan menggunakan PEAR Cache tergantung pada wadah buffer yang Anda pilih. Misalnya, tidak ada gunanya menyimpan kembali hasil database di cache database.
Modul buffer fungsi PEAR Cache dapat melakukan buffering terhadap hasil fungsi atau metode apa pun, baik itu fungsi bawaan PHP atau fungsi yang ditentukan pengguna. Modul ini menggunakan wadah file secara default dan menempatkan data yang di-buffer ke dalam direktori bernama function_cache.
Konstruktor kelas Cache_Function dapat memiliki tiga parameter opsional:
$container: Nama wadah buffer.
$container_options: Parameter array dari wadah buffer.
$expires: Waktu (dalam detik) objek buffer berakhir.
Ketika pemanggilan fungsi normal menggunakan metode call() dari kelas Cache_Function, buffering dapat dipicu. Memanggil call() itu mudah, satu argumen adalah nama fungsi, lalu argumen fungsi, argumen kedua adalah fungsi pertama yang dipanggil, dan seterusnya, mari kita lihat contohnya:
Contoh 1 Memanggil fungsi dan metode buffer
//Panggil fungsi buffer PEAR Cache.
require_once 'Cache/Fungsi.php';
// Tentukan beberapa kelas dan fungsi.
kelas foo {
bilah fungsi($tes) {
gema "foo::bar($tes)
";
}
}
bilah kelas {
fungsi foobar($objek) {
gema '$'.$objek.'->foobar('.$objek.')
';
}
}
$bar = bilah baru;
fungsi foobar() {
gema 'foobar()';
}
// Dapatkan objek Cache_Function
$cache = Cache_Function baru();
// Buffer fungsi statis bar() dari kelas foo (foo::bar()).
$cache->panggilan('foo::bar', 'tes');
// $bar->foobar()
$cache->panggilan('bar->foobar', 'bar');
$cache->panggilan('foobar');
?>
Di bawah ini kami menggunakan Cache_Output untuk buffering output:
Contoh 2 Keluaran skrip buffering
//Muat buffer keluaran PEAR Cache
require_once 'Cache/Output.php';
$cache = new Cache_Output('file', array('cache_dir' => '.') );
// Hitung tanda halaman yang akan di-buffer, kami berasumsi bahwa buffering halaman bergantung pada
// URL, HTTP GET dan variabel POST dan cookie.
$cache_id = $cache->generateID(
larik('url' => $REQUEST_URI, '
posting' => $HTTP_POST_VARS, 'cookie' => $HTTP_COOKIE_VARS) );
// Penyangga kueri
if ($konten = $cache->mulai($cache_id)) {
//penyangga menyerang
gema $konten;
mati();
}
//buffer hilang
// -- Sisipkan konten di sini untuk menghasilkan kode --
// Simpan halaman di buffer
echo $cache->akhir();
?>
Dengan menggunakan kelas Cache_Output, mudah untuk mengubah aplikasi situs web berbasis database dinamis menjadi aplikasi statis, sehingga sangat meningkatkan kinerja situs. Semakin banyak situs yang menggunakan GZIP untuk mengompresi konten HTML, yang mengurangi konsumsi bandwidth server dan juga dapat memberikan banyak manfaat bagi pengguna yang menggunakan Modem untuk mengakses Internet.
Cache_OutputCompression memperluas fungsionalitas kelas Cache_Output. Ini menyangga konten HTML terkompresi GZIP, sehingga menghemat waktu kompresi CPU.