IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

__autoload vs registerAutoload


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut __autoload vs registerAutoload
    Bonjour,

    J'ai une grosse application tournant sur DB2 et vachement lente, j'ai commencé à rechercher la façon d'accélérer mon appli.

    Après avoir bien régler le tout, je suis tombé sur un forum qui préconisait d'utiliser une function simplisisme pour le chargement des classes automatique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function __autoload($class) {
     
        require str_replace('_',DIRECTORY_SEPARATOR, $class) . '.php';
     
    }
    Dans les livres de Julien Pauli - Guillaume Ponçon et dans celui de Christophe Haro, ils en parlent mais sans spécifier le gain.

    Dans le doute j'ai testé, et je dois avouer que les performances ont réellement augmenté.

    Est-ce que d'autres utilisateurs ont tenté l'expérience? Il est vrai que comparer à la function on registerAutolad de ZF on épure quelques lignes.

    Qu'en pensez-vous?

  2. #2
    Membre chevronné

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Par défaut
    Zend_Loader::autoload() se sert de Zend_Loader::loadClass() pour charger à la volée les classes de l'application, et cette méthode utilise la méthode Zend_Loader::_securityCheck() pour des raisons de sécurité...

    Il y a aussi un paramètre $dirs qui n'est pas utilisé par l'autoload, spécifiant des dossiers de recherche.

    Si les performances sont vraiment un soucis au niveau de l'autoload je te conseillerais deux choses :
    - Ne pas y avoir recours Ou le minimum vital, un brave require_once est toujours d'actualité 9 fois sur 10.
    - Inclure dans ton __autoload custom un morceau du code de _securityCheck() adapté à tes besoins soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (preg_match('/[^a-z0-9\\/\\\\_.-]/i', $filename)) {
        return;
    }
    Tu peux également utiliser la fonction PHP spl_autoload_register() pour définir ta propre fonction de chargement, et même une méthode statique d'un objet... Par exemple My_Loader::autoload() Par contre je n'ai aucune idée de la différence de performance entre un chargement via la fonction magique __autoload() de base et la méthode statique d'une classe utilisateur... Même si je pense qu'elle doit être minime.

    D'ailleurs à ce sujet si des tests sont faits, je suis preneur de savoir ce que ça change.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    hello,

    Je réagis juste sur le point "un brave require_once est toujours d'actualité 9 fois sur 10.".

    je dois dire que je ne suis pas du tout d'accord, si on parle de perf, un require_* ou include_* sera vachement gourmand parcequ'il s'appliquera toujours alors que justement l'autoload est là pour ne charger les déclarations de classe qu'au moment ou on en a besoin.

    Le gain sur ZF peut être énorme, d'ailleurs j'ai décidé de virer les require de tout ZF et j'ai gagné énormément de perfs.

    Il vaut mieux un autoload avec un include_path bien calé, cela limite grandement les accès disque .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur fatale sur appel de Zend_Loader::registerautoload
    Par Invité dans le forum Zend Framework
    Réponses: 6
    Dernier message: 22/09/2008, 17h59
  2. __autoload() et performances ?
    Par Evocatii dans le forum Langage
    Réponses: 4
    Dernier message: 22/04/2008, 16h25
  3. [POO] Comment utiliser __autoload?
    Par paragoge dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2008, 16h47
  4. Réponses: 4
    Dernier message: 16/06/2006, 10h49
  5. [POO] __autoload
    Par jeff_! dans le forum Langage
    Réponses: 12
    Dernier message: 25/12/2005, 20h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo