Matthew, Zend_Controller_Front.php has the following lines of code on the top instead of conditionally requiring them in dispatch():
/** Zend_Controller_Action_Helper_ViewRenderer */ require_once 'Zend/Controller/Action/Helper/ViewRenderer.php'; /** Zend_Controller_Plugin_ErrorHandler */ require_once 'Zend/Controller/Plugin/ErrorHandler.php'; For those who don't use ViewRenderer and ErrorHandler, these files still get included on each page-load unless they are moved into dispatch() to require them conditionally: http://framework.zend.com/issues/browse/ZF-2313 Regards, On 12/14/07, Matthew Weier O'Phinney <[EMAIL PROTECTED] > wrote: > > -- 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/ >
