Thursday, May 30, 2013

Optimasi Framework Obullo dan CodeIgniter

Saat ini banyak pengembang (developer) web yang memanfaatkan framework berbasis Model View Controller (MVC) sebagai alat untuk mempermudah dalam pengembangan aplikasi web. Obullo adalah salah satu framework yang baru saja dipublikasikan oleh pengembangnya. Framework Obullo ini dibangun dengan tujuan untuk memperbaiki framework Codeigniter yang sudah dipublikasikan  dan dikenal oleh banyak orang. Kedua framework tersebut masih terdapat kelemahan yaitu pola desain (design pattern) kedua framework tersebut masih terlalu rumit sehingga kode program tidak efisisien dan mengakibatkan waktu komputasi tidak optimal. Selain itu untuk melakukan operasi ke database framework Obullo hanya menyediakan metode operasi PHP Data Object (PDO), sedangkan Codeigniter hanya menyediakan metode operasi klasik.
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 :  
  1. Sub system base berfungsi untuk penulisan fungsi-fungsi registry object, loader (pemuat) object, global controller, controller induk dan model induk.   
  2. 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.   
  3. Sub system library berfungsi untuk mendeklarasikan kelas-kelas pendukung aplikasi seperti pagination, kalender, session, URI, rouring dan sebagainya.   
  4. Sub system helper berfungsi untuk mengimplementasikan sub routine pendukung aplikasi misalnya sub routine pengolahan text, pengolahan tag HTML dan sebaginya
Dari kelima sub system tersebut, sebenarnya yang paling berperan adalah sub syetem base dan sub system database(Güvenç, 2010). Kedua sub system tersebut akan selalu dijalankan setiap kali pengguna memanggil web site. Pada sub system base terdapat 9 program yaitu bootstrap.php, Common.php, Controller.php, Errors.php, Loader.php, Model.php, Obullo.php, Registry.php dan Ssc.php. Sedangkan sub system database terbagi menjadi 4 program utama yaitu DB.php, DBAc_record.php, DBAdapter.php, DBFactory.php. Selain 4 program utama pada susb system database juga masih dilengkapi dengan driver untuk melakukan operasi database ke masing-masing mesin database.
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.

  1. class CI_DB_mysql_driver extends CI_DB {  
  2.    function db_connect(){  
  3.       if ($this->port != '')  
  4.       {  
  5.             $this->hostname .= ':'.$this->port;  
  6.       }  
  7.       return @mysql_connect($this->hostname, $this->username,$this->password, TRUE);  
  8.   
  9.     }  
  10. }  
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.

  1. <?php  
  2. class mysql_pdo {  
  3.     public function connect() {  
  4.         if(isset($this->conn))   
  5.            return $this->conn;  
  6.         try{  
  7.            $this->conn = new PDO ("mysql:host=$server; dbname=$database"$user,$password);  
  8.         }catch(PDOException $e){  
  9.              echo __LINE__.$e->getMessage();  
  10.         }  
  11. }  
  12. }?>  
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.

  1. <?php  defined('SYS'or exit('Access Denied!');  
  2. class page extends controller {  
  3.     public function __construct(){  
  4.         parent::__construct();  
  5.         loader::sys_helper('text');  
  6.         loader::model('web_model');  
  7.     }  
  8.     public function index(){  
  9.         $views = array();  
  10.         $views['slides'] = $this->web_model->GetData();  
  11.           
  12.         $main_views = array();  
  13.         $main_views['visitor'] = '1.500';  
  14.         $main_views['main_content'] = view('sub_view'$views);  
  15.         app_view('main_web'$main_views);  
  16.     }  
  17.     public function disclaimer(){  
  18.         echo 'Test 1234';  
  19.     }  
  20.     public function about(){  
  21.         echo 'Test 1234567';  
  22.     }  
  23.       
  24. }//end controller  
  25. ?>  
Gambar 6.Pseudo code class controller Becak

  1. <?php  defined('BASE'or exit('Access Denied!');  
  2. class Page extends Controller {  
  3.     public function __construct(){  
  4.         parent::__construct();  
  5.         parent::__global();  
  6.         loader::model('web_model');  
  7.         loader::base_helper('text');  
  8.     }  
  9.     public function index(){  
  10.         $views = array();  
  11.         $views['slides'] = $this->web_model->GetData();  
  12.           
  13.         $main_views = array();  
  14.         $main_views['visitor'] = '1.500';  
  15.         $main_views['main_content'] = content_view('sub_view'$views);  
  16.         content_app_view('main_web'$main_views);  
  17.     }  
  18.     public function disclaimer(){  
  19.         echo 'Test 1234';  
  20.     }  
  21.     public function about(){  
  22.         echo 'Test 1234567';  
  23.     }  
  24. }//end controller  
  25. ?>  
Gambar 7.Pseudo code class controller Obullo

  1. <?php    
  2. class Page extends Controller {  
  3.     public function Page(){  
  4.         parent::Controller();  
  5.         $this->load->helper('text');  
  6.         $this->load->helper('url');  
  7.         $this->load->database();  
  8.         $this->load->model('Web_model');  
  9.     }  
  10.     public function index(){  
  11.         $views = array();  
  12.         $views['slides'] = $this->Web_model->GetData();  
  13.           
  14.         $main_views = array();  
  15.         $main_views['visitor'] = '1.500';  
  16.         $main_views['main_content'] = $this->load->view('sub_view'$views, true);  
  17.         $this->load->view('main_web'$main_views);  
  18.     }  
  19.     public function disclaimer(){  
  20.         echo 'Test 1234';  
  21.     }  
  22.     public function about(){  
  23.         echo 'Test 1234567';  
  24.     }  
  25.       
  26. }//end controller  
Gambar 8.Pseudo code class controller CodeIgniter

  1. <?php  
  2. class web_model extends model {  
  3.     public function __construct(){  
  4.         loader::database("db");  
  5.     }  
  6.     public function GetData(){  
  7.         $this->db->select("SELECT * FROM `content` ORDER BY id DESC LIMIT 0, 8");  
  8.         return $this->db->fetch_array();  
  9.     }  
  10.   
  11. }//end class  
  12. ?>  
Gambar 9.Pseudo code class model Becak

  1. <?php  
  2. class Web_model extends model {  
  3.     public function __construct(){  
  4.         loader::database("db");  
  5.     }  
  6.     public function GetData(){  
  7.         $results=$this->db->query("SELECT * FROM `content` ORDER BY id DESC LIMIT 0, 8");  
  8.         return $results->fetch_all(assoc);  
  9.     }  
  10.   
  11. }//end class  
  12. ?>  
Gambar 10.Pseudo code class model Obullo
  1. <?php  
  2. class Web_model extends Model {  
  3.     public function Web_model(){  
  4.         parent::Model();  
  5.     }  
  6.     public function GetData(){  
  7.         $query = $this->db->query("SELECT * FROM `content` ORDER BY id DESC LIMIT 0, 8");  
  8.         return $query;  
  9.     }  
  10.   
  11. }//end class  
  12. ?>  
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
Dari hasil uji coba yang pertama, didapatkan hasil framework yang diteliti (becak) waktu komputasinya rata-rata lebih cepat 0.0058 detik dibandingkan dengan Obullo dan lebih cepat rata-rata 0.0091 detik dibandingkan CodeIgniter.
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
Dari hasil uji coba yang kedua, didapatkan hasil  waktu komputasi operasi database klasik rata-rata lebih cepat 0.0023 detik dibandingkan dengan operasi database PDO.
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
Dari hasil uji coba yang ketiga, didapatkan hasil  waktu komputasi penulisan program utama pada satu file ternyata lebih cepat cepat 0.00098 detik dibandingkan dengan penulisan kode program yang dipecah-pecah pada beberapa file.dengan Satu File ternyata lebih cepat cepat 0.00098 detik dibandingkan dengan penulisan kode program yang dipecah-pecah pada beberapa file.

No comments:

Post a Comment