Php Site Optimization
-
Upload
amit-kejriwal -
Category
Technology
-
view
787 -
download
1
Transcript of Php Site Optimization
![Page 1: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/1.jpg)
PHP site optimization
Demonstrating a Zend framework website performance improvement and optimization.
![Page 2: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/2.jpg)
Areas of improvement
Application Framework
Database
Network Latency
IO Contention
CPU Utilization
Network Connectivity
Others
![Page 3: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/3.jpg)
Performance or Scalability. Both?
Hiphop (Facebook implementation of php) is high performing but not scalable
![Page 4: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/4.jpg)
Workload distribution of a page request
10% web server
40% php processing
50% database response
10-15% improvement easily achievable using a commonly used alternative stack i.e. Nginx + APC + Htmlcaching + Memcache + CDN
![Page 5: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/5.jpg)
Database performance
Query simplification
Query optimization
Schema tuning
Replication
Sharding
Clustering
![Page 6: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/6.jpg)
Network Latency
How to identify?
When both page response and CPU usage are slow
Reasons?
DNS Reverse Lookups, TCP Handshakes, High number of hops
Tools?
Tcpdump, ping, traceroute ..
![Page 7: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/7.jpg)
DNS Reverse Lookups
Use ipaddress wherever possible
![Page 8: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/8.jpg)
TCP Handshakes
Use persistent connections to remote/local-network services wherever possible
![Page 9: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/9.jpg)
Number of Hops
Try to put servers on same switch or in the same LAN.
Physical layer and network layer trade offs to be avoided
![Page 10: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/10.jpg)
IO Contention
![Page 11: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/11.jpg)
CPU Utilization
![Page 12: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/12.jpg)
Network Connectivity
![Page 13: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/13.jpg)
Active Record (made popular by Ruby on Rails)
Data Mapper
Collection
Doctrine
Data access methods used by Yii, CI, Symphony ...
ORM options
![Page 14: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/14.jpg)
Active Record (AR)
It is an object-relational mapping and object-persistence pattern
It binds a business object with a relational record (row)
AR class maps to a db table (or view)
AR instance maps to a db table record
AR instance properties maps to db table record fields
Instance methods act on a specific record
![Page 15: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/15.jpg)
Active Record Issues
![Page 16: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/16.jpg)
Data Patterns in Zend Framework
Zend_Controller_Front
Singleton
FrontController
Zend_Db_Table
Table Data Gateway
Zend_Log
Factory Method
Adapter
![Page 17: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/17.jpg)
Profiler with Zend_DB
$db = Zend_Db::factory('Pdo_Mysql', array('host' => '127.0.0.1',
'username' => 'user1',
'password' => 'pwd',
'dbname', 'ex_db',
'profiler' => true));
After query execution using $db:-
$prof = $db->getProfiler();
$prof->getTotalElapsedSecs();
$prof->getTotalNumQueries();
![Page 18: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/18.jpg)
Preg
Stripos is 2 times faster than preg
ctype_alnum is 5 times faster than preg
Casting “if ($var == (int) $var)” is 5 times faster than preg_match(“/^\d*$/”, $var)
![Page 19: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/19.jpg)
Magic methods
__get, __set, __call
Used by Soap, data tables, java objects
Use sparingly and avoid too much recursion
![Page 20: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/20.jpg)
Code Acceleration
APC, Zend Optimizer
Increase performance by 3-4 times
![Page 21: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/21.jpg)
Queue
Queueing is offloading long running tasks to queuing system
Job Queue
Gearman
Message Queue
ActiveMQ
AWS Simple Queue Service
![Page 22: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/22.jpg)
What not to do
Caching should be the last thing to do. (Focus on performance optimization)
Avoid LIKE queries. (Try Solr, Zend_Lucene)
![Page 23: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/23.jpg)
What to do
Minimize require_once. Use autoloader
Horizontal architecture is better than vertical
ex. wide inheritance is better than deep level inheritance
Lazy loading / Load on Demand
Use diagnostic tools
Zend studio profiler, Code Tracing
![Page 24: Php Site Optimization](https://reader034.fdocuments.us/reader034/viewer/2022052623/5598a0721a28abaa0a8b45ef/html5/thumbnails/24.jpg)
Benchmarking