Hi Ralph,

On Thu, 2007-12-13 at 14:39 -0600, Ralph Schindler wrote:
> I personally put this in the category of 'Performance Enhancement' (and 
> not of Viagra persuasion).
> 

True.

> The overall problem is multi-faceted.. One must consider 
> runtime-performance, compile-time/run-time performance, ability of 
> op-code caches to interact with run-time loading of code, ability of 
> IDE's and other tools to link required files not in a files main() scope.
> 
> That said, I think its best we wait until after 1.5 to sit down and 
> completely evaluate ZF from a performance perspective as well as 
> evaluate the tooling associated with ZF (or any code for that matter) 
> before we make runtime exception requirements part of the Coding Standard.
> 
> Premature Optimization right? ;)
> 

The optimization might be premature (perhaps) but I don't think setting
up a policy will be premature. There's no harm in saying that "this is
our standard" - we don't have to start going over the files one by one
fixing them as a high priority task. 

I'd try to come up with a list, put it on JIRA or even the Wiki, and let
developers start fixing them at their own time - at least until it is
decided to be of high priority. I'd also announce this as a policy, so
that new code will follow these rules.

> Hehe, all joking aside, I personally would love to see hard data on the 
> interactions of require_once and opcode caches.
> 

Loading and compiling files has quite an impact on performance, and
opcode cache systems reduce the run time of apps with lots of include
files *dramatically*. I can say from personal experience (those kind of
benchmarks are my bread and butter) that you can take a "Hello World"
app based on ZF and make it 3 times faster (!!!) by simply enabling Zend
Platform's Accelerator component (and probably any other opcode cache
system, I usually don't benchmark APC and the others).

It should be noted that this is true for any heavy framework or complex
PHP app I've seen - for example, I've seen a Drupal based site go 7
times faster because of opcode cache.

Shahar.

> -ralph
> 
> 
> 
> Shahar Evron wrote:
> > A while back ago there was an attempt to eliminate the loading of unused
> > Exception files / classes by different ZF components. I don't know what
> > happened with that discussion, but I think we should do something about
> > it.
> > 
> > I've made some profiling of relatively simple ZF-based app (doesn't load
> > too many components - mostly the MVC, DB, Config, Registry etc. stuff)
> > and I've found some 10 calls to require_once to load an Exception class
> > without having a single exception thrown (that I know of - unless some
> > ZF code threw an exception and some other ZF component caught it). 
> > 
> > 10 redundant include files have quite an impact on performance,
> > especially in places where you have no opcode cache installed. 
> > 
> > A while back ago I changed Zend_Http_Client to require_once it's
> > exception classes only when about to throw an exception, something like:
> > 
> > <?php
> >   if ($error_happened) {
> >     require_once 'Zend/Http/Client/Exception.php';
> >     throw new Zend_Http_Client_Exception('Good news, everyone!');
> >   }
> > ?>
> > 
> > Now this might seem a bit cumbersome - but when considering the fact
> > that it's 1 line of code that never gets executed vs. always loading at
> > least one aditional file (not to mention cases where you load
> > Zend/Http/Client/Adapter/Exception.php which loads
> > Zend/Http/Client/Exception.php which loads Zend/Http/Exception.php which
> > loads Zend/Exception.php - you get the point) I think it's worth it. 
> > 
> > If nobody has a nicer solution to this overweight problem, I suggest all
> > component maintainers will start doing the same (this is not my idea and
> > I know some already do so). 
> > 
> > If you want, I can try to come up with a list of places that need to be
> > fixed.
> > 
> > Better suggestions are most welcome!
> > 
> > Thanks,
> > 
> > Shahar.
> > 

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to