SlideShare a Scribd company logo
PHP Optimization
by Dave Jesch - SpectrOMTech.com
OC WordCamp - June 7, 2014
How to make your code run faster
There will be code.
Warning:
© 2014 SpectrOMTech.com. All Rights Reserved.
Optimization
Dave Jesch, Lifetime Geek
➔1.0 Web Applications
➔Sales Conversion Plugins
➔eCommerce Solutions
Principal, SpectrOMTech.com
© 2014 SpectrOMTech.com. All Rights Reserved.
Mastering Security & Optimization...
© 2014 SpectrOMTech.com. All Rights Reserved.
1. How to Measure Improvement
2. Basic Optimization Techniques
3. Code Examples
Today’s Goals:
© 2014 SpectrOMTech.com. All Rights Reserved.
Secret Behind Optimization
© 2014 SpectrOMTech.com. All Rights Reserved.
1. Ways to Measure Outcome
© 2014 SpectrOMTech.com. All Rights Reserved.
What are we Measuring?
● Speed
● Memory
● Code simplification / maintenance
© 2014 SpectrOMTech.com. All Rights Reserved.
Number of Operations
O(n) notation is used to express the worst case
order of growth of an algorithm.
How an algorithm’s worst-case performance changes as
the size of the data set it operates on increases.
http://www.perlmonks.org/?node_id=227909
© 2014 SpectrOMTech.com. All Rights Reserved.
microtime()
http://us1.php.net/manual/en/function.microtime.php
memory_get_usage()
http://us1.php.net/manual/en/function.memory-get-usage.php
XDebug Profiler
http://www.xdebug.org/docs/profiler
Measuring Tools
© 2014 SpectrOMTech.com. All Rights Reserved.
2. Let’s make your code Awesome!
© 2014 SpectrOMTech.com. All Rights Reserved.
General Optimizations (1 of 7)
● Upgrade!
● 'string' is not the same as "string".
[2.62 : 3.78 @10,000,000]
● Use built-in functions, especially for arrays and strings.
array_column()/array_replace()/implode()/
explode(), etc.
© 2014 SpectrOMTech.com. All Rights Reserved.
General Optimizations (2 of 7)
● Identity 1===1 vs. Equality '1' == 1
[1.63 : 3.72 @10,000,000]
● Shift (n >> 1), not divide (n / 2)
[2.34 : 2.75 @10,000,000]
● Don’t make needless copies.
© 2014 SpectrOMTech.com. All Rights Reserved.
General Optimizations (3 of 7)
● Use reference operator $x = &$array['key']
[1.95 : 2.01 @10,000,000]
● unset large arrays when no longer needed.
● echo $a,$b; faster than echo $a.$b;
[1.11 : 2.48 @1,000,000]
© 2014 SpectrOMTech.com. All Rights Reserved.
General Optimizations (4 of 7)
● Avoid @ error control operator.
● Pre increment ++$i faster than post increment $i++
[0.95 : 1.05 @10,000,000]
● "foreach" for arrays is better than "for"
[1.38 : 4.35 @100,000]
© 2014 SpectrOMTech.com. All Rights Reserved.
General Optimizations (5 of 7)
● Initialize! using undefined variables is slower than pre-
initialized variables.
[0.82 : 4.41 @10,000,000]
● Don’t global unless you use it.
[1.82 : 2.01 @10,000,000]
● switch is faster than if (…) elseif (…) ...
© 2014 SpectrOMTech.com. All Rights Reserved.
General Optimizations (6 of 7)
● !isset($foo{5}) faster than strlen($foo) < 5
[0.26 : 0.84 @10,000,000]
● str_replace() faster than preg_replace()
strtr() faster than str_replace()
[0.47 : 0.49 : 1.05 @100,000]
© 2014 SpectrOMTech.com. All Rights Reserved.
General Optimizations (7 of 7)
● "{$var}" is faster than sprintf()
[2.19 : 6.87 @10,000,000]
● incrementing global var slightly slower than a local var
[8.98 : 9.09 @100,000,000]
● use ctype_alnum(), ctype_alpha() and
ctype_digit() over regex
© 2014 SpectrOMTech.com. All Rights Reserved.
3. Examples:
© 2014 SpectrOMTech.com. All Rights Reserved.
Bubble Sort
Optimized: O(n^2) Best case: O(n)
$len = count($arr);
for ($i = 0; $i < $len; ++$i) {
$swapped = false;
for ($j = 0; $j < $len - 1; ++$j) {
if ($arr[$i] < $arr[$j]) {
$x = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $x;
$swapped = true;
}
}
if (!$swapped)
break;
}
Non-Optimized: O(n^2)
for ($i = 0; $i < count($arr); $i++) {
for ($j = 0; $j < count($arr) - 1; $j++) {
if ($arr[$i] < $arr[$j]) {
$x = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $x;
}
}
}
© 2014 SpectrOMTech.com. All Rights Reserved.
Reuse Function Results
Non-Optimized:
if (get_option('some_setting') > 0)
$var = get_option('some_setting');
else
$var = 0;
Optimized:
// use option or set to 0 if option not set
if (($var = get_option('some_setting')) < 0)
$var = 0;
© 2014 SpectrOMTech.com. All Rights Reserved.
Iterating Arrays
Non-Optimized:
// iterate through an array
foreach ($aHash as $key => $val) {
call_func($aHash[$key]);
}
12.01 seconds @10,000,000
Optimized:
// iterate through an array
while (list($key) = each($aHash)) {
call_func($aHash[$key]);
}
0.73 seconds @10,000,000
© 2014 SpectrOMTech.com. All Rights Reserved.
For Loops
Non-Optimized:
// loop through all elements of array
for ($i = 0; $i < count($a); ++$i) {
// do something
}
Optimized:
// loop through all elements of array
for ($i = 0, $c = count($a); $i < $c; ++$i) {
// do something
}
© 2014 SpectrOMTech.com. All Rights Reserved.
Latency Solutions: Transients
// get data from transient
if (($value = get_transient('my_transient_name')) === false) {
// nothing in transient, get from remote API
$value = wp_remote_get('http://some-domain.com', $args);
// save data from API in transient
set_transient('my_transient_name', $value, $expiration);
}
© 2014 SpectrOMTech.com. All Rights Reserved.
Ordering of Conditions
if (fastest() || fast() || slowest()) {
// some code here
}
________________________________________________________________
if (op1() && op2() && op3()) {
// more code
}
© 2014 SpectrOMTech.com. All Rights Reserved.
Code Optimized!
1. Practice, practice, practice
2. Always more to learn
3. Balancing act
4. Art form meets science
© 2014 SpectrOMTech.com. All Rights Reserved.
WP Geek Lab- Give back to WordPress.org
Alone we can do so little; together we can do so much. - Helen Keller
Connect with us at Hello@SpectrOMTech.com for more info.
write code...fix bugs...hangout...talk geek...
More References
http://phplens.com/lens/php-book/optimizing-debugging-php.php
http://alexatnet.com/articles/php-micro-optimization-tips
http://www.mdproductions.ca/guides/50-best-practices-to-optimize-php-code-
performance
http://php100.wordpress.com/2009/06/26/php-performance-google/
© 2014 SpectrOMTech.com. All Rights Reserved.

More Related Content

PPT
Php optimization
PDF
Profiling php5 to php7
PDF
Php extensions workshop
PDF
Mysqlnd, an unknown powerful PHP extension
PDF
Php7 extensions workshop
PDF
PHP 7 performances from PHP 5
PDF
Symfony live 2017_php7_performances
PDF
SymfonyCon 2017 php7 performances
Php optimization
Profiling php5 to php7
Php extensions workshop
Mysqlnd, an unknown powerful PHP extension
Php7 extensions workshop
PHP 7 performances from PHP 5
Symfony live 2017_php7_performances
SymfonyCon 2017 php7 performances

What's hot (20)

ODP
Php in 2013 (Web-5 2013 conference)
PDF
Understanding PHP objects
PPT
Working with databases in Perl
PDF
PHP 7 new engine
PDF
When e-commerce meets Symfony
PDF
PL/Perl - New Features in PostgreSQL 9.0
PDF
Building Custom PHP Extensions
PDF
Php and threads ZTS
PDF
Quick tour of PHP from inside
KEY
Kansai.pm 10周年記念 Plack/PSGI 入門
PDF
Understanding PHP memory
PDF
PL/Perl - New Features in PostgreSQL 9.0 201012
PDF
PHP7 is coming
PPT
The Php Life Cycle
ODP
PHP Tips for certification - OdW13
PPTX
Php 7 hhvm and co
ODP
PHP5.5 is Here
PDF
PHP 7 OPCache extension review
ODP
Caching and tuning fun for high scalability @ FrOSCon 2011
Php in 2013 (Web-5 2013 conference)
Understanding PHP objects
Working with databases in Perl
PHP 7 new engine
When e-commerce meets Symfony
PL/Perl - New Features in PostgreSQL 9.0
Building Custom PHP Extensions
Php and threads ZTS
Quick tour of PHP from inside
Kansai.pm 10周年記念 Plack/PSGI 入門
Understanding PHP memory
PL/Perl - New Features in PostgreSQL 9.0 201012
PHP7 is coming
The Php Life Cycle
PHP Tips for certification - OdW13
Php 7 hhvm and co
PHP5.5 is Here
PHP 7 OPCache extension review
Caching and tuning fun for high scalability @ FrOSCon 2011
Ad

Viewers also liked (12)

PPTX
Php internal architecture
PDF
PHP WTF
PPTX
PDF
Being functional in PHP (PHPDay Italy 2016)
PDF
PHP, Under The Hood - DPC
PPTX
Internet of Things With PHP
PPTX
Laravel Beginners Tutorial 1
KEY
Php 101: PDO
PDF
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
PPT
How PHP Works ?
PDF
LaravelConf Taiwan 2017 開幕
PDF
Route 路由控制
Php internal architecture
PHP WTF
Being functional in PHP (PHPDay Italy 2016)
PHP, Under The Hood - DPC
Internet of Things With PHP
Laravel Beginners Tutorial 1
Php 101: PDO
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
How PHP Works ?
LaravelConf Taiwan 2017 開幕
Route 路由控制
Ad

Similar to PHP Optimization (20)

PDF
PHP & Performance
PDF
PHPDay 2013 - High Performance PHP
PDF
php & performance
PDF
PHP & Mysql Code optimization
PDF
Dutch php conference_2010_opm
PPTX
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
PDF
Php go vrooom!
PPTX
Northeast PHP - High Performance PHP
PPT
Heavy Web Optimization: Backend
PPT
Php performance
PDF
Performance and optimization CakeFest 2014
PDF
6tips web-perf
PDF
PHP Performance Trivia
PDF
Big Master Data PHP BLT #1
PDF
Top ten-list
PDF
Profiling PHP with Xdebug / Webgrind
PDF
Top 10 Perl Performance Tips
PDF
Advanced Php - Macq Electronique 2010
PPTX
Profiling and Tuning a Web Application - The Dirty Details
PHP & Performance
PHPDay 2013 - High Performance PHP
php & performance
PHP & Mysql Code optimization
Dutch php conference_2010_opm
Web Performance, Scalability, and Testing Techniques - Boston PHP Meetup
Php go vrooom!
Northeast PHP - High Performance PHP
Heavy Web Optimization: Backend
Php performance
Performance and optimization CakeFest 2014
6tips web-perf
PHP Performance Trivia
Big Master Data PHP BLT #1
Top ten-list
Profiling PHP with Xdebug / Webgrind
Top 10 Perl Performance Tips
Advanced Php - Macq Electronique 2010
Profiling and Tuning a Web Application - The Dirty Details

Recently uploaded (20)

PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PPTX
ISO 45001 Occupational Health and Safety Management System
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PPT
Introduction Database Management System for Course Database
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
Introduction to Artificial Intelligence
PPTX
ManageIQ - Sprint 268 Review - Slide Deck
PDF
Nekopoi APK 2025 free lastest update
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
ISO 45001 Occupational Health and Safety Management System
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Introduction Database Management System for Course Database
Operating system designcfffgfgggggggvggggggggg
Design an Analysis of Algorithms II-SECS-1021-03
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Introduction to Artificial Intelligence
ManageIQ - Sprint 268 Review - Slide Deck
Nekopoi APK 2025 free lastest update
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PTS Company Brochure 2025 (1).pdf.......
Which alternative to Crystal Reports is best for small or large businesses.pdf
Wondershare Filmora 15 Crack With Activation Key [2025

PHP Optimization

  • 1. PHP Optimization by Dave Jesch - SpectrOMTech.com OC WordCamp - June 7, 2014 How to make your code run faster
  • 2. There will be code. Warning: © 2014 SpectrOMTech.com. All Rights Reserved.
  • 3. Optimization Dave Jesch, Lifetime Geek ➔1.0 Web Applications ➔Sales Conversion Plugins ➔eCommerce Solutions Principal, SpectrOMTech.com © 2014 SpectrOMTech.com. All Rights Reserved.
  • 4. Mastering Security & Optimization... © 2014 SpectrOMTech.com. All Rights Reserved.
  • 5. 1. How to Measure Improvement 2. Basic Optimization Techniques 3. Code Examples Today’s Goals: © 2014 SpectrOMTech.com. All Rights Reserved.
  • 6. Secret Behind Optimization © 2014 SpectrOMTech.com. All Rights Reserved.
  • 7. 1. Ways to Measure Outcome © 2014 SpectrOMTech.com. All Rights Reserved.
  • 8. What are we Measuring? ● Speed ● Memory ● Code simplification / maintenance © 2014 SpectrOMTech.com. All Rights Reserved.
  • 9. Number of Operations O(n) notation is used to express the worst case order of growth of an algorithm. How an algorithm’s worst-case performance changes as the size of the data set it operates on increases. http://www.perlmonks.org/?node_id=227909 © 2014 SpectrOMTech.com. All Rights Reserved.
  • 11. 2. Let’s make your code Awesome! © 2014 SpectrOMTech.com. All Rights Reserved.
  • 12. General Optimizations (1 of 7) ● Upgrade! ● 'string' is not the same as "string". [2.62 : 3.78 @10,000,000] ● Use built-in functions, especially for arrays and strings. array_column()/array_replace()/implode()/ explode(), etc. © 2014 SpectrOMTech.com. All Rights Reserved.
  • 13. General Optimizations (2 of 7) ● Identity 1===1 vs. Equality '1' == 1 [1.63 : 3.72 @10,000,000] ● Shift (n >> 1), not divide (n / 2) [2.34 : 2.75 @10,000,000] ● Don’t make needless copies. © 2014 SpectrOMTech.com. All Rights Reserved.
  • 14. General Optimizations (3 of 7) ● Use reference operator $x = &$array['key'] [1.95 : 2.01 @10,000,000] ● unset large arrays when no longer needed. ● echo $a,$b; faster than echo $a.$b; [1.11 : 2.48 @1,000,000] © 2014 SpectrOMTech.com. All Rights Reserved.
  • 15. General Optimizations (4 of 7) ● Avoid @ error control operator. ● Pre increment ++$i faster than post increment $i++ [0.95 : 1.05 @10,000,000] ● "foreach" for arrays is better than "for" [1.38 : 4.35 @100,000] © 2014 SpectrOMTech.com. All Rights Reserved.
  • 16. General Optimizations (5 of 7) ● Initialize! using undefined variables is slower than pre- initialized variables. [0.82 : 4.41 @10,000,000] ● Don’t global unless you use it. [1.82 : 2.01 @10,000,000] ● switch is faster than if (…) elseif (…) ... © 2014 SpectrOMTech.com. All Rights Reserved.
  • 17. General Optimizations (6 of 7) ● !isset($foo{5}) faster than strlen($foo) < 5 [0.26 : 0.84 @10,000,000] ● str_replace() faster than preg_replace() strtr() faster than str_replace() [0.47 : 0.49 : 1.05 @100,000] © 2014 SpectrOMTech.com. All Rights Reserved.
  • 18. General Optimizations (7 of 7) ● "{$var}" is faster than sprintf() [2.19 : 6.87 @10,000,000] ● incrementing global var slightly slower than a local var [8.98 : 9.09 @100,000,000] ● use ctype_alnum(), ctype_alpha() and ctype_digit() over regex © 2014 SpectrOMTech.com. All Rights Reserved.
  • 19. 3. Examples: © 2014 SpectrOMTech.com. All Rights Reserved.
  • 20. Bubble Sort Optimized: O(n^2) Best case: O(n) $len = count($arr); for ($i = 0; $i < $len; ++$i) { $swapped = false; for ($j = 0; $j < $len - 1; ++$j) { if ($arr[$i] < $arr[$j]) { $x = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $x; $swapped = true; } } if (!$swapped) break; } Non-Optimized: O(n^2) for ($i = 0; $i < count($arr); $i++) { for ($j = 0; $j < count($arr) - 1; $j++) { if ($arr[$i] < $arr[$j]) { $x = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $x; } } } © 2014 SpectrOMTech.com. All Rights Reserved.
  • 21. Reuse Function Results Non-Optimized: if (get_option('some_setting') > 0) $var = get_option('some_setting'); else $var = 0; Optimized: // use option or set to 0 if option not set if (($var = get_option('some_setting')) < 0) $var = 0; © 2014 SpectrOMTech.com. All Rights Reserved.
  • 22. Iterating Arrays Non-Optimized: // iterate through an array foreach ($aHash as $key => $val) { call_func($aHash[$key]); } 12.01 seconds @10,000,000 Optimized: // iterate through an array while (list($key) = each($aHash)) { call_func($aHash[$key]); } 0.73 seconds @10,000,000 © 2014 SpectrOMTech.com. All Rights Reserved.
  • 23. For Loops Non-Optimized: // loop through all elements of array for ($i = 0; $i < count($a); ++$i) { // do something } Optimized: // loop through all elements of array for ($i = 0, $c = count($a); $i < $c; ++$i) { // do something } © 2014 SpectrOMTech.com. All Rights Reserved.
  • 24. Latency Solutions: Transients // get data from transient if (($value = get_transient('my_transient_name')) === false) { // nothing in transient, get from remote API $value = wp_remote_get('http://some-domain.com', $args); // save data from API in transient set_transient('my_transient_name', $value, $expiration); } © 2014 SpectrOMTech.com. All Rights Reserved.
  • 25. Ordering of Conditions if (fastest() || fast() || slowest()) { // some code here } ________________________________________________________________ if (op1() && op2() && op3()) { // more code } © 2014 SpectrOMTech.com. All Rights Reserved.
  • 26. Code Optimized! 1. Practice, practice, practice 2. Always more to learn 3. Balancing act 4. Art form meets science © 2014 SpectrOMTech.com. All Rights Reserved.
  • 27. WP Geek Lab- Give back to WordPress.org Alone we can do so little; together we can do so much. - Helen Keller Connect with us at Hello@SpectrOMTech.com for more info. write code...fix bugs...hangout...talk geek...