Your SlideShare is downloading. ×
Heavy Web Optimization: Backend
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Heavy Web Optimization: Backend

5,859
views

Published on

Slide in a seminar about backend optimization with PHP. …

Slide in a seminar about backend optimization with PHP.

Talks about php, caching, scalability, amazon web service

Published in: Technology

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,859
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
83
Comments
0
Likes
4
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
  • Determine the existing size of your shared memory segment: sysctl -a | grep shmmax Set sysctl -w kernel.shmmax=50331648
  • Determine the existing size of your shared memory segment: sysctl -a | grep shmmax Set sysctl -w kernel.shmmax=50331648
  • More installation LAMP: http://jonathanhui.com/building-ec2-amazon-linux-lamp
  • Mailchimp: http://mailchimp.com/pricing/
  • Transcript

    • 1. Heavy Web Optimization BACK-END <?php //from a PHP dev ?>Vo Duy Tuan PHP Developer from Reader.vn, Picto.vn & more…
    • 2. $who_am_I? My Name is Võ Duy Tuấn PHP 5 Zend Certified Engineer Interests: PHP, Social Network, Optimize Web Works:  Thegioididong  Reader.vn, Picto.vn CEO/Founder  Trainer  Freelancer  Consultant
    • 3. $table_of_content Warm up: Some best practices Back-end Optimization De-normalization Asynchronous processing Caching Scalability
    • 4. 1 Warm up: Some best practices
    • 5. 1.1. Smarty Tricka. Prevent recompile .tpl file:$smarty = new Smarty();$smarty->compile_check = false;b. Compile all .tpl files:set_time_limit(1000); //do not interrupt$smarty->compileAllTemplates(.tpl,true);
    • 6. 1.2. Pagination From To
    • 7. 1.2. Pagination – Why? How do we make pagination feature?mysql_query(‘SELECT COUNT(*) FROM tbl WHERE col LIKE “%word%”’)> Get total record > Get toal page > Build page number list with a simple loopmysql_query(‘SELECT * FROM tbl WHERE col LIKE “%word%” LIMIT 0,20’)> Get data of current page (page 1, with 20 rows/page)Do you have the answer  ?
    • 8. 1.3. Get enough data from remote server Send HEAD to detect 404 error from remote URL Read first bytes of remote file to detect image type,width/height
    • 9. 2 Back-end Optimization
    • 10. 2.1. Where is Back-end?“80% of the end-user response time is spent on the front-end. Most of this time is tied up in downloading all thecomponents in the page: images, stylesheets, scripts, Flash,etc. Reducing the number of components in turn reduces thenumber of HTTP requests required to render the page. Thisis the key to faster pages.”
    • 11. 2.2. Back-end Optimize Theory Reduce disk In/Out Reduce complex/fuzzy Reduce budget
    • 12. 2.3. Debugging & Profiling Nusphere Phped Debugger Xdebug top command Apache bench
    • 13. 2.3.1. Nusphere Phped Debugger Installation:  Step 1: Install php extension  Step 2: Install DBGbar addon for Firefox or DBG debugger on Chrome  Step 3: Update PHP.INI config  Restart your web server (if needed)
    • 14. 2.3.1. Nusphere Phped Debugger
    • 15. 2.3.2. Xdebug Installation:  Step 1: Install php extension  Step 2: Update PHP.INI config  Restart your server (if needed)
    • 16. 2.3.2. Xdebug PHP.INI [xdebug] zend_extension_ts = C:..php_xdebug-2.1.0-5.2-vc6.dll xdebug.profiler_output_dir = "C:xdebug" xdebug.profiler_output_name = "callgrind.%R.%t" xdebug.profiler_enable = 0 xdebug.profiler_append=0 xdebug.profiler_enable_trigger = 1 xdebug.extended_info=1 Usage: http://example.com/index.php?XDEBUG_PROFILE
    • 17. 2.3.2. Xdebug
    • 18. 2.3.3. linux command top
    • 19. 2.3.4. Apache Bench
    • 20. Somewhere in the dark…
    • 21. 3 De-normalization
    • 22. 3.1. What is De-normalization? Most of use live with Relational DB. What is normalization?  Database normalization is the process of organizing the fields and tables of a relational database to minimize redundancy and dependency .(Wiki) What is De-normalization?  Denormalization is the process of attempting to optimise the read performance of a database by adding redundant data or by grouping data. (Wiki)
    • 23. 3.2. How to de-normalize? Vertical Split. Pre-calculated value. Duplicate data.
    • 24. 3.2.1. Vertical Split
    • 25. 3.2.1. Vertical Split (cont.)
    • 26. 3.2.2. Pre-calculated value
    • 27. 3.2.3. Duplicate data
    • 28. 3.3. Data correctness Normalization = Correctness Denormalization = Performance
    • 29. 4 Asynchronous processing
    • 30. 4.1. Job queue
    • 31. 4.2. Job queue :: Gearman  http://gearman.org/
    • 32. But….Apache can be a job queue,
    • 33. 4.3. Async Requestfunction backgroundHttpPost($url, $prm = ){ $p=parse_url($url); $fp = fsockopen($p[host], isset($p[port])?$p[port]:80, $en, $es, 30); if (!$fp) return false; else { $out = "POST ".$p[path]."?".$p[query]." HTTP/1.1rn"; $out.= "Host: ".$p[host]."rn"; $out.= "Content-Type: application/x-www-form-urlencodedrn"; $out.= "Content-Length: ".strlen($prm)."rn"; $out.= "Connection: Closernrn"; if ($prm != ) $out.= $prm; fwrite($fp, $out); fclose($fp); return true; }}Usage:$taskUrl = http://picto.vn/task/deletephoto;backgroundHttpPost($taskUrl, photoid= . $myPhoto->id);
    • 34. 5 Caching
    • 35. 5.1. What is caching?
    • 36. 5.2. What is APC? Alternative PHP Cache – APC Free PHP Extension PHP Opcode cache Support User data cache Run on SAME machine with PHP NOT support multi servers
    • 37. 5.3. APC Monitor
    • 38. 5.4. APC Using
    • 39. 5.5. APC Tip Opcode your web code only Disable APC for PhpMyAdmin<Directory "/mysite/public_html/"> ... php_admin_flag apc.cache_by_default On</Directory<Directory "/mysite/public_html/phpmyadmin/"> ... php_admin_flag apc.cache_by_default Off</Directory>
    • 40. 2.6. APC Tip.. Cache STRING is better than ARRAY Long Time To Live better than Short Case study:  Caching for Feed System:
    • 41. BEFORE
    • 42. BEFORE
    • 43. ANALYSE
    • 44. AFTER
    • 45. Short TTL make fragmentation
    • 46. Short TTL make fragmentation
    • 47. 6 Cloud computing - AWS  Amazon Elastic Compute Cloud – Amazon EC2 + EBS  Amazon Simple Storage Service – Amazon S3  Amazon Simple Email Service – Amazon SES
    • 48. 6.1. Amazon EC25
    • 49. 6.1. Amazon EC2 (cont.)5
    • 50. 6.2. Amazon S35
    • 51. 6.2. Amazon S3 (cont.)5
    • 52. 6.2. Amazon S3 (cont.)5
    • 53. 6.3. Amazon SES 1,000,000 emails = $1005 Support SMTP
    • 54. 6.3. Amazon SES (cont.)5
    • 55. 6.4. Adapt to AWS for scalability Local server (Web & RDBMS) + S35 EC2 (Web) + EBS (RDB) + S3 EC2 (Web) + EBS (local storage) + Amazon RDS (RDB) + S3 EC2 (Web) + EBS (local storage) + EC2 (noSQL) + S3 …Can use with more Amazon Services
    • 56. Thank you!It’s time to query …CONTACTFullname: Vo Duy TuanEmail: tuanmaster2002@yahoo.comPhone: 0938 916 902Website: http://bloghoctap.com