2009-09-08 2 views

Répondre

15

(Disclaimer: Je ne connais APC)

Quelle cache opcode faire est:

  • lorsqu'un fichier est inclus/requis, il prend le chemin complet vers ce fichier
  • vérifier si les opcodes correspondant à ce fichier sont déjà en RAM (dans le cache d'opcode)
    • si oui, retourner ces opcode afin qu'ils soient exécutés
    • si non, charger le fichier et le compiler en codes opération; et stocker les opcodes dans le cache.

Le point important, ici, est le point d'entrée: le chemin complet vers le fichier.


Que autoloading généralement faire est:

  • obtenir le nom d'une classe
  • transform au nom d'un fichier
  • include/require ce fichier

Alors , les informations pertinentes pour le cache d'opcode (chemin d'accès complet au fichier, et le fait qu'il soit inclus/requis) sont toujours présentes. En conséquence, le chargement automatique ne devrait pas poser de problème avec la mise en cache du code op.

(Et, lors de l'utilisation d'APC, il n'a pas, pour autant que je peux dire)

+0

Ceci est également mon expérience - La mise en cache des opcode n'est pas affectée par l'utilisation de la charge automatique –

25

caches opcode travail (ou au moins devrait fonctionner) avec autoloading mais vous pouvez potentiellement prendre un coup de performance de .

De Remember: be nice to byte code caches:

<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 { } } 

et this mail from Ramus:

Pour clarifier les choses, bien sûr conditionnellement fichiers compilés et inclus se mises en cache. Le problème n'est pas les fichiers inclus, mais les classes définies et les fonctions définies qui ont besoin de pour être redéfinies à chaque demande. Que ce soit significatif ou non revient à la spécificité de la situation , mais il ne fait aucun doute que c'est il est plus lent. Il revient à un NOP par rapport à un FETCH_CLASS, par exemple et le NOP est évidemment beaucoup plus rapide.

+0

Vous ne savez pas pourquoi cela n'a pas été mis à jour. Je viens juste de commencer un nouveau post sur ce problème car j'aimerais savoir s'il existe des solutions alternatives à spl_autoload_register -> http://stackoverflow.com/questions/1941541/php5-frameworks-autoloading-and-opcode-caching –

Questions connexes