Melihat kelemahan tersebut diperlukan penelitian untuk membangun sebuah framework berbasis MVC guna memperbaiki kedua framework tersebut. Perbaikan yang dilakukan adalah merancang pola desain (design pattern) yang lebih sederhana sehingga menghasilkan kode program yang lebih efisien dibandingkan dengan kedua framework yang sudah ada tersebut. Dengan optimasi ini tentunya waktu komputasi aplikasi web dapat ditingkatkan sehingga beban kerja server web dapat diturunkan. Perbaikan yang lain adalah untuk operasi database disediakan metode PDO seperti Obullo dan metode klasik seperti Codeigniter, sehingga operasi database lebih flesibel tidak terkendala oleh batasan-batasan layanan web hosting.
Penelitian ini menghasilkan sebuah framework PHP yang selanjutnya dinamakan Becak MVC framework. Framework ini dilengkapi dengan operasi database PHP Data Object (PDO) dan operasi database klasik. Dari hasil uji coba Becak framework memiliki waktu komputasi lebih cepat rata-rata 0,0058 detik dibandingkan dengan Obullo dan lebih cepat rata-rata 0,0091 detik dibandingkan dengan CodeIgniter. Penggunaan sumber daya (resource) memory Becak framework membutuhkan 0,79 MB, Obullo membutuhkan 1,48 MB dan CodeIgniter membutuhkan 1,58 MB.
Keywords: Framework MVC, design pattern, operasi database PHP, Becak MVC Framework
1. PENDAHULUAN
Guna mempermudah dalam pengembangan aplikasi web yang berbasis Object Oriented Programming (OOP), saat ini banyak digunakan framework (kerangka kerja) Model-View Controller (MVC). Dengan menggunakan framework MVC, aplikasi web yang dihasilkan akan lebih sistematis dan reusable. Beberapa contoh aplikasi web yang memanfaatkan framework MVC adalah Content Management System (CMS) weblog, e-commerce, e-government dan lain sebagainya.
Sebenarnya ada banyak pilihan dalam penggunaan framework MVC mengingat saat ini banyak sekali ditemukan framework MVC yang dapat digunakan secara cuma-cuma dan open source. Salah satu contoh adalah framework CodeIgniter. Dari beberapa hasil pooling dan survey, framework CodeIgniter adalah salah satu framework MVC masuk dalam kategori 10 besar paling banyak digunakan pengembang aplikasi web. Namun framework ini ternyata masih ada kelemahannya salah satunya adalah tidak mendukung multi koneksi database dan design pattern (pola desain) framework masih terlalu rumit dan belum mendukung konsep Object Oriented Programming (OOP) secara penuh(Güvenç, 2010). Sudah ada framework lain yang mencoba memperbaiki framework CodeIgniter ini. Framework tersebut adalah Obullo versi release candidate 1 (Güvenç, 2010). Framework Obullo ini didesain mendukung PHP versi 5, dilengkapi dengan multi koneksi database yang memanfaatkan PHP data Object (PDO), serta dilengkapi dengan teknik pemrograman modular berbasis direktori (Güvenç, 2010).
Salah satu contoh penelitian yang memanfaatkan framework Obullo adalah Content Management System (CMS) weblog desa se-Kabupaten Banyuwangi, Jawa Timur. (Susanto, 2011). Dari hasil penelitian sebelumnya didapatkan kesimpulan bahwa framework Obullo masih terdapat kelemahan yaitu pola desain (design pattern) masih terlalu rumit sehingga kode program yang dihasilkan kurang efisien. Akibat yang ditimbulkan dari kurang efisiennya penulisan kode program ini adalah waktu komputasi web server kurang optimal. Kelemahan yang lain adalah koneksi database pada framework Obullo hanya mendukung PHP Data Object (PDO), padahal kenyataanya tidak semua web hosting menyediakan modul PDO (Susanto, 2011).
Guna memperbaiki kelemahan framework Obullo dan CodeIgniter, maka kontribusi dalam penelitian ini adalah menyederhanakan design pattern (pola desain) framework dan menyediakan dua model operasi database yaitu model operasi PDO dan operasi klasik. Adapun tujuan dari penelitian ini adalah menghasilkan framework baru yang memiliki waktu komputasi lebih cepat dibandingkan framework Obullo dan CodeIgniter.
Selain menyederhanakan design pattern, ada cara lain untuk mengoptimalkan waktu komputasi web server yaitu dengan cara mengurangi penggunaan perintah include dan require file. Salah satu framework yang menerapkan konsep ini adalah Framework Panada. Pada framework Panada ini, kode program utama ditulis pada satu file sehingga perintah include dan require file dapat diminimalkan (Susman, 2010). Hal ini tentu berbeda dengan tata cara penulisan kode program pada framework Obullo dan CodeIgniter.
Dengan meminimalkan jumlah file yang disisipkan (include), tentunya akses ke disk dapat diminimalkan sehingga waktu komputasi lebih cepat (Susman, 2010). Akan tetapi cara ini tentunya kurang efisien karena kode program menjadi lebih panjang dan cenderung susah untuk dikembangkan. Oleh karena itu perlu pembuktian apakah cara ini dapat menurunkan waktu komputasi secara signifikan atau tidak.
2. LANDASAN TEORI
2.1 Model View Controller Framework
Konsep MVC ini pertama kali diperkenalkan oleh para peneliti XEROX PARC yang bekerja dalam pembuatan bahasa pemrograman Smalltalk sekitar tahun 1970-1980. Pada dasarnya MVC adalah sebuah metode untuk membuat sebuah aplikasi dengan memisahkan data (Model), tampilan (View) dan cara bagaimana memprosesnya (Controller) (Radek, 2009). Konsep MVC ini diperkenalkan dengan tujuan untuk memudahkan bagi para pengembang aplikasi web.
Seiring dengan perkembangan teknik pemrograman, sekarang ini banyak sekali aplikasi-aplikasi yang dikembangkan untuk mempermudah dalam pembuatan sebuah web site. Kemudahan yang ditawarkan oleh aplikasi tersebut biasanya sudah disediakan berbagai macam library, plugins yang siap pakai sehingga pengembang tidak perlu bersusah payah membangun aplikasi web mulai dari awal. Tentu saja pengembang tersebut harus mengikuti aturan-aturan yang sudah didefinisikan oleh pembuat framework tersebut (Radek, 2009).
2.2 Design Pattern
Design pattern (pola desan) adalah sekumpulan pengalaman dari pengembang software yang didokumentasikan dengan tujuan agar pengembang software yang lain mengimplementasikan ide-ide pengembang sebelumnya kedalam desain aplikasinya (Gamma, 1994).
Terdapat beberapa design pattern yang cocok diimplementasikan pada framework MVC seperti misalnya registry, singleton, active record, adapter, factory (Chang, 2010). 2.3 Obullo MVC Framework Obullo adalah salah satu framework yang berbasis MVC. Sama seperti framework yang lain, framework obullo ini juga menawarkan berbagai kemudahan antara lain dukungan library serta helper yang banyak. Hal yang membedakan obullo dengan framework yang lain adalah adanya optimasi pada teknik pemrogramannya. Optimasi yang dilakukan oleh pengembang framework ini adalah satu buah framework mampu mendukung banyak aplikasi. Framework ini juga mendukung modularity ditandai dengan pemisahan direktori masing-masing modul aplikasi (Güvenç, 2010). Pada implemetasinya framework Obullo terbagi menjadi empat sub system yaitu sub sistem base (dasar), database, library dan helper (Güvenç, 2010). Penjelasan dari masing-masing sub system tersebut adalah sebagai berikut :
- Sub system base berfungsi untuk penulisan fungsi-fungsi registry object, loader (pemuat) object, global controller, controller induk dan model induk.
- Sub system database berfungsi untuk melakukan operasi database mulai dari koneksi ke database, implementasi design pattern active record, database factory, database adapter serta deklarasi database driver.
- Sub system library berfungsi untuk mendeklarasikan kelas-kelas pendukung aplikasi seperti pagination, kalender, session, URI, rouring dan sebagainya.
- Sub system helper berfungsi untuk mengimplementasikan sub routine pendukung aplikasi misalnya sub routine pengolahan text, pengolahan tag HTML dan sebaginya
2.4 Operasi Database
Dalam pemrograman PHP terdapat beberapa teknik pengoperasian database. Teknik pengoperasian pertama kali dan masih dikenal oleh banyak orang sampai sekarang adalah teknik operasi database klasik. Teknik operasi database klasik ini sudah berkembang sejak pertama kali PHP muncul. Tentu saja teknik ini belum mendukung konsep OOP. Gambar 1 menjelaskan teknik pengorasian database secara klasik.
- class CI_DB_mysql_driver extends CI_DB {
- function db_connect(){
- if ($this->port != '')
- {
- $this->hostname .= ':'.$this->port;
- }
- return @mysql_connect($this->hostname, $this->username,$this->password, TRUE);
- }
- }
Gambar 1. Pseudocode Operasi Database Klasik (CodeIgniter, 2008)
Seiring dengan pesatnya penggunaan OOP, maka mulai diperkenalkan teknik
operasi database PHP Data Object (PDO), yaitu teknik pengoperasian
database yang mendukung OOP secara penuh. PDO ini mulai diperkenalkan
pada PHP versi 5 (Mandalika, 2009). Gambar 2 menjelaskan pseudocode
operasi database PDO.- <?php
- class mysql_pdo {
- public function connect() {
- if(isset($this->conn))
- return $this->conn;
- try{
- $this->conn = new PDO ("mysql:host=$server; dbname=$database", $user,$password);
- }catch(PDOException $e){
- echo __LINE__.$e->getMessage();
- }
- }
- }?>
Gambar 2.Pseudocode Operasi Database PDO (Mandalika, 2009)
Pada Gambar 1 terlihat perintah untuk melakukan koneksi ke database
digunakan syntax mysql_connect. Syntax ini hanya sebuah fungsi dan bukan
merupakan class sehingga tidak bisa dioperasikan secara instan. Hal ini
berbeda dengan PDO yang terlihat pada Gambar 2. Untuk melakukan koneksi
ke database pada PDO digunakan syntax new PDO(). Dikarenakan PDO adalah
sebuah class maka dapat digunakan secara instan, ditandai dengan
perintah new.3. METODOLOGI PENELITIAN
3.1 Desain Sub Sistem Inti (Core)
Pada sub system core ini dibagi menjadi 6 class yaitu class base, common, loader, global controller, controller dan model. Jika pada obullo pada sub system base terdapat 9 class maka desain system pada framework becak lebih disederhanakan lagi menjadi 6 class. Selain sub system core, masih terdapat sub system database yang dijelaskan lebih lanjut pada Sub bab 3.2, sub system libraries dan helpers. Gambar 3 menjelaskan desain class diagram sub system core dan relasi-relasi antar class beserta sub system yang lain.
Gambar 3.Class Diagram Sub Sistem Core
Pada pelitian ini implementasi kode program core (inti) dibagi menjadi
dua metode yaitu dengan memecah kode program utama menjadi beberapa file
serta cara yang kedua adalah menuliskan kode program utama dalam sebuah
file.3.2 Desain Sub Sistem Operasi Database
Pada sub sistem operasi database ini digunakan pola desain factory dan adapter yang menjembatani antara pengoperasian framework dengan operasi database yang sesungguhnya. Sedangkan untuk operasi database yang sesungguhnya ditangani oleh class driver. Pada penelitian ini disediakan operasi database MySql, dimana dalam pengoperasiannya terbagi menjadi dua yaitu menggunakan PDO dan non PDO (klasik). Gambar 4 dan Gambar 5 menjelaskan desain class diagram operasi database.
Gambar 4.Class Diagram Factory dan Adapter
Gambar 5.Class Diagram Driver MySQL klasik dan PDO
Pada Gambar 5 terdapat dua class yang memiliki attribute dan method
yang sama. Namun syntax di dalam method tersebut tentunya berbeda sesuai
dengan aturan operasi database seperti yang sudah dijelaskan pada Sub
bab 2.4.Dibandingkan dengan obullo desain sub sistem database ini lebih efisien. Seperti yang sudah dijelaskan pada sub bab 2.3 pada obullo terdapat 4 class utama, sedangkan pada becak MVC framework hanya ada 2 program utama seperti yang terlihat pada Gambar 4. Untuk class driver tentunya menyesuaikan dengan jumlah mesin database yang didukung oleh framework.
4. UJI COBA PROGRAM
Sebelum dilakukan uji coba, langkah pertama adalah membuat 3 (tiga) aplikasi weblog sederhana, dimana masing-masing aplikasi tersebut dibangun menggunakan framework CodeIgniter, Obullo dan Becak. Masing–masing aplikasi weblog tersebut dikoneksikan dengan sebuah database MySql.
Adapun pseudo code class controller untuk bahan uji coba terlihat seperti Gambar 6, Gambar 7 dan Gambar 8. Sedangkan pseudo code class model terlihat seperti Gambar 9, Gambar 10 dan Gambar 11.
- <?php defined('SYS') or exit('Access Denied!');
- class page extends controller {
- public function __construct(){
- parent::__construct();
- loader::sys_helper('text');
- loader::model('web_model');
- }
- public function index(){
- $views = array();
- $views['slides'] = $this->web_model->GetData();
- $main_views = array();
- $main_views['visitor'] = '1.500';
- $main_views['main_content'] = view('sub_view', $views);
- app_view('main_web', $main_views);
- }
- public function disclaimer(){
- echo 'Test 1234';
- }
- public function about(){
- echo 'Test 1234567';
- }
- }//end controller
- ?>
Gambar 6.Pseudo code class controller Becak
- <?php defined('BASE') or exit('Access Denied!');
- class Page extends Controller {
- public function __construct(){
- parent::__construct();
- parent::__global();
- loader::model('web_model');
- loader::base_helper('text');
- }
- public function index(){
- $views = array();
- $views['slides'] = $this->web_model->GetData();
- $main_views = array();
- $main_views['visitor'] = '1.500';
- $main_views['main_content'] = content_view('sub_view', $views);
- content_app_view('main_web', $main_views);
- }
- public function disclaimer(){
- echo 'Test 1234';
- }
- public function about(){
- echo 'Test 1234567';
- }
- }//end controller
- ?>
Gambar 7.Pseudo code class controller Obullo
- <?php
- class Page extends Controller {
- public function Page(){
- parent::Controller();
- $this->load->helper('text');
- $this->load->helper('url');
- $this->load->database();
- $this->load->model('Web_model');
- }
- public function index(){
- $views = array();
- $views['slides'] = $this->Web_model->GetData();
- $main_views = array();
- $main_views['visitor'] = '1.500';
- $main_views['main_content'] = $this->load->view('sub_view', $views, true);
- $this->load->view('main_web', $main_views);
- }
- public function disclaimer(){
- echo 'Test 1234';
- }
- public function about(){
- echo 'Test 1234567';
- }
- }//end controller
Gambar 8.Pseudo code class controller CodeIgniter
- <?php
- class web_model extends model {
- public function __construct(){
- loader::database("db");
- }
- public function GetData(){
- $this->db->select("SELECT * FROM `content` ORDER BY id DESC LIMIT 0, 8");
- return $this->db->fetch_array();
- }
- }//end class
- ?>
Gambar 9.Pseudo code class model Becak
- <?php
- class Web_model extends model {
- public function __construct(){
- loader::database("db");
- }
- public function GetData(){
- $results=$this->db->query("SELECT * FROM `content` ORDER BY id DESC LIMIT 0, 8");
- return $results->fetch_all(assoc);
- }
- }//end class
- ?>
Gambar 10.Pseudo code class model Obullo
- <?php
- class Web_model extends Model {
- public function Web_model(){
- parent::Model();
- }
- public function GetData(){
- $query = $this->db->query("SELECT * FROM `content` ORDER BY id DESC LIMIT 0, 8");
- return $query;
- }
- }//end class
- ?>
Gambar 11.Pseudo code class model Codeigniter
Pada uji coba ini sengaja tidak digunakan fasilitas cache file walaupun
library cache ini sudah tersedia pada masing-masing framework. Adapun
Contoh tampilan dari ketiga aplikasi weblog sederhana tersebut terlihat
padaGambar 12.
Gambar 12.Tampilan Aplikasi Weblog
Guna mendukung uji coba maka digunakan hardware dan software seperti
berikut ini: hardware laptop Intel Core 2 Duo, memory 1GB DDR2, sistem
operasi Linux Ubuntu versi 10.04, web server LAMPP for Linux versi
1.7.2, serta browser Mozilla Firefox versi 3.6.13.Dalam uji coba ini web server dan browser dijalankan pada mesin yang sama (localhost).
Untuk menghitung waktu komputasi digunakan library benchmark yang tersedia pada masing-masing framework. Skenario uji coba yang pertama adalah ketiga aplikasi dijalankan secara bergantian.Untuk masing-masing aplikasi dijalankan sebanyak 10 kali. Hasil uji coba ditunjukkan pada Tabel 1.
Tabel 1. Tabel Perbandingan Waktu Komputasi Aplikasi Menggunakan Framework CodeIgniter, Obullo dan Becak
Uji Ke | Waktu Komputasi (detik) | ||
CodeIgniter | Obullo | Becak | |
1 2 3 4 5 6 7 8 9 10 |
0.027 0.026 0.024 0.022 0.024 0.025 0.022 0.022 0.026 0.025 |
0.021 0.019 0.021 0.020 0.021 0.020 0.026 0.020 0.020 0.022 |
0.015 0.016 0.017 0.014 0.015 0.014 0.016 0.014 0.013 0.017 |
Total | 0.242 | 0.209 | 0.152 |
Rata-Rata | 0.0242 | 0.0209 | 0.0152 |
Uji coba kedua adalah menghitung waktu komputasi operasi database yang menggunakan PDO dan operasi database klasik pada framework yang diteliti. Hasil uji coba ditunjukkan pada Tabel 2.
Tabel 2. Tabel Perbandingan Waktu Komputasi Penggunaan Operasi Database Klasik dan PDO
Uji Ke | Waktu Komputasi (detik) | |
Klasik | PDO | |
1 2 3 4 5 6 7 8 9 10 |
0.027 0.026 0.024 0.022 0.024 0.025 0.022 0.022 0.026 0.025 |
0.019 0.020 0.020 0.015 0.019 0.016 0.016 0.016 0.017 0.016 |
Total | 0.152 | 0.175 |
Rata-Rata | 0.0152 | 0.0175 |
Uji coba ketiga adalah mengukur penggunaan sumber daya (resource) memory pada ketiga aplikasi yang diuji. Ada hasil uji coba aplikasi uji yang menggunakan framework becak membutuhkan 0,79 MB, Obullo membutuhkan 1,48 MB dan CodeIgniter membutuhkan 1,58 MB.
Uji coba yang keempat adalah membandingkan waktu komputasi kode program inti yang dipecah menjadi beberapa file dengan kode program yang disatukan dalam satu file. Hasil uji coba ditunjukkan pada Tabel 3.
Tabel 3.Tabel Perbandingan Waktu Komputasi Penggunaan Banyak File
Uji Ke | Waktu Komputasi (detik) | |
Banyak File | 1 (Satu) File | |
1 2 3 4 5 6 7 8 9 10 |
0.015 0.016 0.017 0.014 0.015 0.014 0.016 0.014 0.013 0.017 |
0.015 0.013 0.014 0.014 0.014 0.016 0.016 0.017 0.013 0.012 |
Total | 0.152 | 0.140 |
Rata-Rata | 0.0152 | 0.0140 |
No comments:
Post a Comment