Skip to main content

Does PHP have a built in optimizer?


Like how MySQL Optimizer will convert queries into more efficient queries as it sees fit, is there a similar optimization process going on behind the scenes with PHP? Where PHP takes your code, analyzes it and converts it to be more efficient all before executing it?



Source: Tips4allCCNA FINAL EXAM

Comments

  1. PHP uses a single-pass compilation process in which it converts the source code into an opcode stream (which is then executed). Because the compilation uses only a single pass and does not build an AST most optimizations commonly done by other languages would be very hard to implement. There obviously are some simple optimizations done (like interning strings and prehashing symbols), but most of the "advanced" optimizations are simply not possible.

    By the way, a very simple way to "optimize" PHP code is to cache the generated opcode stream using the APC extension, so that it isn't recreated on every page load: The compilation process is quite resource intensive and using APC can often lower your CPU usage quite a bit.

    ReplyDelete
  2. PHP itself probably does some optimizations during interpretation, though I am not aware of any significant ones.

    But since PHP is extendable, a range of so-called PHP accelerators can be found around the web. An accelerator is a PHP extension which does some form of optimization for you, typically by employing opcode caching or similar.

    Distinguishing between interpretation (what the standard PHP distribution does) and compilation, several PHP compilers are available. You can pass PHP code through a PHP compiler which (rather than interpreting and executing the code on the fly) builds an optimized executable format for you.

    ReplyDelete

Post a Comment

Popular posts from this blog

Wildcards in a hosts file

I want to setup my local development machine so that any requests for *.local are redirected to localhost . The idea is that as I develop multiple sites, I can just add vhosts to Apache called site1.local , site2.local etc, and have them all resolve to localhost , while Apache serves a different site accordingly.