Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

php

apc

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!

like image 890
Alfred Avatar asked Jan 24 '11 23:01

Alfred


2 Answers

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 { } }
like image 119
2 revs Avatar answered Oct 31 '22 08:10

2 revs


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

Benchmarks were run 10 times for each strategy:

enter image description here

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.

like image 34
2 revs Avatar answered Oct 31 '22 09:10

2 revs