ঠিক আছে, আমি ধরে নিচ্ছি যে আপনি এটির একটি সুস্পষ্ট রেফারেন্স রাখবেন না কারণ এটি বরাদ্দ রাখতে বাধ্য করবে।
আমি যে সহজ পরীক্ষাটি ভাবতে পারি তা হ'ল আসলে প্রচুর প্রতিশ্রুতি বরাদ্দ করা এবং সেগুলি সমাধান করা নয়:
var $q = angular.injector(["ng"]).get("$q");
setInterval(function () {
for (var i = 0; i < 100; i++) {
var $d = $q.defer();
$d.promise;
}
}, 10);
এবং তারপরে নিজেই গাদা দেখছে। আমরা ক্রোম প্রোফাইলিং সরঞ্জামগুলিতে দেখতে পাচ্ছি যে এটি 100 টি প্রতিশ্রুতি বরাদ্দ করার জন্য প্রয়োজনীয় মেমরিটি সংগ্রহ করে এবং তারপরে পুরো জেএসএফআইডল পৃষ্ঠাটির জন্য 15 মেগাবাইটের চেয়ে কম "সেখানে থাকে"
অন্য দিক থেকে, যদি আমরা $q
উত্স কোড তাকান
আমরা দেখতে পাচ্ছি যে গ্লোবাল পয়েন্ট থেকে কোনও নির্দিষ্ট প্রতিশ্রুতির কোনও রেফারেন্স নেই তবে কেবল তার কলব্যাকের প্রতিশ্রুতি থেকে। কোডটি খুব পঠনযোগ্য এবং স্পষ্ট। আসুন দেখুন যদি আপনার কাছে কলব্যাক থেকে প্রতিশ্রুতির কোনও রেফারেন্স থাকে তবে।
var $q = angular.injector(["ng"]).get("$q");
console.log($q);
setInterval(function () {
for (var i = 0; i < 10; i++) {
var $d = $q.defer();
(function ($d) {
$d.promise.then(function () {
console.log($d);
});
})($d);
}
}, 10);
তাই প্রাথমিক বরাদ্দের পরে - দেখে মনে হচ্ছে এটি এটি হ্যান্ডেল করতেও সক্ষম হয়েছে :)
আমরা যদি তার শেষ উদাহরণটি আরও কয়েক মিনিটের জন্য চালিত করি তবে আমরা জিসির কিছু আকর্ষণীয় নিদর্শনগুলিও দেখতে পারি। আমরা দেখতে পাচ্ছি যে এটি কিছুটা সময় নেয় - তবে এটি কলব্যাকগুলি সাফ করতে সক্ষম।
সংক্ষেপে - কমপক্ষে আধুনিক ব্রাউজারগুলিতে - সমাধান না হওয়া প্রতিশ্রুতিগুলির যতক্ষণ না আপনার কাছে বাহ্যিক রেফারেন্স না থাকে আপনার চিন্তার দরকার নেই