I didn't think anonymous functions were ireleased until the 5.3 branch,
which isn't near stable enough for production yet?
On May 14, 2009 10:10pm, Andrew Muraco <amur...@gmail.com> wrote:
How about this for an idea:
Write the code so that the switch returns the content of the case as a
function, this way, you can hopefully avoid having to do all those
comparisons. (obviously you would then be able to use this anonymous
function in place of the switch)
Not sure if your code would allow it tho.
-Andrew Muraco
oorza...@gmail.com wrote:
oops, just sent this to one guy =\
On May 14, 2009 3:52pm, oorza...@gmail.com wrote:
> Alright! answers :P
>
> Profiling the code, this script (which bottlenecks on the switch-case)
is 82% of execution time __with__ APC. Of the script itself, ~45% of the
execution time is this particular switch-case.
>
> I can't send the code, NDA's and whatnot, but it was basically (these
are all string comparisons that can't be refactored into numerical
comparisons, I pulled two cases out into a loop for that):
>
> if($) {
>
> } elseif ($b || $c || $d || $e) {
>
> ) elseif ($f || $g) {
>
> } else {
>
> }
>
> After changing it to
>
> switch($condition) {
>
> case 'a':
> blah;
> case 'b':
> case 'c':
> case 'd':
> case 'e':
> blah
> case 'f':
> case 'g':
> blah
> default:
> blah
>
> that conditional is about 5% faster.
>
> The script itself isn't slow, it's that it's an autoloader that has to
be ran 15-30 times per pageload and there's no viable way to make the
necessary infrastructure changes to remove it, nor is it viable to
require() manually, as that would take even more time. Before anyone
suggests, the original __autoload() was >90% of page time, and I split it
into an autoloading class and registered 4 different methods on the
autoloading stack ordered, of course, in order from most->least used.
>
> One of the things I was thinking about trying was keeping track of
classnames and paths in an internal array and serializing that resulting
array and pushing it into and pulling it out of APC (in the destructor
and constructor, respectively) and the first method on the autoloading
stack would check for $this->includeMap[$className] but I'm unsure if
that would be a sane approach or not.
>
> On May 14, 2009 5:38pm, John Campbell jcampbe...@gmail.com> wrote:
> > PHP should run ~1M switch tests per second on decent hardware. Either
> >
> > you are misinterpreting you profiling data, or running a switch
> >
> > statement a hell of a lot of time. I can't imagine any sort of
> >
> > if/else vs switch vs. jump table is going to make much of a
> >
> > difference. At best you will see a speedup of 30% or so, but that
> >
> > won't really fix the underlying problem.
> >
> >
> >
> > On Thu, May 14, 2009 at 2:12 PM, Eddie Drapkin oorza...@gmail.com>
wrote:
> >
> > > Does anyone know how the PHP Interpreter pulls switch/case
statements
> >
> > > together? Does it emulate a C compiler and, for larger case sets,
build a
> >
> > > huge if/else cascade? Does it do this always? Is there any way to
know when
> >
> > > it builds a jump table (like as/c is supposed to)? I've got a slow
script
> >
> > > (it's eating ~85% of execution time) that I can't work around and
one of the
> >
> > > slower parts is a switch case (which is slightly faster than
manually
> >
> > > building an if/else cascade) and was wondering if anyone had any
performance
> >
> > > tips for cases like these.
> >
> > >
> >
> > > _______________________________________________
> >
> > > New York PHP User Group Community Talk Mailing List
> >
> > > http://lists.nyphp.org/mailman/listinfo/talk
> >
> > >
> >
> > > http://www.nyphp.org/show_participation.php
> >
> > >
> >
> > _______________________________________________
> >
> > New York PHP User Group Community Talk Mailing List
> >
> > http://lists.nyphp.org/mailman/listinfo/talk
> >
> >
> >
> > http://www.nyphp.org/show_participation.php
> >
------------------------------------------------------------------------
_______________________________________________
New York PHP User Group Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk
http://www.nyphp.org/show_participation.php
_______________________________________________
New York PHP User Group Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk
http://www.nyphp.org/show_participation.php
_______________________________________________
New York PHP User Group Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk
http://www.nyphp.org/show_participation.php