Maison > Article > interface Web > Comment prévenir les fuites de ressources avec le modèle Promise Disposer ?
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!