Your SlideShare is downloading. ×
Optimize php application in high traffic environment
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Optimize php application in high traffic environment

700
views

Published on


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
700
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
41
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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
  • 3. The Code
  • 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