I'm depressed now :( apc.php on my system reports: Hits: 12395 (98.2%) Misses: 221 (1.8%)
So I thought it was doing well(?) On Wednesday 20 February 2008 22:08, Bill Karwin wrote: > Nogyara wrote: > > The type of caching APC does (opcode caching) works AUTOMATICALLY, so you > > don't have to care about it at all. > > Yes and no. Rasmus Lerdorf has explained (http://pooteeweet.org/blog/538) > that opcode caching is a compile-time optimization. Runtime inclusion of > code happens after compile-time is past, and therefore cannot use the > opcode cache. > > Basically if you use "require_once" in the global part of a PHP script, > it's resolved at compile-time and APC can fetch the code from its opcode > cache for the file you require (and any other files required by that file). > > However, any runtime "require_once" is resolved too late to benefit from > the opcode cache. For example, loading classes in a function, loading > classes depending on a PHP variable, and use of autoload. The code has to > be fetched from the filesystem at runtime and compiled on the fly. It's as > if you aren't using an opcode cache solution. > > Some OO architectures necessarily load code at runtime. For example, in a > ZF application, the MVC Router decides which controller class to load based > on the current request's URL. This loads a controller class at runtime, as > well as any model classes and view scripts employed by that controller. > None of this classloading benefits from the APC opcode cache. > > This limitation is PHP's Achilles Heel. Many design patterns, and even > simpler forms of OO programming such as polymorphism, are resistant to > optimization by the opcode cache - the chief performance solution for the > language. > > Rasmus wrote an article describing a "no-framework PHP MVC framework" > (http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.htm >l). Notice his solution doesn't use a front-controller architecture. > Instead, he turns that architecture upside-down. There is no router; > routing is simply a mapping of the request URL directly to the path of the > view script (you can use mod_rewrite to make URL's prettier). Then the > view script loads any additional code it needs, using compile-time > includes, which do benefit from the opcode cache. > > Do use ZF or other MVC frameworks for the benefit they give to development > and maintenance. But don't expect the opcode cache to be a magical way to > make everything run faster. > > Regards, > Bill Karwin
