Like most of us, I'm tired of reading blog posts about meaningless micro-optimizations like replacing print with echo, $i with $i, or double quotes with single quotes. Why? Because 99.999999% of the time, it doesn't matter. You'd better install a PHP accelerator like APC or add these missing indexes in the database columns or try to avoid 1000 database requests on the home page.
Suppose you really want to know the answer to this question. Instead of trying to write a script and execute it a million times to find the fastest speed, I would like to show you some interesting tools that you may find very useful sometimes because they allow you to better understand what you are writing PHP code.
Enter VLD, the "Vulcan Logic Disassembler". VLD is written by Derrick Rethans, and as you can see on the VLD homepage, it "hooks into the Zend engine and dumps all opcodes (execution units) of the script".
Installing VLD is very simple. Download the latest version and install it like any other PHP extension:
$ phpize $ ./configure $ sudo make install
Enable extension in php. ini file:
extension=vld.so
It's time to look under the hood. Create two simple files, one using echo and the other using print:
// print.php
Use -d vld to execute these scripts from the command line. The activate=1 parameter activates the VLD output. Let's look at the opcodes generated by these scripts:
$ php -d vld.active=1 print.php
-
number of ops: 4 compiled vars: none line # op fetch ext return operands ------------------------------------------------------------------------------- 1 0 PRINT ~0 'foo' 1 FREE ~0 2 2 RETURN 1 3* ZEND_HANDLE_EXCEPTION
-
$ php -d vld.active=1 echo.php
-
number of ops: 3 compiled vars: none line # op fetch ext return operands ------------------------------------------------------------------------------- 1 0 ECHO 'foo' 2 1 RETURN 1 2* ZEND_HANDLE_EXCEPTION
Notice the difference? Yes, print also uses an opcode because it actually returns something. We can conclude that echo is faster than print. But an opcode costs nothing, even if a script has hundreds of calls to print.
Because print always returns 1, you can do the following interesting things, which are not possible in echo:
[php]
Want to know what to do when running a script with a lot of content Number of codes? Try this:
$ php -d vld.active=1 print.php 2> output $ grep "number of ops" output | cut -f 5 -d ' ' | (tr '\n' +; echo 0) | bc
I tried it with a new WordPress installation. The script pauses before ending with a "bus error" on my laptop, but the number of opcodes has exceeded 2.3 million.
The above is the detailed content of print vs echo, which one is faster?. For more information, please follow other related articles on the PHP Chinese website!