কম্পিউটার

কিভাবে ভুলে যাওয়া টাইমার বা কলব্যাক জাভাস্ক্রিপ্টে মেমরি লিক হতে পারে?


ভুলে যাওয়া টাইমার/কলব্যাক

জাভাস্ক্রিপ্টে দুটি টাইমিং ইভেন্ট রয়েছে যথা setTimeout() এবং setInterval()। পূর্ববর্তীটি একটি নির্দিষ্ট সংখ্যক মিলিসেকেন্ড অপেক্ষা করার পরে একটি ফাংশন সম্পাদন করে, যেখানে পরেরটি পর্যায়ক্রমে একটি ফাংশন সম্পাদন করে (প্রতিটি নির্দিষ্ট সময়ের জন্য পুনরাবৃত্তি হয়)।

যখন কোনো বস্তু টাইমার কলব্যাকের সাথে আবদ্ধ থাকে, সময় শেষ না হওয়া পর্যন্ত এটি প্রকাশ করা হবে না। এই পরিস্থিতিতে টাইমার নিজেকে রিসেট করে এবং মেমরি অপসারণ করার জন্য আবর্জনা সংগ্রহকারীকে অনুমতি না দিয়ে টাইমআউট শেষ না হওয়া পর্যন্ত চিরতরে চলে৷ এই টাইমারগুলি জাভাস্ক্রিপ্টে মেমরি লিকের সবচেয়ে ঘন ঘন কারণ৷

উদাহরণ

নিম্নলিখিত উদাহরণে, টাইমার কলব্যাক এবং এর বাঁধা বস্তু(tiedObject) টাইমআউট শেষ না হওয়া পর্যন্ত প্রকাশ করা হবে না। এই সময়ের মধ্যে টাইমারটি নিজেকে রিসেট করে এবং চিরকালের জন্য চলে এবং তাই এর মেমরি স্পেস কখনই সংগ্রহ করা হবে না এমনকি আসল বস্তুর কোন রেফারেন্স না থাকলেও৷

<html>
<body>
<script>
   for (var i = 0; i < 100000; i++) {
   var tiedObject = {
   callAgain: function() {
      var text = this;
      var value = setTimeout(function() {
      text.callAgain();
      }, 100000);
   }
   }
   tiedObject.callAgain();
   tiedObject = null;
   }
</script>
</body>>
</html>

মেমরি লিক এড়ানো

1.লিকেজ এড়াতে setInterval()/setTimeout() এর ভিতরে রেফারেন্স প্রদান করুন যাতে আবর্জনা সংগ্রহ করার আগে ফাংশনগুলি কার্যকর করা প্রয়োজন৷

2. ফাংশনগুলিকে আর প্রয়োজন না হলে সরাতে সরাসরি কল করুন৷

পুরানো ব্রাউজার যেমন IE বাদে, বেশিরভাগ আধুনিক ব্রাউজার যেমন ক্রোম ইত্যাদি এই ধরণের সমস্যার সম্মুখীন হবে না। আরও গুরুত্বপূর্ণভাবে jquery-এর মতো লাইব্রেরিগুলি অভ্যন্তরীণভাবে হ্যান্ডেল করে তা নিশ্চিত করার জন্য যে কোনও ফুটো সমস্যা তৈরি না হয়।



  1. ক্রোমে জাভাস্ক্রিপ্ট ফাংশন সংজ্ঞা? আমি এটা কিভাবে খুঁজে পেতে পারি?

  2. জাভাস্ক্রিপ্ট কলব্যাক

  3. লিঙ্ক # দিয়ে শুরু হলে আমি কিভাবে জাভাস্ক্রিপ্ট ক্লিক ফাংশন নিষ্ক্রিয় করতে পারি?

  4. কিভাবে আমি জাভাস্ক্রিপ্টে একটি অ্যারে থেকে একটি নির্দিষ্ট আইটেম সরাতে পারি?