When we write programs, we always want to make our programs take the least amount of resources, run faster, and have less code. We often lose a lot of things while pursuing these. Now I want to talk about my understanding of PHP optimization. The goal of optimization is to get the fastest running speed and the easiest code to maintain with the least cost.
To do a wide range of optimizations, rather than die gnawing some program code
The optimization I'm talking about here is basically optimized from servers, Apache, databases, and not to your PHP code to improve the speed of your program, because instead of the regular optimizations in your program to string-handler functions to increase the speed of the program, The cost of optimization in a wide range is much smaller than this, and the rewards are much richer.
Optimization at a non-code place has the following benefits:
1, usually can greatly improve the efficiency
2, does not compromise the integrity of the code
3. Able to quickly deploy
Caching Technology
The following is a common caching technique that can greatly improve efficiency through these caching techniques
When it comes to caching technology, we have to mention memcached, memcached is an efficient and fast distributed memory object caching system that is used to speed up WEB dynamic applications.
the principle of memcached
Memcached is run as a daemon on one or more servers, waiting for a connection from the receiving client, and the client can be written in a variety of languages (such as PHP). PHP and other clients in connection with the Memcached service, the next thing is to access objects, each accessed object has a unique identifier key, access operations through this key, saved to the Memcached object is actually placed in memory, is not stored in the cache file, which is why memcached can be so efficient and fast.
After memcached, let's say the common caching method
1, compile and opcode cache
Because PHP is an interpreted language, every PHP file needs to be compiled and executed at run time, with the same file, different user access, or the same user accessing the same file at different times, each time needing to recompile and run, which consumes a lot of time.
Compile-cache Each file is compiled only once after modification this reduces file IO operations, and the user accesses the machine instructions directly from the memory and executes them instead of reading them on the hard disk.
The most common PHP compiler cache tools are: Apc,accelerator,xcache
2, the global page cache-Squid Cache
Squid cache (squid for short) is a popular free software (GNU General Public License) proxy Server and Web caching server, squid as a Web server's predecessor cache server to cache related requests to improve the speed of the Web server.
3, the local cache of SQL cache
The main bottlenecks in most applications can often be traced back to the operations of the database, typically because of the large amount of time spent on complex database queries, and SQL caching can greatly reduce the load caused by complex queries.
Examples of SQL caching (using the memcached extension)
Code fragment:
$key = MD5 ("Some sort of SQL query");
if (!) ( $result = Memcache_get ($key))) {
$result = $pdo->query ($qry)->fetchall ();
Cached query Results one hour
Memcache_set ($key, $result, NULL, 3600);
}
4, the local cache code block cache
In order to optimize the PHP program, sometimes we have to optimize a piece of code to reduce a little bit of execution time, but compared to optimize the complexity of different PHP code snippets than the cache to directly ignore the code snippet optimization, the benefit is:
1, can quickly see the effect
2, will not break the previous code
3, speed is much faster than the optimization code
code block caching (also using the memcached extension)
Code fragment:
function complex_function_abc ($a, $b, $c) {
$key = __function__. Serialize
(Func_get_args ());
if (!) ( $result = Memcache_get ($key))) {
$result =//function code
Store execution results for 1 hours
Memcache_set ($key, $result, NULL, 3600);
}
return $result;
}
Of course, in addition to the above methods can also use the file cache (the data in the database to be stored in the file), but also generate static HTML files, etc., but the caching of these methods is still the file stored on the hard disk rather than in memory.
Output Control
In addition to the above caching technology, you can use output control to make programs execute less time
Here is the output control via PHP and Apache.
1. PHP Output Control
The main use here is the Ob_start () and the OB series functions in PHP, what can these functions do?
The first is static template technology. The so-called static template technology is in some way, so that users on the client side is generated by PHP HTML page. If the HTML page is not updated, then when another user browses to the page again, the program will no longer invoke PHP and the associated database, for some of the more informative sites, such as Sina,163,sohu. The benefits of this kind of technology are enormous.
code example:
<?php
Ob_start (); Open buffer
?>
All output of PHP page
<?php
$content = Ob_get_contents (); Get all the content of the PHP page output
$fp = fopen ("output.html", "w"); Create a file and open it, ready to write
Fwrite ($fp, $content); Write the contents of the PHP page to output.html, and then ...
Fclose ($FP);
?>
Of course there are many other uses for this OB series function that I am not here to explain.
2. Apache Output Control
Set the Sendbuffersize to the page size so that the page can be placed at once in the send buffer to increase processing speed.
Sendbuffersize directives
Description: TCP Send buffer size (bytes)
Syntax: sendbuffersize bytes
Default value: Sendbuffersize 0
Scope: Server Config
Status: MPM
Modules: BeOS, Mpm_netware, Mpm_winnt, Mpmt_os2, prefork, worker
This instruction sets the size (in bytes) of the TCP send buffer for the server. Increasing this value can result in two consequences: high speed and high latency (around 100ms). If set to "0", the operating system defaults will be used.
Compiling your apache/php/database in source code allows your program to increase the speed of 10--15%
Here's what you should be aware of when optimizing code
1, short code is not equal to fast code
Many people want to write the code as concise as possible, but the shorter code sometimes takes longer to execute, so even with more code, it doesn't use slow code.
2, in the writing process should pay attention to the expansion of the program, rather than the pursuit of speed
3, before optimizing your code, look at the database-related parts, because most of the application bottlenecks in the database rather than the code
4, micro-optimization outweigh the gains
What is called micro-optimization? As mentioned earlier, replace the code in the regular Expression section with a string function instead. This has the following disadvantages:
(1) Take a long time
(2) will not solve your performance problems
(3) It is likely that the previous code will be corrupted to produce an unknown error
(4) Pay more than return
Here also have to mention a misunderstanding, some people in order to make the program more optimized, in the analysis of business logic will be optimized to consider in, so as to get better code and change the business logic. This is a very foolish idea, because the purpose of the procedure is to deal with the problems encountered in reality and to serve these problems.