Php Site Optimization

24
PHP site optimization Demonstrating a Zend framework website performance improvement and optimization.

Transcript of Php Site Optimization

Page 1: Php Site Optimization

PHP site optimization

Demonstrating a Zend framework website performance improvement and optimization.

Page 2: Php Site Optimization

Areas of improvement

Application Framework

Database

Network Latency

IO Contention

CPU Utilization

Network Connectivity

Others

Page 3: Php Site Optimization

Performance or Scalability. Both?

Hiphop (Facebook implementation of php) is high performing but not scalable

Page 4: Php Site Optimization

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

Database performance

Query simplification

Query optimization

Schema tuning

Replication

Sharding

Clustering

Page 6: Php Site Optimization

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

DNS Reverse Lookups

Use ipaddress wherever possible

Page 8: Php Site Optimization

TCP Handshakes

Use persistent connections to remote/local-network services wherever possible

Page 9: Php Site Optimization

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

IO Contention

Page 11: Php Site Optimization

CPU Utilization

Page 12: Php Site Optimization

Network Connectivity

Page 13: Php Site Optimization

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

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

Active Record Issues

Page 16: Php Site Optimization

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

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

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

Magic methods

__get, __set, __call

Used by Soap, data tables, java objects

Use sparingly and avoid too much recursion

Page 20: Php Site Optimization

Code Acceleration

APC, Zend Optimizer

Increase performance by 3-4 times

Page 21: Php Site Optimization

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

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

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

Benchmarking