Maison  >  Article  >  interface Web  >  Comment prévenir les fuites de ressources avec le modèle Promise Disposer ?

Comment prévenir les fuites de ressources avec le modèle Promise Disposer ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-18 14:51:03770parcourir

How to Prevent Resource Leaks with the Promise Disposer Pattern?

Comprendre le modèle Promise Disposer

Dans la programmation asynchrone, gérer en toute sécurité des ressources telles que les connexions à une base de données sans les divulguer peut être un défi. Le modèle de broyeur de promesses apparaît comme une solution à ce problème en liant la propriété des ressources à la portée d'exécution.

Le problème avec votre code

Le code fourni illustre un scénario dans lequel les connexions à la base de données peuvent être divulguées si elles ne sont pas correctement libérées après chaque appel à getDb. Cela peut éventuellement geler l'application à mesure que les ressources s'épuisent.

Le modèle Disposer

Le modèle Disposer impose une relation rigide entre une ressource et le code qui l'utilise. Lorsqu'une ressource est liée à un contexte d'exécution spécifique, elle peut être libérée en toute confiance une fois l'exécution du code terminée. Cela élimine le risque de fuite de ressources. Sa syntaxe ressemble à :

withResource(function(resource){
     return fnThatDoesWorkWithResource(resource); // returns a promise
 }).then(function(result){
    // resource disposed here
 });

Application du modèle Disposer

L'application du modèle Disposer à votre code entraînerait ce qui suit :

function withDb(work){
    var _db;
    return myDbDriver.getConnection().then(function(db){
        _db = db; // keep reference 
        return work(db); // perform work on db
    }).finally(function(){
        if (_db)
            _db.release();
    });
}

Grâce à cette fonction, le code problématique peut être réécrit en :

 withDb(function(conn){
     return conn.query("SELECT name FROM users");
 }).then(function(users){
     // connection released here
 });

Avantages et cas d'utilisation

Le modèle d'élimination garantit que les ressources sont libérées de manière appropriée, éliminant ainsi les fuites. . Son implémentation est répandue dans des bibliothèques comme Sequelize et Knex, démontrant sa polyvalence. Il peut également être étendu pour contrôler d'autres tâches, telles que masquer les chargeurs une fois toutes les requêtes AJAX terminées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn