[wp-hackers] This is a Performance Enhancement? Clarification
Jacob Santos
wordpress at santosj.name
Thu Jan 7 23:15:52 UTC 2010
Well, that touches on something I had meant to clarify, but forgot to.
Compiling does not equal execution and is generally a fairly quick
process. It is only when you run functions, classes, and whatever that
it matters [1], so generally it shouldn't be considered that
conditionally including will speed anything up, even if for a tiny of
cases it won't be needed. The problem is that sometimes you can't get
around it without doing a lot of extra work and hassle that may include
bugs.
You could replace the plugin inclusion by creating a PHP file that did
the inclusions of the plugins and was updated whenever the plugin page
was updated. This however, is a great deal more difficult and creates a
file for the sole purpose of replacing the database option. Sure, it
will be faster, but at the cost of complexity. Furthermore, you'll
probably still want to have a conditional to ensure that the site
doesn't break when plugins are deleted or moved. It is an balancing
between benefits of different factors vs performance and I would say
that it is better the way it is now. The overhead is smaller than the
work it would take to prevent having the overhead and would only
minimize the loop and database option. This is an example of where it
makes sense.
Where it doesn't make sense is to do it for performance, because it adds
overhead and something that adds overhead shouldn't be used to improve
performance. That is probably as close to the definition of crazy or
insane as one can get.
The PHP/Zend engine does not do JIT (as in compiling to machine code or
as close to machine code as possible, the PHP opcodes are not machine
specific but PHP engine specific). If you are using PHP compiled to MS
CLR and using the runtime to convert it to CIL, then that is probably as
close as you are going to get to JIT compilation. There are also some
outdated applications that will compile PHP down to C for creating an
Executable. However, for the small percentage that are doing that, then
good for them, the rest of us has to deal with the PHP/Zend Engine and
hopefully includes some opcode caching to offset some of the overhead of
compilation.
Jacob Santos
[1] The function stack usually is what takes time during execution, but
when you add on top of that having to stop PHP to compile the function
and then create the stack, it doesn't perform as well. When it is all
done in the first stage then I'm a lot more happy. The vast majority of
WordPress with handling of Plugins really dogs this and I think some of
it was done for "performance" and there have been discussions of
conditionally including files to "speed" up WordPress before Ryan dug up
the sources that articulated that this was not the case, has never been
the case and that the opposite is true [2].
[2] The reason I'm being a jerk is so that hopefully people remember
this discussion and pass it along. I hate making people feel like fools
for being wrong, because hell I've been wrong, but on this topic, I'm
not. I would feel better if someone told me that I was wrong, so that I
don't get into a position talking to someone who knows better and
speaking as if I do as well. Some people are eventually going to go off
and try to get PHP programming jobs and not knowing your stuff makes you
look incompetent even before you can prove otherwise[3].
[3] Well, unless it is a junior or entry level position, then you aren't
exactly expected to know everything. Most likely if you only specialized
in WordPress development (plugin, theme, core), you probably don't
anyway. Good experience and looks great on a Resume, don't I believe it [4].
[4] I don't actually do a lot of WordPress work at my job. Actually, we
are migrating away from WordPress, which is bittersweet. Bitter because
I devoted a lot of my time to WordPress because of my job and sweet,
because the new code functions a lot better without limitations that
exist within WordPress [5].
[5] I still think WordPress does somethings better than many of the
frameworks out there.
Otto wrote:
> On Thu, Jan 7, 2010 at 3:08 PM, Jacob Santos <wordpress at santosj.name> wrote:
>
>> Myth 2. Conditional loading speeds up PHP.
>>
>> The problem I have with the comment [3] is that it uses the myth that
>> conditional functions and file loading speeds up execution of PHP, when you
>> can not find a single source that will ever say this. In fact, all of them
>> will say that it slows down execution, because PHP has to stop the
>> execution, go back to the compile stage and then go back to the execution.
>>
>
> Well, file loading on-the-fly has to do that anyway, right?
>
> I mean, not doing an include is always faster than doing the include
> *if* the cost of the include is higher than the cost of the comparison
> you're making to determine whether or not to do the include. Of
> course, if doing the include turns out to be the most common case,
> then your conditional might not be worth the trouble.
>
> And anyway, I thought most modern PHP executables did JIT compiling nowadays.
>
> Best is to design your code so that the include happens when it's
> known to be needed, but not earlier.
>
> I agree with you with regards to functions, and to how this sort of
> thing in general may hurt opcode cache systems.
>
> -Otto
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>
More information about the wp-hackers
mailing list