Wednesday, April 25, 2012

Does autoload really kill performance when using APC(latest versions/up to date). Benchmarks?


I am trying to find a definite answer to the question that autoload kills performance when using APC and why(benchmarks?)



P.S. Found this link using google/stackoverflow, but I am wondering if this still holds? PHP must been improved to handle this? Because autoload is kind of cool!


Source: Tips4all

2 comments:

  1. Personally, I don't believe relying on __autoload() is good practice. PHP is a loosely typed language, not a lazily typed language. :)

    Check out some performance here:


    http://weierophinney.net/matthew/archives/245-Autoloading-Benchmarks.html
    http://www.ilia.ws/files/zend_performance.pdf


    Rasmus's answer on this (which you also found) was my guidline through all this years:

    <arnaud_> does autoload have a performance impact when using apc ?
    <Rasmus_> it is slow both with and without apc
    <Rasmus_> but yes, moreso with apc because anything that is autoloaded is pushed down into the executor
    <Rasmus_> so nothing can be cached
    <Rasmus_> the script itself is cached of course, but no functions or classes
    <Rasmus_> Well, there is no way around that
    <Rasmus_> autoload is runtime dependent
    <Rasmus_> we have no idea if any autoloaded class should be loaded until the script is executed
    <Rasmus_> top-level clean deps would speed things up a lot
    <Rasmus_> it's not just autoload
    <Rasmus_> it is any sort of class or function declaration that depends on some runtime context
    <Rasmus_> if(cond) function foo...
    <Rasmus_> if(cond) include file
    <Rasmus_> where file has functions and classes
    <Rasmus_> or heaven forbid: function foo() { class bar { } }

    ReplyDelete
  2. I did some more googling and found this interesting article summarized below:

    Benchmarks were run 10 times for each strategy:



    Conclusion

    Each approach has its merits. During development, you don't want to necessarily run a script to generate the class map or manually update the class map every time you add a new class. That said, if you expect a lot of traffic to your site, it's trivially easy to run a script during deployment to build the class map for you, and thus let you eke out a little extra performance from your application.

    ReplyDelete