2017-09-08 9 views
0

J'ai appris la programmation depuis un certain temps maintenant. PHP, Javascript etc et je ne suis pas encore un expert. Mais je connais les plugins et les bibliothèques, ce qu'ils font et comment ils sont utilisés. Maintenant, je sais qu'une bibliothèque une fois chargée peut être utilisée de façon répétitive dans le code. Mais que faire si la structure de mon code me demande de charger une bibliothèque en boucle continue, disons 100 000 fois.Que se passe-t-il lorsqu'un script charge une seule bibliothèque dans une boucle continue?

Quel impact cela pourrait-il avoir sur le serveur hébergeant mon application, le cas échéant?

notamment en termes de consommation de mémoire et de processus etc .....

Exemples. L'envoi de courriels à l'aide de codeigniter nécessitera; Et si j'ai besoin d'appeler cette fonction 100 000 fois pour un service de messagerie en masse?

Répondre

2

Dans votre code, il n'y a pas d'impact sur la mémoire. Les bibliothèques (classes) dans CodeIgniter sont des "singletons", ce qui signifie qu'une fois la bibliothèque chargée, toute tentative supplémentaire de charger la même bibliothèque retournera simplement l'instance créée la première fois que load a été appelée. En d'autres termes, il n'y aura qu'une instance créée de n'importe quelle bibliothèque chargée.

Il y a un certain impact sur le traitement car l'appel à $this->load->library('email'); exécutera du code pour déterminer que email est déjà chargé. Ce n'est pas beaucoup de code, mais il ajoute dans une boucle et est complètement inutile.

En supposant que function send_mail(){ fait partie d'une classe (par exemple un contrôleur), vous pouvez alors éliminer le traitement supplémentaire en chargeant la bibliothèque email dans le constructeur de la bibliothèque.

Voici un exemple de contrôleur.

class App_emailer extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent :: __construct(); 
     $this->load->library('email'); 
    } 

    public function send_mail() 
    { 
     $this->email->from('[email protected]', 'Your Name'); 
     $this->email->to('[email protected]'); 
     $this->email->cc('[email protected]'); 
     $this->email->bcc('[email protected]'); 

     $this->email->subject('Email Test'); 
     $this->email->message('Testing the email class.'); 

     $this->email->send(); 
    } 
} 
0

1.Chargez la bibliothèque dans la classe de construction ou 2.Autoload la bibliothèque dans config/autoload.php: la ligne

$autoload['libraries']=array('email');