Performansi aplikasi Web dipengaruhi oleh banyak faktor. Akses database, operasi sistem file, bandwidth jaringan adalah faktor pengaruh potensial. Yii sudah mencoba di setiap aspek guna mengurangi akibat performansi yang disebabkan oleh framework. Akan tetapi, masih ada banyak tempat dalam aplikasi pengguna yang bisa ditingkatkan untuk mempercepat performansi.
Menghidupkan ekstensi PHP APC barangkali merupakan cara termudah untuk meningkatkan performansi aplikasi secara keseluruhan. ekstensi men-cache dan mengoptimasi kode menengah PHP dan menghindari waktu yang dipakai dalam penguraian naskah PHP untuk setiap permintaan yang masuk.
Mematikan mode debug adalah cara mudah lain guna meningkatkan performansi.
Aplikasi Yii yang berjalan dalam mode debug jika konstan YII_DEBUG
didefinisikan sebagai
true. Mode debug berguna selama tahap pengembangan, tapi akan mempengaruhi
performansi karena beberapa komponen menimbulkan banyak kode ekstra dalam debug mode.
Sebagai contoh, pencatat pesan bisa merekam informasi debug tambahan untuk
setiap pesan yang sedang dicatat.
yiilite.php
¶Saat ekstensi PHP APC dihidupkan,
kita dapat mengganti yii.php
dengan file bootstrap Yii yang berbeda bernama
yiilite.php
untuk lebih meningkatkan performansi aplikasi berbasis-Yii.
File yiilite.php
ada debgab setiap rilis Yii. Ini adalah hasil penggabungan
beberapa file kelas Yii yang umumnya dipakai. Baik komentar maupun pernyataan
trace dibuang dari file gabungan. Oleh karena itu, menggunakan
yiilite.php
akan mengurangi jumlah file yang disertakan dan menghindari
eksekusi pernyataan trace.
Catatan, pemakaian yiilite.php
tanpa APC sebenarnya dapata mengurangi performansi,
karena yiilite.php
berisi beberapa kelas yang tidak dipakai
dalam setiap permintaan dan akan memerlukan waktu penguraian tambahan. Juga sudah diobservasi bahwa
pemakaian yiilite.php
lebih lambat pada beberapa konfigurasi server, bahkan saat
APC dihidupkan. Cara terbaik untuk menilai apakah menggunakan yiilite.php
atau tidak
adalah dengan menjalankan benchmark menggunakan demo hello world
yang disertakan.
Seperti dijelaskan dalam seksi Caching, Yii menyediakan beberapa solusi cache yang bisa meningkatkan performansi aplikasi Web secara signifikan. Jika pembuatan beberapa data memerlukan waktu lama, kita dapat menggunakan pendekatan cache data untuk mengurangi frekuensi pembuatan data; Jika bagian halaman relatif tetap satis, kita bisa menggunakan pendekatan cache fragmen untuk mengurangi frekuensi render; Jika seluruh halaman relatif statis, kita dapat menggunakan pendekatan cache halaman untuk menghemat waktu render seluruh halaman.
Jika aplikasi menggunakan Rekaman Aktif, kita harus menghidupkan cache skema untuk menghemat waktu penguraian skema database. Ini bisa dikerjakan dengan mengkonfigurasi properti CDbConnection::schemaCachingDuration ke nilai lebih besar dari 0.
Selain teknik cache tingkat aplikasi ini, kita juga bisa menggunakan solusi cache tingkat server untuk meingkatkan performansi aplikasi. Sebenarnya, Cache APC yang kita jelaskan sebelumnya masuk ke kategori ini. Ada teknik server lain, seperti Zend Optimizer, eAccelerator, Squid, dan banyak lagi.
Pengambilan data dari database sering menjadi hambatan utama performansi dalam aplikasi Web. Meskipun menggunakan caching tetap dapat mengurangi performansi, ini tidak sepenuhnya memecahkan masalah. Ketika database berisi data yang salah dan data yang di-cache tidak benar, pengambilan besar data bisa sangat lambat tanpa desain database dan queri yang benar.
Desain indeks dengan benar dalam database. Mengindeks bisa menjadikan queri SELECT
jauh
lebih cepat, tapi dapat memperlambat queri INSERT
, UPDATE
atau DELETE
.
Untuk queri yang kompleks, direkomendasikan membuat view database daripada menerbitkan queri di dalam kode PHP dan meminta DBMS untuk menguraikannya berulang kali.
Jangan berlebihan menggunakan Rekaman Aktif. Meskipun Rekaman Aktif baik pada pemodelan data dalam gaya OOP, sebenarnya menurunkan performansi karena ia harus membuat satu atau beberapa obyek untuk mewakili setiap baris dari hasil queri. Untuk aplikasi intensif data, penggunaan DAO atau API database di tingkat lebih rendah bisa menjadi pilihan yang lebih baik.
Terakhir, gunakan LIMIT
dalam queri SELECT
Anda. Ini akan menghindari
pengambilan data berlebihan dari database dan menhabiskan alokasi memori
untuk PHP.
Halaman yang kompleks sering harus menyertakan banyak file eksternal JavaScript dan CSS. Karena setiap file akan menyebabkan lalu lintas tambahan ke server dan sebaliknya, kita harus memperkecil jumlah file naskah dengan menggabungnya ke dalam file agar lebih sedikit jumlahnya. Kita juga harus mempertimbangkan pengurangan ukuran setiap file naskah guna mengurangi waktu transmisi jaringan. Ada banyak piranti untuk membantu dua aspek ini.
Untuk halaman yang dibuat oleh Yii, kenyataannya bahwa beberapa file naskah dirender oleh komponen yang tidak ingin kita ubah (misalnya komponen inti Yii, komponen pihak ketiga). Untuk memperkecil file naskah ini, kita memerlukan dua langkah.
Catatan: Fitur
scriptMap
yang dijelaskan berikut ini sudah tersedia sejak versi 1.0.3.
Pertama, kita mendeklarasikan naskah yang diperkecil dengan mengkonfigurasi properti scriptMap pada komponen aplikasi clientScript. Ini bisa dikerjakan baik dalam konfigurasi aplikasi ataupun dalam kode. Sebagai contoh,
$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
'jquery.js'=>'/js/all.js',
'jquery.ajaxqueue.js'=>'/js/all.js',
'jquery.metadata.js'=>'/js/all.js',
......
);
Apa yang dilakukan kode di atas adalah bahwa ia memetakan file-file JavaScript ke URL /js/all.js
. Jika ada file JavaScript harus disertakan oleh beberapa komponen, Yii akan menyertakan URL (sekali) daripada file naskah secara individual.
Kedua, kita perlu menggunakan beberapa piranti untuk menggabung (dan mungkin memadatkan) file JavaScript ke dalam satu file dan menyimpannya sebagai js/all.js
.
Trik yang sama juga berlaku untuk file CSS.
Kita juga dapat meningkatkan kecepatan pengambilan halaman dengan bantuan Google AJAX Libraries API. Sebagai contoh, kita dapata menyertakan jquery.js
dari server Google daripada server kita sendiri. Untuk melakukannya, pertama kita mengkonfigurasi scriptMap
sebagai berikut,
$cs=Yii::app()->clientScript;
$cs->scriptMap=array(
'jquery.js'=>false,
'jquery.ajaxqueue.js'=>false,
'jquery.metadata.js'=>false,
......
);
Dengan memetakan file naskah ini menjadi false, kita melarang Yii untuk membuat kode penyertaan file-file ini. Sebaliknya, kita menulis kode berikut dalam halaman kita u8ntuk secara eksplisit menyertakan file naskah dari Google,
<head> echo CGoogleApi::bootstrap(); echo CHtml::script( CGoogleApi::load('jquery','1.3.2') . "\n" . CGoogleApi::load('jquery.ajaxqueue.js') . "\n" . CGoogleApi::load('jquery.metadata.js') ); ...... </head>
Signup or Login in order to comment.