রেন্ডার ব্যবস্থাপনা

রেন্ডার ম্যানেজমেন্ট সিস্টেম রেন্ডারারকে বলে যে কখন ব্লকগুলি পুনরায় রেন্ডার করতে হবে। এটি নিশ্চিত করে যে যখন একটি ব্লক সংশোধন করা হয় (যেমন ক্ষেত্রের মান সেট করা হয়, বা ইনপুট যোগ করা হয়) ব্লকের আকৃতি মেলে আপডেট হয়।

কখন যত্ন করতে হবে

আপনাকে এই সিস্টেমের সাথে ইন্টারঅ্যাক্ট করতে হবে যদি আপনি হন:

  • ব্লকলিতে পদ্ধতি যোগ করা যা ব্লকের আকৃতি পরিবর্তন করে।
  • ব্লকলিতে পদ্ধতি যোগ করা যা একটি ব্লক সম্পর্কে আপডেট করা আকার বা পজিশনিং তথ্যের উপর নির্ভর করে।

কিভাবে এটা কাজ করে

  1. স্বয়ংক্রিয়ভাবে সারিবদ্ধ। যখনই একটি ব্লক পরিবর্তন করা হয়, ব্লকলি সেই ব্লকের জন্য একটি রেন্ডার "সারি" করে। কিছু পরিবর্তনের উদাহরণ যা রেন্ডারকে সারিবদ্ধ করে:

    • একটি ক্ষেত্রের মান সেট করা
    • একটি ইনপুট যোগ বা অপসারণ
    • একটি চাইল্ড ব্লক সংযোগ বা সংযোগ বিচ্ছিন্ন করা
  2. একটি সেট তৈরি করুন। যখন একটি ব্লক সারিবদ্ধ হয়, তখন রেন্ডার ম্যানেজমেন্ট সিস্টেম এটিকে এবং এর সমস্ত প্যারেন্ট ব্লকগুলিকে ব্লকের একটি সেটে যোগ করে যা পুনরায় রেন্ডার করা প্রয়োজন।

  3. একটি কলব্যাক অনুরোধ. তারপর রেন্ডার ম্যানেজমেন্ট সিস্টেম requestAnimationFrame ব্যবহার করে একটি কলব্যাকের অনুরোধ করে। বর্তমান ফ্রেম আঁকার ঠিক আগে এই কলব্যাকটি ব্রাউজার দ্বারা কল করা হয়।

  4. সেটটি পুনরায় রেন্ডার করুন (একটি গাছ হিসাবে)। requestAnimationFrame কলব্যাক কল করা হলে, রেন্ডার ম্যানেজমেন্ট সিস্টেম সেটের প্রতিটি ব্লককে লিফ ব্লক থেকে রুট ব্লকে রেন্ডার করে। এটি নিশ্চিত করে যে শিশু ব্লকের সঠিক আকারের তথ্য রয়েছে তাদের পিতামাতার ব্লকগুলি রেন্ডার করার আগে যাতে পিতামাতার ব্লকগুলি তাদের বাচ্চাদের চারপাশে প্রসারিত করতে পারে।

কেন এটা কিভাবে কাজ করে

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

উদাহরণস্বরূপ, দুটি অন্য সারির মধ্যে একটি ব্লক ঢোকানো 11 রেন্ডার করে, কিন্তু প্রকৃতপক্ষে শুধুমাত্র 3টি ঘটে (প্রতিটি ব্লকের জন্য একটি)। এটি একটি 3.6x পারফরম্যান্স বুস্ট।

এটি কিভাবে ব্যবহার করতে

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

সারি রেন্ডার

আপনি যদি ব্লকলিতে একটি নতুন পদ্ধতি যোগ করেন যা একটি ব্লকের আকৃতি আপডেট করে, তাহলে ব্লক রেন্ডার করার জন্য আপনাকে BlockSvg.prototype.queueRender কল করতে হবে।

রেন্ডার শেষ হওয়ার জন্য অপেক্ষা করুন

আপনি যদি ব্লকলিতে একটি নতুন পদ্ধতি যোগ করেন যার জন্য একটি ব্লক সম্পর্কে আপডেট করা সাইজিং বা পজিশনিং তথ্য থাকা প্রয়োজন, তাহলে আপনাকে renderManagement.finishQueuedRenders() প্রতিশ্রুতির জন্য অপেক্ষা করা উচিত। এই প্রতিশ্রুতি কোনো সারিবদ্ধ রেন্ডার সম্পূর্ণ হওয়ার পরে বা অবিলম্বে যদি কোনো সারিবদ্ধ রেন্ডার না থাকে তাহলে সমাধান হয়ে যায়।

import * as renderManagement from './renderManagement.js';

function async myNewMethod() {
  block.somethingThatModifiesTheShape();
  // Await the promise.
  await renderManagement.finishQueuedRenders();
  myThingThatReliesOnPositioningInfo();
}

ট্রিগার সারিবদ্ধ রেন্ডার অবিলম্বে

আপনি যদি Blockly-তে একটি নতুন পদ্ধতি যোগ করেন যার জন্য একটি ব্লক সম্পর্কে আপডেট করা আকার বা অবস্থান সংক্রান্ত তথ্য থাকা প্রয়োজন, এবং আপনি পরবর্তী ফ্রেম পর্যন্ত কোনো রেন্ডার সম্পূর্ণ হওয়ার জন্য অপেক্ষা করতে পারবেন না, আপনি যেকোনো সারিবদ্ধ রেন্ডারকে অবিলম্বে ঘটতে বাধ্য করতে renderManagement.triggerQueuedRenders কল করতে পারেন।

import * as renderManagement from './renderManagement.js';

function async myNewMethod() {
  block.somethingThatModifiesTheShape();
  // Trigger an immediate render.
  renderManagement.triggerQueuedRenders();
  myThingThatReliesOnPositioningInfo();
}

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

কোরে কয়েকটি জায়গা রয়েছে যেখানে এটি পিছনের সামঞ্জস্যের কারণে অবিলম্বে রেন্ডারকে ট্রিগার করে। এগুলি v11 এ সরানোর পরিকল্পনা করা হয়েছে।