SlideShare uma empresa Scribd logo
1 de 24
Optimize PHP Application in High Traffic
Environment
Oleh
Iskandar Soesman
http://kandar.info
@k4ndar
Introduction
● Hal yang sama bisa diimplementasikan secara
general
● Mengembangkan suatu aplikasi harus bisa
berfikir dari sudut pandang tidak hanya
sebagai developer, tetapi juga sysadmin dan
DBA
The Code
Upgrade ke Versi PHP Terbaru dan
Stabil
● PHP Core Developer selalu berusaha untuk
meningatkan performa dan memperbaiki
setiap bug.
Lakukan Profiling
● Profiling memberikan gambaran yang lebih
jelas pada bagian-bagian mana yang
menjadikan bottleneck pada aplikasi.
● Profiling juga memberikan berapa lama waktu
eksekusi aplikasi.
● Tentukan berapa nilai yang menjadi acuan
waktu eksekusi dalam 1 kali runtime.
Profiling Tools
● xdebug http://xdebug.org/
● xhprof
http://php.net/manual/en/book.xhprof.php
● zend debugger ?
● PHP Profiler
https://github.com/steves/PHP-Profiler
● PHP FPM
Gunakan Variable Secukupnya
$description = strip_tags($_POST['description']);
echo $description;
echo strip_tags($_POST['description']);
Hindari Penggunaan setters dan
getters yang Tidak Perlu
class User {
public $name = '';
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
$user = new User();
$user->setName('Arman');
echo $user->getName();
$user = new User();
$user->name = 'Arman';
echo $user->name;
Men-set nilai ke dalam property selain menghemat penggunaan memory, cara
ini juga mepercepat waktu development.
Runtime Cache
Cache return value suatu method/fungsi yang digunakan berulang kali dalam satu kali
runtime.
$runCahe = array();
function getUserInfo($userId)
{
global $runCahe;
if( isset($runCahe[$userId]) )
return $runCahe[$userId];
$runCahe[$userId] = queryDB("select name, email from user WHERE id = $userId");
return $runCahe[$userId];
}
Cara ini juga untuk mengurangi query yang sama dilakukan berulang kali ke data
resource seperti DB, Cache Server dll.
Hindari Query di dalam Loop
Query yang berulang mengakibatkan request yang berulang ke database
foreach ($userList as $user) {
$query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
mysql_query($query);
}
Gunakan Bulk Query jika tersedia
$userData = array();
foreach ($userList as $user) {
$userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
}
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
mysql_query($query);
Proses di atas akan menghasilkan:
INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
Hindari Active Record
● Active Record mempersempit ruang gerak
developer dan DBA untuk melakukan optimasi
query.
● Menghindari penggunaan Active Record
berarti mengurangi penggunaan memory web
server dalam men-konstruct query yang
dilakukan pada class Active Record.
Gunakan Asynchronous Sebisa
Mungkin
Proses Asynchronous memungkin dalam
menjalankan suatu proses tidak perlu harus
menunggu proses tersebut selesai (non
blocking).
pg_send_query();
Load External Resouce Via
Javascript
Pada saat runtime dan aplikasi membutuhkan
data dari resoursce external seperti API, kita
tidak pernah mendapat jaminan resource
tersebut memberikan response yang cepat.
Jika hal ini terjadi, setidaknya tidak membuat
runtime aplikasi kita blocking.
The Server And Infrastructure
PHP Engine
Install hanya modul yang diperlukan.
Opcode Cache
●
Output dari code akan disimpan menjadi bytecode compiler dan disimpan ke
dalam shared memory.
● Optimasi bytecode ini memungkinkan untuk mendapatkan exsekusi runtime
yang lebih cepat karena instruksi proses pada low level menjadi lebih efisien.
● APC
● Zend Opcache
Cache Object Server
● Simpan setiap object data yang didapat dari query ke DB ke dalam Cache Object Server.
Ini kana mempercepat proses pengambilan data yang dibutuhkan secara berulang.
● Query pada Cache Server menggunakan key-value yang datanya disimpan di dalam
memory, sehingga proses pengambilan data menjadi lebih cepat.
● Redis
● Memcache
Gunakan search Tools dari pada
search ke DB
● Walaupun beberpa database tools telah
menyediakan feature full text search, akan lebih
efisien jika proses ini dilakukan pada tools yang
memang dibuat untuk melakukan pencarian.
● Solr
● Elasticsearch
Tuning Web Server
● Gunakan modul yang hanya diperlukan
● Gunakan konfigurasi variable yang sesuai
dengan kebutuhan
Lakukan Profiling
● Profiling memberikan gambaran yang lebih
jelas pada bagian-bagian mana yang
menjadikan bottleneck pada aplikasi.
● Profiling juga memberikan berapa lama waktu
eksekusi aplikasi.
● Tentukan berapa nilai yang menjadi acuan
waktu eksekusi dalam 1 kali runtime.
Profiling Tools
● xdebug http://xdebug.org/
● xhprof
http://php.net/manual/en/book.xhprof.php
● zend debugger ?
● PHP Profiler
https://github.com/steves/PHP-Profiler
● PHP FPM
Gunakan Variable Secukupnya
$description = strip_tags($_POST['description']);
echo $description;
echo strip_tags($_POST['description']);
Hindari Penggunaan setters dan
getters yang Tidak Perlu

Mais conteúdo relacionado

Semelhante a Optimize php application in high traffic environment

Tugas_pemrograman3_1100631026_Helmi_MH_
Tugas_pemrograman3_1100631026_Helmi_MH_Tugas_pemrograman3_1100631026_Helmi_MH_
Tugas_pemrograman3_1100631026_Helmi_MH_Helmi Mahfudhatul
 
#4 REST API.pptx
#4 REST API.pptx#4 REST API.pptx
#4 REST API.pptxGDSC2
 
Code igneter
Code igneterCode igneter
Code ignetermaiefendi
 
TD-666-01-teknik-pemrograman
TD-666-01-teknik-pemrogramanTD-666-01-teknik-pemrograman
TD-666-01-teknik-pemrogramanTino Dwiantoro
 
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5stephan EL'wiin Shaarawy
 
Tugas 4 debbie mistikaweni 1412510982
Tugas 4 debbie mistikaweni   1412510982Tugas 4 debbie mistikaweni   1412510982
Tugas 4 debbie mistikaweni 1412510982debbie95
 
Optimasi Web Server dengan Nginx by Aswin
Optimasi Web Server dengan Nginx by AswinOptimasi Web Server dengan Nginx by Aswin
Optimasi Web Server dengan Nginx by AswinAgate Studio
 
Asas cakephp-mvc
Asas cakephp-mvcAsas cakephp-mvc
Asas cakephp-mvckriptonium
 
Modul Pelatihan CodeIgniter Dasar
Modul Pelatihan CodeIgniter DasarModul Pelatihan CodeIgniter Dasar
Modul Pelatihan CodeIgniter DasarRidwan Fadjar
 
Pertemuan 3 a
Pertemuan 3 aPertemuan 3 a
Pertemuan 3 azaenald i
 

Semelhante a Optimize php application in high traffic environment (20)

Tugas_pemrograman3_1100631026_Helmi_MH_
Tugas_pemrograman3_1100631026_Helmi_MH_Tugas_pemrograman3_1100631026_Helmi_MH_
Tugas_pemrograman3_1100631026_Helmi_MH_
 
Perkuliahan 02 Model software engginer
Perkuliahan 02 Model software engginerPerkuliahan 02 Model software engginer
Perkuliahan 02 Model software engginer
 
#4 REST API.pptx
#4 REST API.pptx#4 REST API.pptx
#4 REST API.pptx
 
Code igneter
Code igneterCode igneter
Code igneter
 
TD-666-01-teknik-pemrograman
TD-666-01-teknik-pemrogramanTD-666-01-teknik-pemrograman
TD-666-01-teknik-pemrograman
 
Tugas 4 - Rekayasa Web
Tugas 4 - Rekayasa WebTugas 4 - Rekayasa Web
Tugas 4 - Rekayasa Web
 
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
 
Tugas 4 debbie mistikaweni 1412510982
Tugas 4 debbie mistikaweni   1412510982Tugas 4 debbie mistikaweni   1412510982
Tugas 4 debbie mistikaweni 1412510982
 
Web programming
Web programmingWeb programming
Web programming
 
ETS MPPL
ETS MPPLETS MPPL
ETS MPPL
 
Optimasi Web Server dengan Nginx by Aswin
Optimasi Web Server dengan Nginx by AswinOptimasi Web Server dengan Nginx by Aswin
Optimasi Web Server dengan Nginx by Aswin
 
ETS MPPL NEW
ETS MPPL NEWETS MPPL NEW
ETS MPPL NEW
 
Nodejs & Loopback
Nodejs & LoopbackNodejs & Loopback
Nodejs & Loopback
 
Microservices.pptx
Microservices.pptxMicroservices.pptx
Microservices.pptx
 
Asas cakephp-mvc
Asas cakephp-mvcAsas cakephp-mvc
Asas cakephp-mvc
 
Pelajaran jsp smk XI RPL
Pelajaran jsp smk XI RPLPelajaran jsp smk XI RPL
Pelajaran jsp smk XI RPL
 
UTS MPPL
UTS MPPLUTS MPPL
UTS MPPL
 
Bab 4
Bab 4Bab 4
Bab 4
 
Modul Pelatihan CodeIgniter Dasar
Modul Pelatihan CodeIgniter DasarModul Pelatihan CodeIgniter Dasar
Modul Pelatihan CodeIgniter Dasar
 
Pertemuan 3 a
Pertemuan 3 aPertemuan 3 a
Pertemuan 3 a
 

Mais de k4ndar

Big data-at-detik
Big data-at-detikBig data-at-detik
Big data-at-detikk4ndar
 
Introduction Laravel By Hasannuh Bz
Introduction Laravel By Hasannuh BzIntroduction Laravel By Hasannuh Bz
Introduction Laravel By Hasannuh Bzk4ndar
 
Optimize Web Application Infrastructure by Rizki Nanda Agam
Optimize Web Application Infrastructure by Rizki Nanda Agam Optimize Web Application Infrastructure by Rizki Nanda Agam
Optimize Web Application Infrastructure by Rizki Nanda Agam k4ndar
 
Panada: An Introduction by Iskandar Soesman
Panada: An Introduction by Iskandar SoesmanPanada: An Introduction by Iskandar Soesman
Panada: An Introduction by Iskandar Soesmank4ndar
 
Yii2 by Peter Jack Kambey
Yii2 by Peter Jack KambeyYii2 by Peter Jack Kambey
Yii2 by Peter Jack Kambeyk4ndar
 
Git for development and deployment By Azhari Harahap
Git for development and deployment By Azhari HarahapGit for development and deployment By Azhari Harahap
Git for development and deployment By Azhari Harahapk4ndar
 
Composer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia NasutionComposer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia Nasutionk4ndar
 
Scaling mongo db dengan replicaset dan sharding
Scaling mongo db dengan replicaset dan shardingScaling mongo db dengan replicaset dan sharding
Scaling mongo db dengan replicaset dan shardingk4ndar
 

Mais de k4ndar (8)

Big data-at-detik
Big data-at-detikBig data-at-detik
Big data-at-detik
 
Introduction Laravel By Hasannuh Bz
Introduction Laravel By Hasannuh BzIntroduction Laravel By Hasannuh Bz
Introduction Laravel By Hasannuh Bz
 
Optimize Web Application Infrastructure by Rizki Nanda Agam
Optimize Web Application Infrastructure by Rizki Nanda Agam Optimize Web Application Infrastructure by Rizki Nanda Agam
Optimize Web Application Infrastructure by Rizki Nanda Agam
 
Panada: An Introduction by Iskandar Soesman
Panada: An Introduction by Iskandar SoesmanPanada: An Introduction by Iskandar Soesman
Panada: An Introduction by Iskandar Soesman
 
Yii2 by Peter Jack Kambey
Yii2 by Peter Jack KambeyYii2 by Peter Jack Kambey
Yii2 by Peter Jack Kambey
 
Git for development and deployment By Azhari Harahap
Git for development and deployment By Azhari HarahapGit for development and deployment By Azhari Harahap
Git for development and deployment By Azhari Harahap
 
Composer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia NasutionComposer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia Nasution
 
Scaling mongo db dengan replicaset dan sharding
Scaling mongo db dengan replicaset dan shardingScaling mongo db dengan replicaset dan sharding
Scaling mongo db dengan replicaset dan sharding
 

Optimize php application in high traffic environment

  • 1. Optimize PHP Application in High Traffic Environment Oleh Iskandar Soesman http://kandar.info @k4ndar
  • 2. Introduction ● Hal yang sama bisa diimplementasikan secara general ● Mengembangkan suatu aplikasi harus bisa berfikir dari sudut pandang tidak hanya sebagai developer, tetapi juga sysadmin dan DBA
  • 4. Upgrade ke Versi PHP Terbaru dan Stabil ● PHP Core Developer selalu berusaha untuk meningatkan performa dan memperbaiki setiap bug.
  • 5. Lakukan Profiling ● Profiling memberikan gambaran yang lebih jelas pada bagian-bagian mana yang menjadikan bottleneck pada aplikasi. ● Profiling juga memberikan berapa lama waktu eksekusi aplikasi. ● Tentukan berapa nilai yang menjadi acuan waktu eksekusi dalam 1 kali runtime.
  • 6. Profiling Tools ● xdebug http://xdebug.org/ ● xhprof http://php.net/manual/en/book.xhprof.php ● zend debugger ? ● PHP Profiler https://github.com/steves/PHP-Profiler ● PHP FPM
  • 7. Gunakan Variable Secukupnya $description = strip_tags($_POST['description']); echo $description; echo strip_tags($_POST['description']);
  • 8. Hindari Penggunaan setters dan getters yang Tidak Perlu class User { public $name = ''; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } $user = new User(); $user->setName('Arman'); echo $user->getName(); $user = new User(); $user->name = 'Arman'; echo $user->name; Men-set nilai ke dalam property selain menghemat penggunaan memory, cara ini juga mepercepat waktu development.
  • 9. Runtime Cache Cache return value suatu method/fungsi yang digunakan berulang kali dalam satu kali runtime. $runCahe = array(); function getUserInfo($userId) { global $runCahe; if( isset($runCahe[$userId]) ) return $runCahe[$userId]; $runCahe[$userId] = queryDB("select name, email from user WHERE id = $userId"); return $runCahe[$userId]; } Cara ini juga untuk mengurangi query yang sama dilakukan berulang kali ke data resource seperti DB, Cache Server dll.
  • 10. Hindari Query di dalam Loop Query yang berulang mengakibatkan request yang berulang ke database foreach ($userList as $user) { $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")'; mysql_query($query); }
  • 11. Gunakan Bulk Query jika tersedia $userData = array(); foreach ($userList as $user) { $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")'; } $query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData); mysql_query($query); Proses di atas akan menghasilkan: INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
  • 12. Hindari Active Record ● Active Record mempersempit ruang gerak developer dan DBA untuk melakukan optimasi query. ● Menghindari penggunaan Active Record berarti mengurangi penggunaan memory web server dalam men-konstruct query yang dilakukan pada class Active Record.
  • 13. Gunakan Asynchronous Sebisa Mungkin Proses Asynchronous memungkin dalam menjalankan suatu proses tidak perlu harus menunggu proses tersebut selesai (non blocking). pg_send_query();
  • 14. Load External Resouce Via Javascript Pada saat runtime dan aplikasi membutuhkan data dari resoursce external seperti API, kita tidak pernah mendapat jaminan resource tersebut memberikan response yang cepat. Jika hal ini terjadi, setidaknya tidak membuat runtime aplikasi kita blocking.
  • 15. The Server And Infrastructure
  • 16. PHP Engine Install hanya modul yang diperlukan.
  • 17. Opcode Cache ● Output dari code akan disimpan menjadi bytecode compiler dan disimpan ke dalam shared memory. ● Optimasi bytecode ini memungkinkan untuk mendapatkan exsekusi runtime yang lebih cepat karena instruksi proses pada low level menjadi lebih efisien. ● APC ● Zend Opcache
  • 18. Cache Object Server ● Simpan setiap object data yang didapat dari query ke DB ke dalam Cache Object Server. Ini kana mempercepat proses pengambilan data yang dibutuhkan secara berulang. ● Query pada Cache Server menggunakan key-value yang datanya disimpan di dalam memory, sehingga proses pengambilan data menjadi lebih cepat. ● Redis ● Memcache
  • 19. Gunakan search Tools dari pada search ke DB ● Walaupun beberpa database tools telah menyediakan feature full text search, akan lebih efisien jika proses ini dilakukan pada tools yang memang dibuat untuk melakukan pencarian. ● Solr ● Elasticsearch
  • 20. Tuning Web Server ● Gunakan modul yang hanya diperlukan ● Gunakan konfigurasi variable yang sesuai dengan kebutuhan
  • 21. Lakukan Profiling ● Profiling memberikan gambaran yang lebih jelas pada bagian-bagian mana yang menjadikan bottleneck pada aplikasi. ● Profiling juga memberikan berapa lama waktu eksekusi aplikasi. ● Tentukan berapa nilai yang menjadi acuan waktu eksekusi dalam 1 kali runtime.
  • 22. Profiling Tools ● xdebug http://xdebug.org/ ● xhprof http://php.net/manual/en/book.xhprof.php ● zend debugger ? ● PHP Profiler https://github.com/steves/PHP-Profiler ● PHP FPM
  • 23. Gunakan Variable Secukupnya $description = strip_tags($_POST['description']); echo $description; echo strip_tags($_POST['description']);
  • 24. Hindari Penggunaan setters dan getters yang Tidak Perlu