0 follower

Penyesuaian Performansi

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.

1. Menghidupkan Ekstensi APC

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.

2. Mematikan Mode Debug

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.

3. Menggunakan 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.

4. Menggunakan Teknik Cache

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.

5. Optimasi Database

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.

6. Memperkecil File Naskah

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>
<?php echo CGoogleApi::bootstrap(); ?>
 
<?php echo CHtml::script(
    CGoogleApi::load('jquery','1.3.2') . "\n" .
    CGoogleApi::load('jquery.ajaxqueue.js') . "\n" .
    CGoogleApi::load('jquery.metadata.js')
); ?>
......
</head>