I personally put this in the category of 'Performance Enhancement' (and not of Viagra persuasion).

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? ;)

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

-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.


Reply via email to