কম্পিউটার

কিভাবে বিচ্ছিন্ন DOM উপাদানগুলি জাভাস্ক্রিপ্টে মেমরি লিক হতে পারে?


বিচ্ছিন্ন ডোম উপাদান

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

DOM হল একটি ডাবল-লিঙ্কড ট্রির মত যার মানে গাছের একটি নোডের রেফারেন্স পুরো গাছটিকে আবর্জনা সংগ্রহ করা থেকে বিরত রাখবে।

জাভাস্ক্রিপ্টে একটি DOM উপাদান তৈরি করার একটি উদাহরণ নেওয়া যাক। উপাদান তৈরি করার পরে এটিকে ধ্বংস করুন তবে এটি ধরে রাখা ভেরিয়েবলটি মুছতে ভুলবেন না। এই দৃশ্যটি একটি বিচ্ছিন্ন DOM-এর দিকে নিয়ে যায় যা শুধুমাত্র নির্দিষ্ট DOM উপাদানের জন্য নয়, পুরো গাছের জন্যও একটি রেফারেন্স রয়েছে৷

উদাহরণ

নিম্নলিখিত উদাহরণে, DOM থেকে সরানোর পরেও, 'someText'-এর এখনও গ্লোবাল 'মান' অবজেক্টে একটি রেফারেন্স থাকবে। এই কারণেই এটি আবর্জনা সংগ্রহকারী থেকে বাদ দিতে পারে না এবং মেমরি ব্যবহার করতে পারে না। এর ফলে মেমরি লিক হয়।

<html>
<body>
<script>
   var example = document.createElement("p");
   example.id = "someText";
   document.body.appendChild(example);
   var value = {
    text: document.getElementById('someText')
   };
   function createFun() {
      value.text.innerHTML = "Javascript is not Java";
   }
   createFun();
   function deleteFun() {
      document.body.removeChild(document.getElementById('someText'));
   }
   deleteFun();
</script>
</body>
</html>

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

মেমরি লিক এড়াতে, সর্বোত্তম অনুশীলন হল শ্রোতার ভিতরে var উদাহরণ রাখা, যা এটিকে একটি স্থানীয় পরিবর্তনশীল করে তোলে। যখন var উদাহরণ মুছে ফেলা হয় তখন অবজেক্টের পথটি কেটে যাবে, যা আবর্জনা সংগ্রহকারীকে মেমরি প্রকাশ করতে দেয়।


  1. জাভাস্ক্রিপ্ট DOM কি?

  2. কিভাবে আমরা ইন্টারনেট এক্সপ্লোরারে জাভাস্ক্রিপ্ট ডিবাগ করতে পারি?

  3. কিভাবে জাভাস্ক্রিপ্ট মেমরি বরাদ্দ?

  4. জাভাস্ক্রিপ্টে বোতাম ক্লিকে li উপাদানগুলি কীভাবে সরিয়ে ফেলা যায়?