Melakukan Profiling Dengan Zend Studio

Profiling adalah sebuah aktifitas untuk mengukur kode program, seperti waktu eksekusi sebuah function atau jumlah pemanggilan sebuah function. Dengan melakukan profiling, seorang programmer akan mengetahui bagian mana dari kode programnya yang lambat atau bagian mana yang lebih sering dipanggil. Zend Studio dilengkapi dengan profiler untuk situs PHP. Syarat untuk menggunakan profiler tersebut adalah server yang men-host aplikasi PHP harus memiliki extension Zend Debugger. Karena saya memakai Zend Server CE (versi gratis), maka Zend Debugger sudah ter-install dan aktif.

Untuk melakukan profiling dari Zend Studio, saya dapat men-klik kanan sebuah halaman PHP, lalu memilih Profile As, PHP Web Application. Sebagai alternatif lainnya, saya dapat memilih menu Run, Profile URL dan memasukkan URL yang merujuk ke halaman PHP yang akan diperiksa. Selain itu, bila saya men-install Zend Studio Toolbar di browser, maka saya dapat langsung men-klik tombol Profile saat mengunjungi sebuah halaman PHP seperti yang terlihat pada gambar berikut ini:

Melakukan profiling dari browser

Melakukan profiling dari browser

Setelah itu, Zend Studio akan menampilkan konfirmasi untuk beralih ke PHH Profile perspective. Bagi yang belum terbiasa dengan Eclipse, sebuah perspective adalah kumpulan beberapa window dengan lokasi tertentu yang biasanya dipakai untuk keperluan tertentu. Perspective yang biasa dipakai untuk mengembangkan kode program adalah PHP perspective. Untuk melakukan debugging, terdapat Debug perspective. Pengguna dapat berganti perspective dengan men-klik icon perspective yang diinginkan di sisi kanan atas Eclipse, atau memilih menu Window, Open Perspective. Bagi yang terbiasa dengan produk Adobe, perspective di Eclipse mirip seperti workspace di Adobe. Sebagai contoh, pada Adobe Photoshop CS5, saya dapat memilih workspace seperti Essentials, Design, Painting, 3D dan sebagainya. Jadi, jangan lupa bila ingin kembali coding, ganti perspective dari PHP Profile persepective menjadi PHP perspective.

Pada Profile Information, saya dapat menemukan grafis pie yang menunjukkan waktu eksekusi kode program, seperti yang terlihat pada gambar berikut ini:

Diagram pie untuk waktu ekseksusi

Diagram pie untuk waktu ekseksusi

Kode program yang saya profile adalah sebuah halaman PHP sederhana yang mengambil data dari database dan menampilkannya pada view dengan menggunakan Twig. Grafis di atas memperlihatkan bahwa Autoloader.php (untuk loading class yang dibutuhkan Twig) dan Database.php (melakukan query database) membutuhkan waktu paling lama.

Saya dapat menemukan informasi lebih detail di Execution Statistics seperti yang terlihat pada gambar berikut ini:

Tabel untuk execution statistics

Tabel untuk execution statistics

Sebagai contoh, gambar di atas memperlihatkan bahwa function autoload() di Autoloader.php dikerjakan sebanyak 70 kali. Saya dapat melihat informasi lebih detail lagi dengan men-klik kanan function tersebut dan memilih Open function invocation statistics. Zend Studio profiler akan menampilkan informasi seperti yang terlihat pada gambar berikut ini:

Tabel untuk invocation statistics

Tabel untuk invocation statistics

Bagian Selected function is invoked by: pada tab Function Invocation Statistics akan memperlihatkan siapa saja yang mengerjakan function autoload(). Sebagai informasi, ini adalah fungsi yang akan dikerjakan setiap kali terdapat penggunaan sebuah class baru yang belum dikenali. autoload() bertugas men-include file yang mewakili deklarasi class tersebut. Saya dapat memperoleh informasi lebih lanjut class apa saja yang dibuat dengan memeriksa bagian Selected function invokes: seperti yang terlihat pada gambar berikut ini:

Tabel untuk invoke statistics

Tabel untuk invoke statistics

Pada tab Execution Flow, saya dapat melihat statistik function dimana setiap function diurutkan berdasarkan urutan eksekusi, seperti yang terlihat pada gambar berikut ini:

Tabel untuk execution flow

Tabel untuk execution flow

Iklan

Apa itu Zend Optimizer+ Di Zend Server?

Sebuah fakta yang tidak dapat dipungkiri adalah PHP kalah dari Java dalam hal kinerja bila dilihat dari sisi arsitektur kedua teknologi tersebut. Tapi beberapa mahasiswa yang baru belajar tampaknya sulit menerima fakta ini. Beberapa dari mereka yang kritis akan bertanya seperti “Startup server Java lebih lama dibanding PHP, kenapa Java bisa lebih kencang?” atau “Bukankah Java butuh lebih banyak memori dibanding PHP?” Apa yang mereka ungkapkan memang benar, tapi saat request dari pengguna web diproses, server berbasis Java memiliki peluang besar untuk menghasilkan respon lebih cepat. Mengapa demikian?

Alasan pertama, kode program Java di-compile terlebih dahulu menjadi bytecode (file class) oleh programmer-nya. Apa yang di-deploy ke server Java adalah hasil kompilasi (file class) dalam bentuk file jar, bukan kode program Java! Dengan demikian, server dapat langsung menjalankannya. Lalu bagaimana dengan PHP? Tidak ada compiler PHP yang perlu dipanggil oleh programmer PHP!! Programmer PHP langsung men-deploy aplikasi web dalam bentuk kode program PHP (file PHP). Oleh sebab itu, saat sebuah halaman PHP dibuka, maka kode program di file PHP tersebut perlu di-parse dan di-compile ke dalam bytecode sebelum bisa di-eksekusi oleh CPU.

Alasan kedua, server Java adalah sebuah container dimana seluruh objek yang masih berguna tetap ‘hidup’ dan dipakai lagi oleh objek lainnya. Berbeda dengan Java, file PHP akan kembali dikerjakan pada saat request diberikan dan setelah selesai dikerjakan, semuanya ‘lenyap’. Sebagai contoh, perhatikan kode program berikut ini:

<?php
class Counter {             
    public static $counter;     
}

print "Counter: " . ++Counter::$counter;    
?>

Keyword static menunjukkan bahwa property counter dapat diakses kapan saja selama class Counter ada. Bila saya menjalankan kode program PHP di atas berkali-kali, nilai $counter akan selalu 1. Hal ini karena setiap kali saya membuka halaman PHP tersebut, class Counter baru akan tercipta dan setelah mencapai akhir eksekusi, class Counter tersebut akan musnah. Satu-satunya cara untuk mempertahankan nilai adalah memakai session, teknologi caching seperti Memcache, atau menyimpan nilai ke database. Perilaku ini berbeda dengan Java: class Counter akan selalu ada di memori dan nilai counter tetap dapat diakses setiap saat (termasuk dari request berbeda). Sebagai konsekuensinya, server Java membutuhkan lebih banyak memori guna menampung object yang masih ‘hidup’.

Alasan ketiga, JVM yang dipakai untuk server Java biasanya memiliki fasilitas Just In Time (JIT) code generation. Saat bytecode Java di-eksekusi pertama kali, JIT akan melakukan analisa dan bila perlu akan mengubah bytecode tersebut menjadi instruksi mesin (native) yang dapat langsung dikerjakan oleh CPU. Hal ini menyebabkan lambatnya eksekusi bytecode untuk pertama kali, tetapi eksekusi selanjutnya menjadi jauh lebih cepat (setara dengan bahasa native di platform tersebut). PHP tidak memiliki fasilitas seperti ini. Untuk itu, Facebook mengembangkan HipHop Virtual Machine (HHVM) yang merupakan sebuah execution engine untuk PHP. HHVM adalah proyek open source yang dapat dilihat di https://github.com/facebook/hhvm dan telah dipakai oleh situs facebook.com sejak awal tahun 2013. HHVM memiliki JIT code generation. Facebook telah menciptakan ‘PHP virtual machine’ yang dapat dibandingkan dengan Java Virtual Machine (JVM)! Tapi ini adalah contoh kasus tidak lazim. Kebanyakan fans awam menggunakan PHP ‘biasa’ (Zend Engine) seperti pada konfigurasi XAMPP ūüėČ

Jadi, PHP akan selalu men-parse dan men-compile file PHP setiap kali ia dipanggil. Bila file PHP tersebut men-include file lainnya, maka file lain tersebut juga perlu di-parse dan di-compile. Bila saya memakai framework (seperti Zend Framework dan Symphony), kemungkinan akan ada banyak file yang harus di-include. Ini belum lagi ditambah fakta bahwa proses parsing dan kompilasi ke bytecode akan dikerjakan kembali setiap kali halaman diakses pengguna!!

Salah satu cara untuk menghindari hal tersebut adalah dengan memakai teknologi caching (sering juga disebut sebagai PHP accelerator) seperti Alternative PHP Cache (APC) dan Zend Optimizer+. Karena saya menggunakan Zend Server 6.2.0, saya sudah memperoleh fasilitas Zend Optimizer+. Sebagai informasi, Zend Optimizer+ sudah terintegrasi pada PHP 5.5 sehingga tidak perlu di-install secara terpisah lagi. Ia mengalami perubahan nama menjadi OPcache dimana informasi lebih lanjut dapat ditemukan di http://www.php.net/manual/en/intro.opcache.php.

Zend Optimizer+ akan menampung hasil kompilasi file PHP dalam bentuk bytecode di memori. Bila selanjutnya ada request ke file PHP tersebut, Zend Optimizer+ akan langsung mengerjakan bytecode yang sudah ada di memori tanpa harus melalui proses parsing dan kompilasi lagi.

Untuk memeriksa apakah Zend Optimizer+ sudah diaktifkan, saya akan masuk ke dashboard Zend Server dengan membuka URL http://localhost:10081. Setelah memilih menu Configurations, Components, saya akan menemukan status loaded di Zend Optimizer+ seperti yang terlihat pada gambar berikut ini:

Melihat status Zend Optimizer+ di Zend Server

Melihat status Zend Optimizer+ di Zend Server

Pada halaman ini, saya juga dapat melakukan pengaturan lebih lanjut untuk Zend Optimizer+ dengan men-klik panan bawah di ujung kanan komponen tersebut, seperti yang terlihat pada gambar berikut ini:

Pengaturan Zend Optimizer+ di Zend Server

Pengaturan Zend Optimizer+ di Zend Server

Zend Optimizer+ akan bekerja secara transparan tanpa campur tangan pengguna. Namun, ia menyediakan API accelerator_reset() dan accelerator_get_status() yang dapat dipakai di kode program untuk melakukan reset dan memantau statistik. Sebagai contoh, berikut ini adalah kode program PHP yang menampilkan statistik untuk Zend Optimizer+:

<html>
<body>
<?php
    $stats = accelerator_get_status();

    print "<h3>Penggunaan Memori Untuk Zend Optimizer+</h3>";
    $memoriDipakai = round($stats['memory_usage']['used_memory'] / 1024 / 1024);
    $memoriBebas = round($stats['memory_usage']['free_memory'] / 1024 / 1024);
    $memoriWasted = round($stats['memory_usage']['wasted_memory'] / 1024 / 1024);
    $persenWasted = round($stats['memory_usage']['current_wasted_percentage'], 2);
    print "<p>Memori yang dipakai = $memoriDipakai MB</p>";
    print "<p>Memori yang invalid = $memoriWasted MB ($persenWasted %)</p>";
    print "<p>Memori bebas = $memoriBebas MB</p>";

    print "<h3>Statistik</h3>";
    print "<p>Jumlah script yang di-cache: {$stats['accelerator_statistics']['num_cached_scripts']}</p>";
    print "<p>Jumlah script yang dapat ditampung: {$stats['accelerator_statistics']['max_cached_scripts']}</p>";
    print "<p>Jumlah hit (cache yang dipakai): {$stats['accelerator_statistics']['hits']}</p>";
    print "<p>Jumlah miss (tidak ada dalam cache): {$stats['accelerator_statistics']['misses']}</p>";
    $hitRate = round($stats['accelerator_statistics']['accelerator_hit_rate'], 2);
    print "<p>Hit rate: $hitRate %</p>";
?>

</body>
</html>

Saat menjalankan file PHP di atas, saya akan memperoleh output seperti:

Penggunaan Memori Untuk Zend Optimizer+

Memori yang dipakai = 14 MB

Memori yang invalid = 0 MB (0 %)

Memori bebas = 50 MB

Statistik

Jumlah script yang di-cache: 622

Jumlah script yang dapat ditampung: 3907

Jumlah hit (cache yang dipakai): 18440

Jumlah miss (tidak ada dalam cache): 628

Hit rate: 96.71 %

Pada konfigurasi default, Zend Optimizer+ akan menggunakan memori sebesar 64 MB untuk menampung bytecode hasil kompilasi. Saya dapat mengubah nilai zend_optimizerplus.memory_consumption untuk meningkatkan jumlah memori yang dipakai bila perlu. Nilai hit rate menunjukkan indikator kinerja Zend Optimizer+, dimana nilai yang tinggi merupakan indikator kinerja yang baik.

Saya akan mencoba melihat peningkatkan kinerja yang diberikan oleh Zend Optimizer+ dengan mensimulasikan request dari 100 pengguna dimana masing-masing pengguna memberikan 10 request ke sebuah controller yang akan menampilkan sebuah view dengan memakai Twig. Seperti biasa, saya akan menggunakan Apache JMeter untuk mengukur waktu respon dari Zend Server. Tanpa Zend Optimizer+, saya memperoleh hasil seperti pada gambar berikut ini ini:

Hasil grafis tanpa Zend Optimizer+

Hasil grafis tanpa Zend Optimizer+

Hasil summary report terlihat seperti pada gambar berikut ini:

Hasil summary tanpa Zend Optimizer+

Hasil summary tanpa Zend Optimizer+

Kemudian, saya menjalankan ulang pengujian yang sama, tetapi kali ini dengan mengaktifkan Zend Optimizer+. Hasil grafis dari JMeter yang saya peroleh adalah:

Hasil grafis dengan Zend Optimizer+

Hasil grafis dengan Zend Optimizer+

Hasil summary report kali ini terlihat seperti pada gambar berikut ini:

Hasil summary dengan Zend Optimizer+

Hasil summary dengan Zend Optimizer+

Bila saya membandingkan nilai throughput kedua hasil di atas, saya akan menemukan selisih yang cukup jauh. Mengaktifkan Zend Optimizer+ meningkatkan throughput dari 11,3/sec menjadi 41,6/sec. Peningkatkan yang dicapai hampir mendekati 4 kali lipat. Tentunya peningkatan kinerja akan lebih terasa lagi bila terdapat semakin banyak file yang di-include (seperti saat memakai framework atau CMS).

Mendeploy Aplikasi PHP Dari Zend Studio Ke Zend Server

Zend Server adalah server untuk PHP yang dilengkapi fitur enterprise. Walaupun server tersebut berbayar, terdapat versi community edition dengan fitur sangat terbatas. Pada kesempatan ini, saya akan memakai beberapa fasilitas yang tidak tersedia di versi community edition. Zend Studio adalah sebuah IDE berbasis Eclipse (yup! programmer Java pasti familiar dengan yang satu ini!) yang merupakan salah satu IDE terbaik untuk memakai Zend Framework + Zend Server. Namun sayangnya, Zend Studio bukanlah sebuah aplikasi gratis.

Saat membuat sebuah proyek baru, programmer PHP yang masih pemula cenderung langsung meletakkan proyek ke lokasi htdocs di HTTP server. Ini berarti seluruh yang ada di folder proyek adalah segala sesuatunya yang dapat diakses oleh pengguna web. Padahal, sebuah proyek biasanya memiliki metadata berupa file-file pendukung yang tidak untuk didistribusikan atau diakses oleh pengguna. Sebagai contoh, saya kerap meletakkan file seperti diagram UML, dokumentasi (dalam bentuk file Microsoft Word), script SQL, dan sebagainya ke dalam folder proyek. Selain itu, bila saya memakai Git, ada folder tersembunyi seperti .git yang tidak dibutuhkan pengguna. Saya tidak ingin file tersebut dipindahkan ke HTTP server. Walaupun saya dapat menyembunyikan mereka melalui konfigurasi di server HTTP, bukankah lebih baik hal2 yang tidak berhubungan dengan output sama sekali tidak disimpan di server?

Sebagai contoh, saya akan membuat sebuah proyek baru dengan memilih menu File, New, Local PHP Project. Saya akan memilih sebuah lokasi direktori penyimpanan yang bukan merupakan lokasi htdocs, misalnya di folder dokumen, seperti yang terlihat pada gambar berikut ini:

Meletakkan proyek di luar server HTTP

Meletakkan proyek di luar server HTTP

Setelah itu, saya men-klik tombol Next. Pada langkah ini, saya memilih Launch with Zend Application Deployment. Zend Studio secara otomatis akan mendeteksi Zend Server di komputer yang sama. Oleh sebab itu, pilihan http://localhost:10081 (Id:0) secara otomatis sudah ada. Saya hanya perlu men-klik tombol Finish.

Struktur proyek yang dihasilkan akan terlihat seperti berikut ini:

Struktur proyek yang dihasilkan

Struktur proyek yang dihasilkan

File deployment.xml mendefinisikan informasi mengenai proyek yang baru saya buat. Sebagai informasi, bila saya men-double click file ini, kemudian memilih tab Package (di bagian bawah), saya dapat menentukan file apa yang akan di-deploy di server nanti, seperti yang terlihat pada gambar berikut ini:

Menentukan apa yang akan di-deploy

Menentukan apa yang akan di-deploy

Pada gambar di atas, walaupun ada tiga file di proyek saya, hanya file index.php yang akan dipindahkan ke server nanti.

Bagaimana cara menjalankan proyek? Saya dapat men-klik icon Launch Application di kanan atas tab Package seperti yang terlihat pada gambar berikut ini:

Menjalankan aplikasi web

Menjalankan aplikasi web

Akan muncul dialog seperti yang terlihat pada gambar berikut ini:

Konfigurasi deployment

Konfigurasi deployment

Saya hanya perlu men-klik tombol Finish. Zend Studio akan men-deploy aplikasi dan kemudian menampilkan index.php seperti yang terlihat pada gambar berikut ini:

Tampilan output

Tampilan output

Sekarang, saya akan membuka halaman konfigurasi Zend Server di browser melalui URL http://localhost:10081. Setelah mengisi user name dan password, saya memilih menu Applications, Apps. Disana saya akan menemukan proyek saya sudah terdaftar seperti yang terlihat pada gambar berikut ini:

Konfigurasi aplikasi di Zend Server

Konfigurasi aplikasi di Zend Server

Lalu sebenarnya, web di proyek saya di-copy kemana? Saya dapat menemukannya di lokasi instalasi Zend Server seperti yang terlihat di gambar berikut ini:

Lokasi deployment di Zend Server

Lokasi deployment di Zend Server

Perbandingan Web Service SOAP antara Java EE vs PHP

Pada artikel Membuat Web Service SOAP dengan PHP Dan Memanggilnya Di Client Java, saya membuat web service dengan menggunakan PHP di  Zend Server Developer Edition.

Pada artikel Memanggil web service dari server Java EE di client PHP, saya membuat web service dengan menggunakan Java EE di GlashFish.

Kedua artikel tersebut membuat sebuah operasi yang sama sederhananya, yaitu operasi penjumlahan. ¬† Hal ini menimbulkan sebuah rasa penasaran, mana yang lebih ‘baik‘ diantara keduanya? ¬†Pengertian lebih ‘baik‘ disini bisa menjadi rancu bila tidak didefinisikan dengan jelas, apakah mengacu pada kecepatan, konsumsi sumber daya, stabilitas, kemudahan pengembangan atau yang lainnya? ¬†Selain itu, walaupun terlihat seperti membandingkan Java dan PHP, tetapi banyak faktor lain yang terlibat, seperti sumber daya (CPU & memori) di komputer pengujian dan server (web server & application server) yang dipakai. ¬† Misalnya, pada server produksi, banyak yang memakai PHP bersama dengan server NGIX yang cepat, sementara pada dunia akademis & pembelajaran, banyak yang lebih suka memakai PHP bersamaan dengan Apache HTTP Server (XAMPP, misalnya).

Untuk melakukan perbandingan, saya akan memakai Apache JMeter (http://jmeter.apache.org/).  Test plan yang saya buat dapat dilihat pada gambar berikut ini:

Test Plan JMeter

Test Plan JMeter

Pada konfigurasi tersebut saya membuat dua thread group yang berbeda, untuk pengujian PHP dan untuk pengujian Java.  Setiap thread group memiliki sebuah sampler yang sama yaitu WebService (SOAP) Request.  Walaupun mengakses server yang berbeda, kedua sampler tersebut akan mengirimkan SOAP Request yang sama, yaitu:

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header/>
  <S:Body>
    <ns2:tambah xmlns:ns2="http://webservice.jocki.id.co/">
      <angka1>12</angka1>
      <angka2>12</angka2>
    </ns2:tambah>
  </S:Body>
</S:Envelope>

Agar tidak membebani kedua server, saya menambahkan sebuah constant timer dengan delay sebesar 100 ms pada setiap thread group, sehingga akan ada delay sebelum setiap request dikerjakan.

Saya akan  mulai dengan mensimulasikan 1 user yang melakukan 500 kali setiap request di setiap thread group.  Agar lebih akurat, saya mencoba pengujian yang sama sebanyak tiga kali.  Hasilnya adalah:

1 user thread 500 request – Pengujian 1
Label #Samples Average Min Max Std.Dev. Throughput KB/sec
WebService Java Request 500 5 3 742 33,16 9,0/sec 0,77
WebService PHP Request 500 34 25 2288 101,05 7,5/sec 0,64

1 user thread 500 request – Pengujian 2
Label #Samples Average Min Max Std.Dev. Throughput KB/sec
WebService Java Request 500 3 2 10 0,71 9,2/sec 0,78
WebService PHP Request 500 27 25 60 4,54 7,9/sec 0,67

1 user thread 500 request – Pengujian 3
Label #Samples Average Min Max Std.Dev. Throughput KB/sec
WebService Java Request 500 3 2 8 0,61 9,2/sec 0,78
WebService PHP Request 500 26 24 58 4,56 8,0/sec 0,68

Hasil percobaan ini menunjukkan bahwa server GlassFish (Java)  memiliki kecepatan yang lebih stabil bila dibandingkan dengan Zend Server Developer Edition (PHP).  Hal ini bisa dilihat dari nilai standard deviation.  Semakin kecil nilainya menunjukkan bahwa variasi kecepatan semakin sedikit (sampel yang ada semakin mendekati nilai rata-rata/average, tidak banyak yang melenceng jauh).  Selain itu, GlassFish memiliki transaksi per detik (TPS) atau throughput yang lebih besar dibanding Zend Server Developer Edition.

Pada percobaan berikutnya, saya akan mencoba mensimulasikan 2 user  yang mencoba mengakses server secara hampir bersamaan (concurrent).  Hasil pengujian dapat dilihat di tabel berikut ini:

2 user thread 500 request ‚Äď Pengujian 1
Label #Samples Average Min Max Std.Dev. Throughput KB/sec
WebService Java Request 1000 5 3 661 21,20 17,9/sec 1,52
WebService PHP Request 1000 43 25 6048 250,76 13,6/sec 1,16

2 user thread 500 request – Pengujian 2
Label #Samples Average Min Max Std.Dev. Throughput KB/sec
WebService Java Request 1000 3 2 27 2,53 17,9/sec 1,53
WebService PHP Request 1000 30 25 59 5,49 14,9/sec 1,27

2 user thread 500 request – Pengujian 3
Label #Samples Average Min Max Std.Dev. Throughput KB/sec
WebService Java Request 1000 3 2 29 2,69 17,9/sec 1,52
WebService PHP Request 1000 30 25 71 4,97 15,0/sec 1,27

Hasil ini tidak berbeda jauh dengan pengujian sebelumnya dimana GlassFish (Java) memiliki nilai stabilitas dan throughput yang lebih besar dibanding dengan Zend Server Developer Edition (PHP).

Memakai PHP Zend Studio 9

Zend Studio 9 adalah sebuah IDE untuk pengembangan aplikasi PHP.  Zend Studio 9 dibuat berdasarkan Eclipse Platform, sehingga bagi yang telah terbiasa menggunakan Eclipse, akan terasa sangat familiar sekali.  Pada artikel ini, saya akan menuliskan beberapa fitur yang saya temui di Zend Studio 9.

Kesan pertama: Zend Studio 9 sangat cocok bila dipadukan dengan Zend Server karena Zend Studio 9 mendukung Zend Application Deployment.¬† Pada kebanyakan IDE, misalnya Macromedia Dreamweaver, programmer menentukan lokasi penyimpan di web server (seperti htdocs) kemudian pada saat aplikasi akan dijalankan, IDE akan memanggil browser dengan URL tertentu.¬† Metode ini disebut sebagai “Launch URL” di Zend Studio 9.¬† Metode lainnya adalah “Launch with Zend Application Deployment“.¬† Pemilihan metode dapat dilakukan pada saat membuat proyek baru, seperti yang ditunjukkan di screenshot berikut:

Pilihan Launch Settings Saat Membuat Proyek Baru

Pilihan Launch Settings Saat Membuat Proyek Baru

Apa itu Zend Application Deployment?  Bila memilih opsi ini, maka Zend Studio 9 akan membuat sebuah file deployment.xml berisi informasi proyek.  Pada file ini, pengguna bisa menentukan ketergantungan proyek (dependency), mengatur script yang akan dikerjakan pada saat proses deployment (triggers), dan menentukan apa saja file yang akan di-upload ke server nantinya (package).

Perbedaan yang paling mencolok dengan metode konvensional adalah kita boleh menentukan lokasi proyek kita dimana saja.  Yup! Dimana saja, tidak harus di htdocs!!!  Lalu bagaimana web server bisa tahu lokasi file kita?  Zend Studio 9 akan menghasilkan sebuah file zpk yang isinya adalah proyek kita.  Lalu dengan metode Zend Application Deployment, Zend Studio 9 secara otomatis akan men-deploy file zpk tersebut.

Sayang sekali, Zend Server Community Edition (CE) yang gratis tidak mendukung deployment seperti ini.  Padahal deployment file zpk ini akan sangat berguna sekali bila kita sering memindahkan proyek dari satu server ke server lainnya.  Sebagai perbandingan, hampir semua Java Enterprise Edition (JEE) containers yang gratis telah mendukung file WAR dan/atau EAR yang fungsinya hampir sama seperti file ZPK.

Pada saat menulis kode program, Zend Studio 9 menawarkan fitur-fitur yang berguna, misalnya sebuah popup bantuan yang berisi dokumentasi seperti yang terlihat di gambar berikut:

Code Hint Di Zend Studio 9

Code Hint Di Zend Studio 9

Zend Studio 9 juga dapat menghasilkan tags  PHPDoc secara otomatis untuk sebuah function.  Sebagai contoh, bila saya memiliki function seperti ini:

function tambah($a, $b) {
}

Lalu, jika saya menuliskan /** tepat di atas deklarasi function tersebut dan menekan tombol Enter, maka Zend Studio 9 akan menambahkan PHPDoc seperti berikut ini secara otomatis:

/**
 *
 * @param unknown_type $a
 * @param unknown_type $b
 */
 function tambah($a, $b) {
 }

Fasilitas ini sangat mirip seperti yang ditawarkan Eclipse JDT untuk Javadoc.

Untuk pengembangan aplikasi PHP dengan Zend Framework, Zend Studio 9 menyediakan sebuah Zend Framework Perspective (dapat dipilih di menu Window, Open Perspective) untuk mempermudah pengembangan proyek.  Pada perspective ini, terdapat MVC Outline View yang mempermudah navigasi file di proyek karena proyek secara otomatis telah dikategorikan ke dalam controller, model dan view, seperti yang terlihat pada gambar berikut:

MVC Outline View

MVC Outline View

Sebagai penutup, saya ingin menunjukkan sebuah fasilitas yang menarik di Zend Studio 9 yaitu Profiler.  Yup, Zend Studio 9 telah menyertakan sebuah Profiler untuk mengukur kinerja setiap kode PHP di proyek kita.  Untuk menjalankan profiler, pilih menu Run, Profile.  Setelah proses selesai, kita dapat berpindah ke PHP Profile Perspective, dimana kita bisa memperoleh sebuah Time division pie chart seperti yang terlihat pada gambar:

Profiler Information

Profiler Information

Selain itu, kita juga bisa dapat memperoleh informasi statistik dalam bentuk tabel, seperti yang diperlihatkan di gambar berikut:

Execution Statistics

Execution Statistics

Masih ada fitur Zend Studio 9 yang belum saya tulis di artikel ini mengingat keterbatasan halaman, seperti fasilitas debugging dan dukungan PHPUnit.