-- Shekar C Reddy <[EMAIL PROTECTED]> wrote
(on Friday, 14 December 2007, 12:50 PM -0600):
> I would suggest to incorporate a method that serves as a central location to
> instantiate exception objects - a consistent object-instantiation system, if
> you will. This method could go inside a class that is always required/loaded
> so
> we don't have to include another file just for this purpose. Zend_Loader,
> maybe? This approach allows us to add more processing/error-handling logic to
> the method in future that ripples across the framework:
>
> //////////////////////////////////////////////////////////////////////////
> static function getException( $class, $message = 'ERROR', $code = 0, ... )
> //////////////////////////////////////////////////////////////////////////
> {
> self::loadClass( $class );
> //
> // Or straight require_once for performance, but then format the
> class-name to instantiate...
> // require_once( $class );
> //
> return new $class( $message, $code, ... );
> }
> ///////////////////////////////////////////////////////////////////////////////
> /
>
> Then, from within the code where an exception needs to be thrown, this becomes
> just a simple one-liner, instead of spilling require_once/etc lines of code
> all
> over the framework:
>
> throw Zend_Loader::getException( <class>, <message>, <code>, ... );
There are *no* classes right now that get loaded by every other class;
doing so introduces unwanted coupling.
> 2. On another note, how about other class-files that get included
> superfluously? I'm quite sure there are an awful lot of files included
> in the framework's classes without ever being used. ViewRenderer.php
> is just an example.
For what it's worth, the ViewRenderer is loaded during dispatch() only
if the user has not set the 'noViewRenderer' flag; same with the
ErrorHandler plugin. Users complained about them being loaded, and we
listened. :-)
> If we really want to reduce the number of included files to improve
> performance, we need to work on these ones, too. Bottom line - include
> files only on a need-to-use basis and just-in-time! I, for one, don't
> want any files loaded that I don't want to use in my application - its
> just an over-head.
Perhaps you could go and create a list that shows these? I think in most
cases, we're not doing includes unless needed... with the exception of
exception classes, but we cannot know unless somebody produces an audit.
> On 12/13/07, Shahar Evron <[EMAIL PROTECTED] > 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.
>
> --
>
> Shahar.
>
>
>
--
Matthew Weier O'Phinney
PHP Developer | [EMAIL PROTECTED]
Zend - The PHP Company | http://www.zend.com/