জানুন কিভাবে CSS স্টাইল কন্টেনমেন্ট রেন্ডারিংকে বিচ্ছিন্ন করে ওয়েব পারফরম্যান্সকে উন্নত করে, যা সমস্ত ডিভাইস এবং অঞ্চলে দ্রুত ও মসৃণ ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করে।
সিএসএস স্টাইল কন্টেনমেন্ট: বিশ্বব্যাপী ওয়েব অভিজ্ঞতার জন্য রেন্ডারিং পারফরম্যান্স আইসোলেশন উন্মোচন
আজকের এই সংযুক্ত বিশ্বে, ওয়েব পারফরম্যান্স কেবল একটি কাঙ্ক্ষিত বৈশিষ্ট্য নয়; এটি একটি মৌলিক প্রত্যাশা। ব্যবহারকারীরা, তাদের ভৌগোলিক অবস্থান বা ব্যবহৃত ডিভাইস নির্বিশেষে, তাৎক্ষণিক, সাবলীল এবং অত্যন্ত প্রতিক্রিয়াশীল মিথস্ক্রিয়া দাবি করে। একটি ধীর-লোডিং বা জ্যাঙ্কি ওয়েবসাইট হতাশা, সেশন ত্যাগ এবং ব্যবহারকারীর অংশগ্রহণে একটি উল্লেখযোগ্য নেতিবাচক প্রভাব ফেলতে পারে, যা শেষ পর্যন্ত বিশ্বব্যাপী ব্যবসায়িক উদ্দেশ্যকে প্রভাবিত করে। সর্বোত্তম ওয়েব পারফরম্যান্সের অন্বেষণ প্রতিটি ডেভেলপার এবং সংস্থার জন্য একটি অবিরাম যাত্রা।
পর্দার আড়ালে, ওয়েব ব্রাউজারগুলো অগণিত উপাদান, স্টাইল এবং স্ক্রিপ্ট দিয়ে গঠিত জটিল ইউজার ইন্টারফেস (UI) রেন্ডার করার জন্য অক্লান্ত পরিশ্রম করে। এই জটিল প্রক্রিয়ার মধ্যে একটি অত্যাধুনিক রেন্ডারিং পাইপলাইন জড়িত, যেখানে ছোট পরিবর্তনগুলোও কখনও কখনও পুরো ডকুমেন্ট জুড়ে গণনার একটি ক্যাসকেডিং সিরিজ ট্রিগার করতে পারে। এই ঘটনাটি, যাকে প্রায়শই "লেআউট থ্র্যাশিং" বা "পেইন্ট স্টর্ম" বলা হয়, তা পারফরম্যান্সকে উল্লেখযোগ্যভাবে ধীর করে দিতে পারে, যার ফলে একটি দৃশ্যত অলস এবং অনাকর্ষণীয় ব্যবহারকারীর অভিজ্ঞতা হয়। একটি ই-কমার্স সাইটের কথা ভাবুন যেখানে কার্টে একটি আইটেম যোগ করলে পুরো পৃষ্ঠাটি সূক্ষ্মভাবে রিফ্লো হয়, অথবা একটি সোশ্যাল মিডিয়া ফিড যেখানে কন্টেন্টের মধ্যে স্ক্রোল করা খাপছাড়া এবং প্রতিক্রিয়াহীন মনে হয়। এগুলো অপটিমাইজ না করা রেন্ডারিংয়ের সাধারণ লক্ষণ।
এখানেই আসে CSS Style Containment
, একটি শক্তিশালী এবং প্রায়শই কম ব্যবহৃত CSS প্রোপার্টি যা পারফরম্যান্স অপটিমাইজেশনের বাতিঘর হিসেবে ডিজাইন করা হয়েছে: a contain
প্রোপার্টি। এই উদ্ভাবনী বৈশিষ্ট্যটি ডেভেলপারদের ব্রাউজারকে স্পষ্টভাবে সংকেত দিতে দেয় যে একটি নির্দিষ্ট উপাদান এবং তার বংশধরদের একটি স্বাধীন রেন্ডারিং সাবট্রি হিসেবে বিবেচনা করা যেতে পারে। এটি করার মাধ্যমে, ডেভেলপাররা একটি কম্পোনেন্টের "রেন্ডারিং স্বাধীনতা" ঘোষণা করতে পারে, যা ব্রাউজারের রেন্ডারিং ইঞ্জিনের মধ্যে লেআউট, স্টাইল এবং পেইন্ট পুনঃগণনার পরিধিকে কার্যকরভাবে সীমিত করে। এই বিচ্ছিন্নতা একটি সীমাবদ্ধ এলাকার মধ্যে পরিবর্তনগুলোকে পুরো পৃষ্ঠা জুড়ে ব্যয়বহুল, ব্যাপক আপডেট ট্রিগার করা থেকে বাধা দেয়।
contain
-এর পেছনের মূল ধারণাটি সহজ কিন্তু গভীরভাবে প্রভাবশালী: ব্রাউজারকে একটি উপাদানের আচরণ সম্পর্কে স্পষ্ট ইঙ্গিত দিয়ে, আমরা এটিকে আরও কার্যকর রেন্ডারিং সিদ্ধান্ত নিতে সক্ষম করি। সবচেয়ে খারাপ পরিস্থিতির কথা ধরে নিয়ে সবকিছু পুনরায় গণনা করার পরিবর্তে, ব্রাউজার আত্মবিশ্বাসের সাথে তার কাজের পরিধি শুধুমাত্র কন্টেইনড উপাদানের মধ্যে সীমাবদ্ধ করতে পারে, যা রেন্ডারিং প্রক্রিয়াগুলোকে নাটকীয়ভাবে দ্রুত করে এবং একটি মসৃণ, আরও প্রতিক্রিয়াশীল ইউজার ইন্টারফেস প্রদান করে। এটি শুধু একটি প্রযুক্তিগত উন্নতি নয়; এটি একটি বিশ্বব্যাপী অপরিহার্যতা। একটি পারফরম্যান্ট ওয়েব নিশ্চিত করে যে ধীর ইন্টারনেট সংযোগ বা কম শক্তিশালী ডিভাইসযুক্ত অঞ্চলের ব্যবহারকারীরাও কার্যকরভাবে কন্টেন্ট অ্যাক্সেস করতে এবং তার সাথে ইন্টারঅ্যাক্ট করতে পারে, যা একটি আরও অন্তর্ভুক্তিমূলক এবং ন্যায়সঙ্গত ডিজিটাল ল্যান্ডস্কেপ তৈরি করে।
ব্রাউজারের নিবিড় যাত্রা: রেন্ডারিং পাইপলাইন বোঝা
contain
-এর শক্তিকে সত্যিকার অর্থে উপলব্ধি করতে, ব্রাউজারগুলো আপনার স্ক্রিনে HTML, CSS এবং JavaScript-কে পিক্সেলে রূপান্তর করতে যে মৌলিক পদক্ষেপগুলো নেয় তা বোঝা অপরিহার্য। এই প্রক্রিয়াটি ক্রিটিক্যাল রেন্ডারিং পাথ নামে পরিচিত। যদিও সরলীকৃত, এর মূল পর্যায়গুলো বোঝা পারফরম্যান্সের বাধাগুলো প্রায়শই কোথায় ঘটে তা চিহ্নিত করতে সহায়তা করে:
- DOM (ডকুমেন্ট অবজেক্ট মডেল) নির্মাণ: ব্রাউজার HTML পার্স করে এবং ডকুমেন্টের বিষয়বস্তু ও সম্পর্কগুলোকে উপস্থাপন করার জন্য একটি ট্রি স্ট্রাকচার তৈরি করে।
- CSSOM (সিএসএস অবজেক্ট মডেল) নির্মাণ: ব্রাউজার CSS পার্স করে এবং উপাদানগুলোতে প্রয়োগ করা স্টাইলগুলোর একটি ট্রি স্ট্রাকচার তৈরি করে।
- রেন্ডার ট্রি গঠন: DOM এবং CSSOM একত্রিত হয়ে রেন্ডার ট্রি গঠন করে, যেখানে শুধুমাত্র দৃশ্যমান উপাদান এবং তাদের গণনাকৃত স্টাইলগুলো থাকে। এটিই আসলে রেন্ডার করা হবে।
- লেআউট (রিফ্লো/রিলেআউট): এটি সবচেয়ে বেশি রিসোর্স-ইনটেনসিভ ধাপগুলোর মধ্যে একটি। ব্রাউজার রেন্ডার ট্রি-র উপর ভিত্তি করে পৃষ্ঠার প্রতিটি দৃশ্যমান উপাদানের সঠিক অবস্থান এবং আকার গণনা করে। যদি কোনো উপাদানের আকার বা অবস্থান পরিবর্তিত হয়, অথবা নতুন উপাদান যোগ করা বা সরানো হয়, তবে ব্রাউজারকে প্রায়শই পৃষ্ঠার একটি উল্লেখযোগ্য অংশ, বা এমনকি সম্পূর্ণ অংশের জন্য লেআউট পুনরায় গণনা করতে হয়। এই বিশ্বব্যাপী পুনঃগণনাটি "রিফ্লো" বা "রিলেআউট" নামে পরিচিত এবং এটি একটি প্রধান পারফরম্যান্সের বাধা।
- পেইন্ট (রিপেইন্ট): একবার লেআউট নির্ধারিত হয়ে গেলে, ব্রাউজার প্রতিটি উপাদানের জন্য স্ক্রিনে পিক্সেল আঁকে (পেইন্ট করে)। এর মধ্যে গণনাকৃত স্টাইলগুলোকে (রঙ, ব্যাকগ্রাউন্ড, বর্ডার, শ্যাডো ইত্যাদি) প্রকৃত পিক্সেলে রূপান্তর করা জড়িত। লেআউটের মতোই, কোনো উপাদানের ভিজ্যুয়াল বৈশিষ্ট্যের পরিবর্তন সেই উপাদান এবং সম্ভাব্যভাবে এর উপর থাকা উপাদানগুলোর একটি "রিপেইন্ট" ট্রিগার করতে পারে। যদিও প্রায়শই রিফ্লোর চেয়ে কম ব্যয়বহুল, ঘন ঘন বা বড় রিপেইন্টগুলোও পারফরম্যান্স হ্রাস করতে পারে।
- কম্পোজিটিং: পেইন্ট করা লেয়ারগুলো সঠিক ক্রমে একত্রিত (কম্পোজিট) হয়ে স্ক্রিনে চূড়ান্ত চিত্র তৈরি করে।
এখানকার মূল বিষয় হল লেআউট এবং পেইন্ট পর্যায়ের ক্রিয়াকলাপগুলো প্রায়শই পারফরম্যান্সের উপর সবচেয়ে বড় চাপ সৃষ্টি করে। যখনই DOM বা CSSOM-এ এমন কোনো পরিবর্তন ঘটে যা লেআউটকে প্রভাবিত করে (যেমন, কোনো উপাদানের width
, height
, margin
, padding
, display
, বা position
পরিবর্তন করা), ব্রাউজার অনেক উপাদানের জন্য লেআউট ধাপটি পুনরায় চালাতে বাধ্য হতে পারে। একইভাবে, ভিজ্যুয়াল পরিবর্তনের জন্য (যেমন, color
, background-color
, box-shadow
) রিপেইন্টিং প্রয়োজন। কন্টেনমেন্ট ছাড়া, একটি বিচ্ছিন্ন কম্পোনেন্টের একটি ছোট আপডেট অপ্রয়োজনীয়ভাবে পুরো ওয়েবপৃষ্ঠা জুড়ে একটি সম্পূর্ণ পুনঃগণনা ট্রিগার করতে পারে, মূল্যবান প্রসেসিং সাইকেল নষ্ট করে এবং একটি জ্যাঙ্কি ব্যবহারকারীর অভিজ্ঞতা তৈরি করে।
স্বাধীনতা ঘোষণা: contain
প্রোপার্টির গভীরে অনুসন্ধান
contain
সিএসএস প্রোপার্টি ব্রাউজারের জন্য একটি গুরুত্বপূর্ণ অপটিমাইজেশন ইঙ্গিত হিসাবে কাজ করে। এটি সংকেত দেয় যে একটি নির্দিষ্ট উপাদান এবং তার বংশধররা স্বয়ংসম্পূর্ণ, যার মানে তাদের লেআউট, স্টাইল এবং পেইন্ট অপারেশনগুলো ডকুমেন্টের বাকি অংশ থেকে স্বাধীনভাবে ঘটতে পারে। এটি ব্রাউজারকে লক্ষ্যযুক্ত অপটিমাইজেশন সম্পাদন করতে দেয়, অভ্যন্তরীণ পরিবর্তনগুলোকে বৃহত্তর পৃষ্ঠা কাঠামোতে ব্যয়বহুল পুনঃগণনা করতে বাধ্য করা থেকে বিরত রাখে।
এই প্রোপার্টি বেশ কিছু মান গ্রহণ করে, যা একত্রিত করা যেতে পারে বা শর্টহ্যান্ড হিসাবে ব্যবহার করা যেতে পারে, প্রতিটি একটি ভিন্ন স্তরের কন্টেনমেন্ট প্রদান করে:
none
(ডিফল্ট): কোনো কন্টেনমেন্ট প্রয়োগ করা হয়নি। উপাদানের মধ্যে পরিবর্তনগুলো পুরো পৃষ্ঠাকে প্রভাবিত করতে পারে।layout
: লেআউট পরিবর্তন সীমিত করে।paint
: পেইন্ট পরিবর্তন সীমিত করে।size
: নির্দিষ্ট করে যে উপাদানের আকার স্থির।style
: স্টাইল ইনভ্যালিডেশন সীমিত করে।content
:layout
এবংpaint
-এর জন্য শর্টহ্যান্ড।strict
:layout
,paint
,size
, এবংstyle
-এর জন্য শর্টহ্যান্ড।
আসুন এই মানগুলোর প্রতিটি বিস্তারিতভাবে অন্বেষণ করি যাতে তাদের নির্দিষ্ট সুবিধা এবং প্রভাব বোঝা যায়।
contain: layout;
– জ্যামিতি বিচ্ছিন্নতায় দক্ষতা
যখন আপনি একটি উপাদানে contain: layout;
প্রয়োগ করেন, তখন আপনি মূলত ব্রাউজারকে বলছেন: "আমার চাইল্ড এলিমেন্টগুলোর লেআউটে পরিবর্তন আমার বাইরের কোনো কিছুর লেআউটকে প্রভাবিত করবে না, আমার পূর্বপুরুষ বা সিবলিং সহ।" এটি একটি অবিশ্বাস্যভাবে শক্তিশালী ঘোষণা, কারণ এটি অভ্যন্তরীণ লেআউট পরিবর্তনগুলোকে একটি বিশ্বব্যাপী রিফ্লো ট্রিগার করা থেকে বাধা দেয়।
এটি যেভাবে কাজ করে: contain: layout;
-এর সাথে, ব্রাউজার কন্টেইনড উপাদান এবং তার বংশধরদের জন্য লেআউট স্বাধীনভাবে গণনা করতে পারে। যদি একটি চাইল্ড এলিমেন্টের মাত্রা পরিবর্তিত হয়, তবে তার প্যারেন্ট (কন্টেইনড উপাদান) ডকুমেন্টের বাকি অংশের সাপেক্ষে তার মূল অবস্থান এবং আকার বজায় রাখবে। লেআউট গণনাগুলো কার্যকরভাবে কন্টেইনড উপাদানের সীমানার মধ্যে কোয়ারেন্টাইন করা হয়।
সুবিধাসমূহ:
- রিফ্লো স্কোপ হ্রাস: প্রধান সুবিধা হল লেআউট পরিবর্তনের সময় ব্রাউজারকে যে এলাকাটি পুনরায় গণনা করতে হয় তা উল্লেখযোগ্যভাবে হ্রাস পায়। এর মানে কম সিপিইউ খরচ এবং দ্রুত রেন্ডারিং সময়।
- পূর্বাভাসযোগ্য লেআউট: যখন ডাইনামিক কন্টেন্ট বা অ্যানিমেশনগুলো একটি কম্পোনেন্টের মধ্যে অভ্যন্তরীণ পরিবর্তন ঘটায়, তখনও এটি একটি স্থিতিশীল সামগ্রিক পৃষ্ঠা লেআউট বজায় রাখতে সাহায্য করে।
ব্যবহারের ক্ষেত্র:
- স্বাধীন UI কম্পোনেন্ট: একটি জটিল ফর্ম ভ্যালিডেশন কম্পোনেন্টের কথা ভাবুন যেখানে ত্রুটির বার্তাগুলো উপস্থিত বা অদৃশ্য হতে পারে, যার ফলে ফর্মের অভ্যন্তরীণ লেআউট পরিবর্তিত হয়। ফর্ম কন্টেইনারে
contain: layout;
প্রয়োগ করা নিশ্চিত করে যে এই পরিবর্তনগুলো ফুটার বা সাইডবারকে প্রভাবিত করবে না। - প্রসারণযোগ্য/সংকোচনযোগ্য বিভাগ: যদি আপনার একটি অ্যাকর্ডিয়ন-স্টাইলের কম্পোনেন্ট থাকে যেখানে কন্টেন্ট প্রসারিত বা সংকুচিত হয়, প্রতিটি বিভাগে
contain: layout;
প্রয়োগ করা একটি বিভাগের উচ্চতা পরিবর্তিত হলে পুরো পৃষ্ঠার লেআউটকে পুনরায় মূল্যায়ন করা থেকে বিরত রাখতে পারে। - উইজেট এবং কার্ড: একটি ড্যাশবোর্ড বা একটি পণ্য তালিকা পৃষ্ঠায়, যেখানে প্রতিটি আইটেম একটি স্বাধীন কার্ড বা উইজেট। যদি একটি ছবি ধীরে ধীরে লোড হয় বা একটি কার্ডের মধ্যে কন্টেন্ট গতিশীলভাবে সামঞ্জস্য হয়, সেই কার্ডে
contain: layout;
পার্শ্ববর্তী কার্ড বা সামগ্রিক গ্রিডকে অপ্রয়োজনীয়ভাবে রিফ্লো হওয়া থেকে বাধা দেয়।
বিবেচ্য বিষয়:
- কন্টেইনড উপাদানকে অবশ্যই একটি নতুন ব্লক ফরম্যাটিং কনটেক্সট স্থাপন করতে হবে, যেমন
overflow: hidden;
বাdisplay: flex;
সহ উপাদানগুলোর মতো। - যদিও অভ্যন্তরীণ লেআউট পরিবর্তনগুলো কন্টেইন করা হয়, উপাদানটি নিজেই আকার পরিবর্তন করতে পারে যদি তার কন্টেন্ট একটি নতুন আকারের নির্দেশ দেয় এবং
contain: size;
প্রয়োগ করা না থাকে। - কার্যকর কন্টেনমেন্টের জন্য, উপাদানটির আদর্শভাবে একটি সুস্পষ্ট বা পূর্বাভাসযোগ্য আকার থাকা উচিত, যদিও
contain: size;
দ্বারা কঠোরভাবে প্রয়োগ করা না হয়।
contain: paint;
– ভিজ্যুয়াল আপডেট সীমাবদ্ধ করা
যখন আপনি একটি উপাদানে contain: paint;
প্রয়োগ করেন, আপনি ব্রাউজারকে জানাচ্ছেন: "এই উপাদানের ভিতরের কিছুই তার বাউন্ডিং বক্সের বাইরে পেইন্ট করা হবে না। উপরন্তু, যদি এই উপাদানটি অফ-স্ক্রিন থাকে, তাহলে আপনাকে এর বিষয়বস্তু পেইন্ট করার প্রয়োজন নেই।" এই ইঙ্গিত রেন্ডারিং পাইপলাইনের পেইন্টিং পর্যায়কে উল্লেখযোগ্যভাবে অপ্টিমাইজ করে।
এটি যেভাবে কাজ করে: এই মানটি ব্রাউজারকে দুটি গুরুত্বপূর্ণ জিনিস বলে। প্রথমত, এটি বোঝায় যে উপাদানের বিষয়বস্তু তার বাউন্ডিং বক্সে ক্লিপ করা হয়েছে। দ্বিতীয়ত, এবং পারফরম্যান্সের জন্য আরও গুরুত্বপূর্ণ, এটি ব্রাউজারকে দক্ষ "কালিং" করতে সক্ষম করে। যদি উপাদানটি নিজেই ভিউপোর্টের বাইরে (অফ-স্ক্রিন) থাকে বা অন্য কোনো উপাদান দ্বারা লুকানো থাকে, ব্রাউজার জানে যে তার কোনো বংশধরকে পেইন্ট করার প্রয়োজন নেই, যা যথেষ্ট প্রসেসিং সময় বাঁচায়।
সুবিধাসমূহ:
- রিপেইন্ট স্কোপ হ্রাস: যে এলাকাটি রিপেইন্ট করা প্রয়োজন তা উপাদানের সীমানার মধ্যে সীমাবদ্ধ করে।
- দক্ষ কালিং: যদি কন্টেইনিং উপাদানটি দৃশ্যমান না হয় তবে ব্রাউজারকে DOM-এর পুরো সাবট্রি পেইন্ট করা এড়িয়ে যেতে দেয়, যা দীর্ঘ তালিকা, ক্যারোসেল বা লুকানো UI উপাদানগুলোর জন্য অবিশ্বাস্যভাবে দরকারী।
- মেমরি সাশ্রয়: অফ-স্ক্রিন কন্টেন্ট পেইন্ট না করে, ব্রাউজারগুলো মেমরিও সংরক্ষণ করতে পারে।
ব্যবহারের ক্ষেত্র:
- ইনফিনিট স্ক্রোলিং তালিকা/ভার্চুয়ালাইজড কন্টেন্ট: হাজার হাজার তালিকা আইটেমের সাথে কাজ করার সময়, যার মধ্যে মাত্র একটি ভগ্নাংশ যেকোনো সময়ে দৃশ্যমান থাকে। প্রতিটি তালিকা আইটেমে (বা তালিকা আইটেমের একটি ব্যাচের কন্টেইনারে)
contain: paint;
প্রয়োগ করা নিশ্চিত করে যে শুধুমাত্র দৃশ্যমান আইটেমগুলো পেইন্ট করা হয়েছে। - অফ-স্ক্রিন মোডাল/সাইডবার: যদি আপনার একটি মোডাল ডায়ালগ, একটি নেভিগেশন সাইডবার, বা এমন কোনো UI উপাদান থাকে যা প্রাথমিকভাবে লুকানো থাকে এবং ভিউতে স্লাইড করে, তাতে
contain: paint;
প্রয়োগ করা ব্রাউজারকে অফ-স্ক্রিনে থাকা অবস্থায় অপ্রয়োজনীয় পেইন্ট কাজ করা থেকে বিরত রাখতে পারে। - লেজি লোডিং সহ ইমেজ গ্যালারী: একটি পৃষ্ঠার অনেক নিচে থাকা ছবিগুলোর জন্য, তাদের কন্টেইনারে
contain: paint;
প্রয়োগ করা নিশ্চিত করতে সাহায্য করতে পারে যে সেগুলো ভিউতে স্ক্রোল না করা পর্যন্ত পেইন্ট করা হবে না।
বিবেচ্য বিষয়:
contain: paint;
কার্যকর হওয়ার জন্য, উপাদানটির একটি নির্ধারিত আকার থাকতে হবে (হয় সুস্পষ্ট বা অন্তর্নিহিতভাবে গণনাকৃত)। একটি আকার ছাড়া, ব্রাউজার ক্লিপিং বা কালিংয়ের জন্য তার বাউন্ডিং বক্স নির্ধারণ করতে পারে না।- সচেতন থাকুন যে কন্টেন্ট *ক্লিপ করা হবে* যদি এটি উপাদানের সীমানা অতিক্রম করে। এটি উদ্দিষ্ট আচরণ এবং যদি পরিচালনা না করা হয় তবে এটি একটি সমস্যা হতে পারে।
contain: size;
– মাত্রাগত স্থিতিশীলতার গ্যারান্টি
একটি উপাদানে contain: size;
প্রয়োগ করা ব্রাউজারের কাছে একটি ঘোষণা: "আমার আকার স্থির এবং পরিবর্তন হবে না, আমার ভিতরে কী কন্টেন্ট আছে বা তা কীভাবে পরিবর্তিত হয় তা নির্বিশেষে।" এটি একটি শক্তিশালী ইঙ্গিত কারণ এটি ব্রাউজারের উপাদানের আকার গণনা করার প্রয়োজন দূর করে, যা তার পূর্বপুরুষ এবং সিবলিংদের জন্য লেআউট গণনার স্থিতিশীলতায় সহায়তা করে।
এটি যেভাবে কাজ করে: যখন contain: size;
ব্যবহার করা হয়, ব্রাউজার ধরে নেয় যে উপাদানের মাত্রা অপরিবর্তনীয়। এটি তার কন্টেন্ট বা চাইল্ড এলিমেন্টের উপর ভিত্তি করে এই উপাদানের জন্য কোনো আকার গণনা করবে না। যদি উপাদানটির প্রস্থ বা উচ্চতা সিএসএস দ্বারা স্পষ্টভাবে সেট করা না থাকে, ব্রাউজার এটিকে শূন্য প্রস্থ এবং উচ্চতা হিসাবে বিবেচনা করবে। অতএব, এই প্রোপার্টি কার্যকর এবং দরকারী হওয়ার জন্য, উপাদানটির অবশ্যই অন্যান্য সিএসএস প্রোপার্টির মাধ্যমে একটি নির্দিষ্ট আকার সংজ্ঞায়িত থাকতে হবে (যেমন, width
, height
, min-height
)।
সুবিধাসমূহ:
- আকার পুনঃগণনা দূর করে: ব্রাউজার উপাদানের আকার গণনা না করে সময় বাঁচায়, যা লেআউট পর্যায়ের জন্য একটি মূল ইনপুট।
- লেআউট কন্টেনমেন্ট উন্নত করে: যখন
contain: layout;
এর সাথে মিলিত হয়, তখন এটি আরও শক্তিশালী করে যে এই উপাদানের উপস্থিতি আপস্ট্রিম লেআউট পুনঃগণনার কারণ হবে না। - লেআউট শিফট প্রতিরোধ করে (CLS উন্নতি): যে কন্টেন্ট গতিশীলভাবে লোড হয় (যেমন ছবি বা বিজ্ঞাপন), তার কন্টেইনারে
contain: size;
সহ একটি নির্দিষ্ট আকার ঘোষণা করা কিউমুলেটিভ লেআউট শিফট (CLS) প্রতিরোধ করতে সাহায্য করে, যা একটি গুরুত্বপূর্ণ কোর ওয়েব ভাইটাল মেট্রিক। কন্টেন্ট লোড হওয়ার আগেই স্থান সংরক্ষিত থাকে।
ব্যবহারের ক্ষেত্র:
- বিজ্ঞাপনের স্লট: বিজ্ঞাপন ইউনিটগুলোর প্রায়শই নির্দিষ্ট মাত্রা থাকে। বিজ্ঞাপন কন্টেইনারে
contain: size;
প্রয়োগ করা নিশ্চিত করে যে বিজ্ঞাপনের কন্টেন্ট পরিবর্তিত হলেও এটি পৃষ্ঠার লেআউটকে প্রভাবিত করবে না। - ইমেজ প্লেসহোল্ডার: একটি ছবি লোড হওয়ার আগে, আপনি তার স্থান সংরক্ষণ করতে
contain: size;
সহ একটি প্লেসহোল্ডার উপাদান ব্যবহার করতে পারেন, ছবিটি অবশেষে উপস্থিত হলে লেআউট শিফট প্রতিরোধ করে। - ভিডিও প্লেয়ার: যদি একটি ভিডিও প্লেয়ারের একটি নির্দিষ্ট অনুপাত বা মাত্রা থাকে, তবে তার র্যাপারে
contain: size;
নিশ্চিত করে যে এর কন্টেন্ট পার্শ্ববর্তী লেআউটকে প্রভাবিত করবে না।
বিবেচ্য বিষয়:
- সুস্পষ্ট আকারের জন্য অপরিহার্য: যদি উপাদানটির একটি সুস্পষ্ট
width
বাheight
(বাmin-height
/max-height
যা একটি নির্দিষ্ট আকারে সমাধান হয়) না থাকে,contain: size;
এটিকে শূন্য মাত্রায় সংকুচিত করে ফেলবে, সম্ভবত এর কন্টেন্ট লুকিয়ে ফেলবে। - কন্টেন্ট ওভারফ্লো: যদি উপাদানের ভিতরের কন্টেন্ট ঘোষিত স্থির আকারের বাইরে গতিশীলভাবে বৃদ্ধি পায়, তবে এটি ওভারফ্লো করবে এবং সম্ভাব্যভাবে ক্লিপ বা অস্পষ্ট হয়ে যাবে যদি না
overflow: visible;
স্পষ্টভাবে সেট করা হয় (যা তখন কন্টেনমেন্টের কিছু সুবিধা বাতিল করতে পারে)। - এটি খুব কমই একা ব্যবহৃত হয়, সাধারণত
layout
এবং/অথবাpaint
এর সাথে।
contain: style;
– স্টাইল পুনঃগণনা সীমিত করা
contain: style;
ব্যবহার করা ব্রাউজারকে বলে: "আমার বংশধরদের স্টাইলের পরিবর্তন কোনো পূর্বপুরুষ বা সিবলিং উপাদানের গণনাকৃত স্টাইলকে প্রভাবিত করবে না।" এটি স্টাইল ইনভ্যালিডেশন এবং পুনঃগণনা বিচ্ছিন্ন করার বিষয়ে, তাদের DOM ট্রি-তে উপরে ছড়ানো থেকে বিরত রাখে।
এটি যেভাবে কাজ করে: ব্রাউজারদের প্রায়শই কোনো উপাদানের পূর্বপুরুষ বা সিবলিংদের জন্য স্টাইল পুনরায় মূল্যায়ন করতে হয় যখন কোনো বংশধরের স্টাইল পরিবর্তিত হয়। এটি CSS কাউন্টার রিসেট, সাবট্রি তথ্যের উপর নির্ভরশীল CSS প্রোপার্টি (যেমন first-line
বা first-letter
সিউডো-এলিমেন্ট যা প্যারেন্ট টেক্সট স্টাইলিংকে প্রভাবিত করে), বা জটিল :hover
প্রভাব যা প্যারেন্ট স্টাইল পরিবর্তন করে, তার কারণে ঘটতে পারে। contain: style;
এই ধরনের ঊর্ধ্বমুখী স্টাইল নির্ভরতা প্রতিরোধ করে।
সুবিধাসমূহ:
- সংকীর্ণ স্টাইল স্কোপ: স্টাইল পুনঃগণনার পরিধি কন্টেইনড উপাদানের মধ্যে সীমাবদ্ধ করে, স্টাইল ইনভ্যালিডেশনের সাথে সম্পর্কিত পারফরম্যান্স খরচ হ্রাস করে।
- পূর্বাভাসযোগ্য স্টাইল অ্যাপ্লিকেশন: নিশ্চিত করে যে একটি কম্পোনেন্টের মধ্যে অভ্যন্তরীণ স্টাইল পরিবর্তনগুলো অনিচ্ছাকৃতভাবে পৃষ্ঠার অন্যান্য সম্পর্কহীন অংশের চেহারা ভাঙবে না বা পরিবর্তন করবে না।
ব্যবহারের ক্ষেত্র:
- ডাইনামিক থিমিং সহ জটিল কম্পোনেন্ট: ডিজাইন সিস্টেমে যেখানে কম্পোনেন্টগুলোর নিজস্ব অভ্যন্তরীণ থিমিং লজিক বা অবস্থা-নির্ভর স্টাইল থাকতে পারে যা ঘন ঘন পরিবর্তিত হয়,
contain: style;
প্রয়োগ করা নিশ্চিত করতে পারে যে এই পরিবর্তনগুলো স্থানীয়করণ করা হয়েছে। - তৃতীয় পক্ষের উইজেট: যদি আপনি একটি তৃতীয় পক্ষের স্ক্রিপ্ট বা কম্পোনেন্ট সংহত করেন যা তার নিজস্ব স্টাইল ইনজেক্ট করতে পারে বা গতিশীলভাবে পরিবর্তন করতে পারে, তবে এটিকে
contain: style;
দিয়ে কন্টেইন করা এই বাহ্যিক স্টাইলগুলোকে অপ্রত্যাশিতভাবে আপনার প্রধান অ্যাপ্লিকেশনের স্টাইলশিটকে প্রভাবিত করা থেকে বিরত রাখতে পারে।
বিবেচ্য বিষয়:
contain: style;
সম্ভবত বিচ্ছিন্নভাবে সবচেয়ে কম ব্যবহৃত মান কারণ এর প্রভাবগুলো আরও সূক্ষ্ম এবং খুব নির্দিষ্ট CSS ইন্টারঅ্যাকশনের জন্য নির্দিষ্ট।- এটি অন্তর্নিহিতভাবে উপাদানটিকে
counter
এবংfont
প্রোপার্টি কন্টেইন করতে সেট করে, যার মানে উপাদানের মধ্যে CSS কাউন্টারগুলো রিসেট হবে, এবং ফন্ট প্রোপার্টি ইনহেরিটেন্স প্রভাবিত হতে পারে। এটি একটি ব্রেকিং চেঞ্জ হতে পারে যদি আপনার ডিজাইন বিশ্বব্যাপী কাউন্টার বা ফন্ট আচরণের উপর নির্ভর করে। - এর প্রভাব বুঝতে প্রায়শই CSS ইনহেরিটেন্স এবং গণনা নিয়মের গভীর জ্ঞান প্রয়োজন।
contain: content;
– ব্যবহারিক শর্টহ্যান্ড (লেআউট + পেইন্ট)
contain: content;
মানটি একটি সুবিধাজনক শর্টহ্যান্ড যা দুটি সবচেয়ে ঘন ঘন উপকারী কন্টেনমেন্ট প্রকারকে একত্রিত করে: layout
এবং paint
। এটি contain: layout paint;
লেখার সমতুল্য। এটি অনেক সাধারণ UI কম্পোনেন্টের জন্য একটি চমৎকার ডিফল্ট পছন্দ করে তোলে।
এটি যেভাবে কাজ করে: `content` প্রয়োগ করে, আপনি ব্রাউজারকে বলছেন যে উপাদানটির অভ্যন্তরীণ লেআউট পরিবর্তনগুলো এর বাইরের কিছুকে প্রভাবিত করবে না, এবং এর অভ্যন্তরীণ পেইন্ট অপারেশনগুলোও সীমাবদ্ধ, যা উপাদানটি অফ-স্ক্রিন থাকলে দক্ষ কালিংয়ের অনুমতি দেয়। এটি পারফরম্যান্স সুবিধা এবং সম্ভাব্য পার্শ্ব প্রতিক্রিয়াগুলোর মধ্যে একটি শক্তিশালী ভারসাম্য।
সুবিধাসমূহ:
- বিস্তৃত পারফরম্যান্স উন্নতি: একটি একক ঘোষণার মাধ্যমে দুটি সবচেয়ে সাধারণ পারফরম্যান্স বাধা (লেআউট এবং পেইন্ট) সমাধান করে।
- নিরাপদ ডিফল্ট: এটি সাধারণত `strict` ব্যবহারের চেয়ে নিরাপদ কারণ এটি `size` কন্টেনমেন্ট আরোপ করে না, যার মানে উপাদানটি এখনও তার কন্টেন্টের উপর ভিত্তি করে বাড়তে বা সঙ্কুচিত হতে পারে, যা এটিকে ডাইনামিক UI-এর জন্য আরও নমনীয় করে তোলে।
- সরলীকৃত কোড: `layout` এবং `paint` আলাদাভাবে ঘোষণা করার তুলনায় ভার্বোসিটি হ্রাস করে।
ব্যবহারের ক্ষেত্র:
- স্বতন্ত্র তালিকা আইটেম: নিবন্ধ, পণ্য বা বার্তাগুলোর একটি ডাইনামিক তালিকায়, প্রতিটি তালিকা আইটেমে
contain: content;
প্রয়োগ করা নিশ্চিত করে যে একটি আইটেম যোগ/অপসারণ বা এর অভ্যন্তরীণ কন্টেন্ট পরিবর্তন করা (যেমন, একটি ছবি লোড হচ্ছে, একটি বিবরণ প্রসারিত হচ্ছে) শুধুমাত্র সেই নির্দিষ্ট আইটেমের জন্য লেআউট এবং পেইন্ট ট্রিগার করে, পুরো তালিকা বা পৃষ্ঠার জন্য নয়। - ড্যাশবোর্ড উইজেট: একটি ড্যাশবোর্ডের প্রতিটি উইজেটকে
contain: content;
দেওয়া যেতে পারে, যা তার স্বয়ংসম্পূর্ণতা নিশ্চিত করে। - ব্লগ পোস্ট কার্ড: ব্লগ পোস্ট সারাংশের একটি গ্রিডের জন্য, যেখানে প্রতিটি কার্ডে একটি ছবি, শিরোনাম এবং অংশ থাকে,
contain: content;
রেন্ডারিংকে বিচ্ছিন্ন রাখতে পারে।
বিবেচ্য বিষয়:
- যদিও সাধারণত নিরাপদ, মনে রাখবেন যে `paint` কন্টেনমেন্ট মানে কন্টেন্ট ক্লিপ করা হবে যদি এটি উপাদানের সীমানা অতিক্রম করে।
- উপাদানটি এখনও তার কন্টেন্টের উপর ভিত্তি করে আকার পরিবর্তন করবে, তাই যদি আপনার লেআউট শিফট প্রতিরোধ করার জন্য একটি সত্যিকারের স্থির আকারের প্রয়োজন হয়, তবে আপনাকে স্পষ্টভাবে
contain: size;
যোগ করতে হবে বা CSS দিয়ে মাত্রা পরিচালনা করতে হবে।
contain: strict;
– চূড়ান্ত বিচ্ছিন্নতা (লেআউট + পেইন্ট + সাইজ + স্টাইল)
contain: strict;
হল কন্টেনমেন্টের সবচেয়ে আক্রমণাত্মক রূপ, যা contain: layout paint size style;
ঘোষণার সমতুল্য। যখন আপনি contain: strict;
প্রয়োগ করেন, তখন আপনি ব্রাউজারের কাছে একটি খুব শক্তিশালী প্রতিশ্রুতি দিচ্ছেন: "এই উপাদানটি সম্পূর্ণরূপে বিচ্ছিন্ন। এর চাইল্ড এলিমেন্টগুলোর স্টাইল, লেআউট, পেইন্ট এবং এমনকি এর নিজস্ব আকারও এর বাইরের যেকোনো কিছু থেকে স্বাধীন।"
এটি যেভাবে কাজ করে: এই মানটি ব্রাউজারকে রেন্ডারিং অপ্টিমাইজ করার জন্য সর্বাধিক সম্ভাব্য তথ্য সরবরাহ করে। এটি ধরে নেয় যে উপাদানটির আকার স্থির (এবং যদি স্পষ্টভাবে সেট করা না হয় তবে শূন্যে সংকুচিত হবে), এর পেইন্ট ক্লিপ করা হয়েছে, এর লেআউট স্বাধীন, এবং এর স্টাইলগুলো পূর্বপুরুষদের প্রভাবিত করে না। এটি ব্রাউজারকে ডকুমেন্টের বাকি অংশ বিবেচনা করার সময় এই উপাদান সম্পর্কিত প্রায় সমস্ত গণনা এড়িয়ে যেতে দেয়।
সুবিধাসমূহ:
- সর্বাধিক পারফরম্যান্স লাভ: রেন্ডারিং কাজকে সম্পূর্ণরূপে বিচ্ছিন্ন করে সবচেয়ে উল্লেখযোগ্য সম্ভাব্য পারফরম্যান্স উন্নতি প্রদান করে।
- শক্তিশালী পূর্বাভাসযোগ্যতা: নিশ্চিত করে যে উপাদানটি পৃষ্ঠার বাকি অংশে কোনো অপ্রত্যাশিত রিফ্লো বা রিপেইন্ট ঘটাবে না।
- সত্যিকারের স্বাধীন কম্পোনেন্টের জন্য আদর্শ: যে কম্পোনেন্টগুলো সত্যিকারের স্বয়ংসম্পূর্ণ এবং যাদের মাত্রা জানা বা সঠিকভাবে নিয়ন্ত্রিত, তাদের জন্য উপযুক্ত।
ব্যবহারের ক্ষেত্র:
- জটিল ইন্টারেক্টিভ ম্যাপ: একটি ম্যাপ কম্পোনেন্ট যা ডাইনামিক টাইলস এবং মার্কার লোড করে, যেখানে এর মাত্রা পৃষ্ঠায় স্থির থাকে।
- কাস্টম ভিডিও প্লেয়ার বা এডিটর: যেখানে প্লেয়ার এলাকার একটি স্থির আকার থাকে এবং এর অভ্যন্তরীণ UI উপাদানগুলো পার্শ্ববর্তী পৃষ্ঠাকে প্রভাবিত না করে ঘন ঘন পরিবর্তিত হয়।
- গেম ক্যানভাস: ডকুমেন্টের মধ্যে একটি স্থির আকারের ক্যানভাস উপাদানে রেন্ডার করা ওয়েব-ভিত্তিক গেমগুলোর জন্য।
- অত্যন্ত অপ্টিমাইজড ভার্চুয়ালাইজড গ্রিড: এমন পরিস্থিতিতে যেখানে একটি বড় ডেটা গ্রিডের প্রতিটি সেল কঠোরভাবে আকারযুক্ত এবং পরিচালিত হয়।
বিবেচ্য বিষয়:
- সুস্পষ্ট আকারের প্রয়োজন: যেহেতু এটি
contain: size;
অন্তর্ভুক্ত করে, উপাদানটির *অবশ্যই* একটি নির্দিষ্টwidth
এবংheight
(বা অন্যান্য আকারের প্রোপার্টি) থাকতে হবে। যদি না থাকে, তবে এটি শূন্যে সংকুচিত হবে, এর বিষয়বস্তুকে অদৃশ্য করে দেবে। এটি সবচেয়ে সাধারণ সমস্যা। - কন্টেন্ট ক্লিপিং: যেহেতু `paint` কন্টেনমেন্ট অন্তর্ভুক্ত, তাই ঘোষিত মাত্রা অতিক্রমকারী যেকোনো কন্টেন্ট ক্লিপ করা হবে।
- লুকানো সমস্যার সম্ভাবনা: যেহেতু এটি খুব আক্রমণাত্মক, তাই যদি কম্পোনেন্টটি অনুমানের মতো স্বাধীন না হয় তবে অপ্রত্যাশিত আচরণ ঘটতে পারে। পুঙ্খানুপুঙ্খ পরীক্ষা অপরিহার্য।
- কম নমনীয়: `size` সীমাবদ্ধতার কারণে, এটি সেইসব কম্পোনেন্টের জন্য কম উপযুক্ত যাদের মাত্রা স্বাভাবিকভাবে কন্টেন্টের সাথে খাপ খায়।
বাস্তব-বিশ্বের অ্যাপ্লিকেশন: বিশ্বব্যাপী ব্যবহারকারীর অভিজ্ঞতা বৃদ্ধি
সিএসএস কন্টেনমেন্টের সৌন্দর্য তার বিভিন্ন ওয়েব ইন্টারফেসে ব্যবহারিক প্রয়োগযোগ্যতার মধ্যে নিহিত, যা বিশ্বব্যাপী ব্যবহারকারীর অভিজ্ঞতা উন্নত করে এমন বাস্তব পারফরম্যান্স সুবিধা নিয়ে আসে। আসুন কিছু সাধারণ পরিস্থিতি অন্বেষণ করি যেখানে contain
একটি উল্লেখযোগ্য পার্থক্য তৈরি করতে পারে:
ইনফিনিট স্ক্রোলিং তালিকা এবং গ্রিড অপ্টিমাইজ করা
অনেক আধুনিক ওয়েব অ্যাপ্লিকেশন, সোশ্যাল মিডিয়া ফিড থেকে শুরু করে ই-কমার্স পণ্য তালিকা পর্যন্ত, বিশাল পরিমাণে কন্টেন্ট প্রদর্শনের জন্য ইনফিনিট স্ক্রোলিং বা ভার্চুয়ালাইজড তালিকা ব্যবহার করে। সঠিক অপ্টিমাইজেশন ছাড়া, এই ধরনের তালিকায় নতুন আইটেম যোগ করা, বা এমনকি তাদের মধ্যে স্ক্রোল করা, ভিউপোর্টে প্রবেশ এবং প্রস্থানকারী উপাদানগুলোর জন্য ক্রমাগত এবং ব্যয়বহুল লেআউট এবং পেইন্ট অপারেশন ট্রিগার করতে পারে। এর ফলে জ্যাঙ্ক এবং একটি হতাশাজনক ব্যবহারকারীর অভিজ্ঞতা হয়, বিশেষ করে মোবাইল ডিভাইস বা ধীর নেটওয়ার্কে যা বিভিন্ন বিশ্বব্যাপী অঞ্চলে সাধারণ।
contain
দিয়ে সমাধান: প্রতিটি পৃথক তালিকা আইটেমে (যেমন, একটি <ul>
-এর মধ্যে <li>
উপাদান বা একটি গ্রিডে <div>
উপাদান) contain: content;
(বা `contain: layout paint;`) প্রয়োগ করা অত্যন্ত কার্যকর। এটি ব্রাউজারকে বলে যে একটি তালিকা আইটেমের মধ্যে পরিবর্তনগুলো (যেমন, একটি ছবি লোড হচ্ছে, টেক্সট প্রসারিত হচ্ছে) অন্যান্য আইটেমের লেআউট বা সামগ্রিক স্ক্রোল কন্টেইনারকে প্রভাবিত করবে না।
.list-item {
contain: content; /* লেআউট এবং পেইন্টের জন্য শর্টহ্যান্ড */
/* পূর্বাভাসযোগ্য আকারের জন্য অন্যান্য প্রয়োজনীয় স্টাইলিং যেমন display, width, height যোগ করুন */
}
সুবিধাসমূহ: ব্রাউজার এখন দৃশ্যমান তালিকা আইটেমগুলোর রেন্ডারিং দক্ষতার সাথে পরিচালনা করতে পারে। যখন একটি আইটেম ভিউতে স্ক্রোল করে, শুধুমাত্র তার ব্যক্তিগত লেআউট এবং পেইন্ট গণনা করা হয়, এবং যখন এটি স্ক্রোল করে বাইরে চলে যায়, ব্রাউজার জানে যে এটি অন্য কিছুকে প্রভাবিত না করে নিরাপদে এটি রেন্ডার করা এড়িয়ে যেতে পারে। এর ফলে উল্লেখযোগ্যভাবে মসৃণ স্ক্রোলিং এবং হ্রাসকৃত মেমরি ফুটপ্রিন্ট হয়, যা অ্যাপ্লিকেশনটিকে বিশ্বজুড়ে বিভিন্ন হার্ডওয়্যার এবং নেটওয়ার্ক অবস্থার ব্যবহারকারীদের কাছে অনেক বেশি প্রতিক্রিয়াশীল এবং অ্যাক্সেসযোগ্য মনে হয়।
স্বাধীন UI উইজেট এবং কার্ড কন্টেইন করা
ড্যাশবোর্ড, নিউজ পোর্টাল এবং অনেক ওয়েব অ্যাপ্লিকেশন একটি মডুলার পদ্ধতি ব্যবহার করে তৈরি করা হয়, যেখানে বিভিন্ন ধরণের তথ্য প্রদর্শনকারী একাধিক স্বাধীন "উইজেট" বা "কার্ড" থাকে। প্রতিটি উইজেটের নিজস্ব অভ্যন্তরীণ অবস্থা, ডাইনামিক কন্টেন্ট বা ইন্টারেক্টিভ উপাদান থাকতে পারে। কন্টেনমেন্ট ছাড়া, একটি উইজেটে একটি আপডেট (যেমন, একটি চার্ট অ্যানিমেটিং, একটি সতর্কতা বার্তা উপস্থিত হওয়া) অনিচ্ছাকৃতভাবে পুরো ড্যাশবোর্ড জুড়ে একটি রিফ্লো বা রিপেইন্ট ট্রিগার করতে পারে, যা লক্ষণীয় খাপছাড়াভাবের কারণ হতে পারে।
contain
দিয়ে সমাধান: প্রতিটি শীর্ষ-স্তরের উইজেট বা কার্ড কন্টেইনারে contain: content;
প্রয়োগ করুন।
.dashboard-widget {
contain: content;
/* সংজ্ঞায়িত মাত্রা বা নমনীয় আকার নিশ্চিত করুন যা বাহ্যিক রিফ্লো ঘটায় না */
}
.product-card {
contain: content;
/* স্থিতিশীল লেআউটের জন্য সামঞ্জস্যপূর্ণ আকার নির্ধারণ করুন বা ফ্লেক্স/গ্রিড ব্যবহার করুন */
}
সুবিধাসমূহ: যখন একটি পৃথক উইজেট আপডেট হয়, তখন তার রেন্ডারিং অপারেশনগুলো তার সীমানার মধ্যে সীমাবদ্ধ থাকে। ব্রাউজার আত্মবিশ্বাসের সাথে অন্যান্য উইজেট বা প্রধান ড্যাশবোর্ড কাঠামোর জন্য লেআউট এবং পেইন্ট পুনরায় মূল্যায়ন করা এড়িয়ে যেতে পারে। এর ফলে একটি উচ্চ পারফরম্যান্ট এবং স্থিতিশীল UI হয়, যেখানে ডাইনামিক আপডেটগুলো নির্বিঘ্ন মনে হয়, পৃষ্ঠার সামগ্রিক জটিলতা নির্বিশেষে, যা বিশ্বব্যাপী জটিল ডেটা ভিজ্যুয়ালাইজেশন বা নিউজ ফিডের সাথে ইন্টারঅ্যাক্ট করা ব্যবহারকারীদের উপকৃত করে।
অফ-স্ক্রিন কন্টেন্ট দক্ষতার সাথে পরিচালনা করা
অনেক ওয়েব অ্যাপ্লিকেশন এমন উপাদান ব্যবহার করে যা প্রাথমিকভাবে লুকানো থাকে এবং তারপরে প্রকাশ করা হয় বা ভিউতে অ্যানিমেট করা হয়, যেমন মোডাল ডায়ালগ, অফ-ক্যানভাস নেভিগেশন মেনু বা প্রসারণযোগ্য বিভাগ। যখন এই উপাদানগুলো লুকানো থাকে (যেমন, display: none;
বা visibility: hidden;
দিয়ে), তারা রেন্ডারিং রিসোর্স ব্যবহার করে না। যাইহোক, যদি তারা কেবল অফ-স্ক্রিনে অবস্থান করে বা স্বচ্ছ করা হয় (যেমন, left: -9999px;
বা opacity: 0;
ব্যবহার করে), ব্রাউজার এখনও তাদের জন্য লেআউট এবং পেইন্ট গণনা করতে পারে, যা রিসোর্স নষ্ট করে।
contain
দিয়ে সমাধান: এই অফ-স্ক্রিন উপাদানগুলোতে contain: paint;
প্রয়োগ করুন। উদাহরণস্বরূপ, একটি মোডাল ডায়ালগ যা ডান দিক থেকে স্লাইড করে আসে:
.modal-dialog {
position: fixed;
right: -100vw; /* প্রাথমিকভাবে অফ-স্ক্রিন */
width: 100vw;
height: 100vh;
contain: paint; /* ব্রাউজারকে বলুন যে এটি দৃশ্যমান না হলে এটি কালিং করা ঠিক আছে */
transition: right 0.3s ease-out;
}
.modal-dialog.is-visible {
right: 0;
}
সুবিধাসমূহ: contain: paint;
দিয়ে, ব্রাউজারকে স্পষ্টভাবে বলা হয় যে মোডাল ডায়ালগের কন্টেন্ট পেইন্ট করা হবে না যদি উপাদানটি নিজেই ভিউপোর্টের বাইরে থাকে। এর মানে হল যে যখন মোডালটি অফ-স্ক্রিনে থাকে, ব্রাউজার তার জটিল অভ্যন্তরীণ কাঠামোর জন্য অপ্রয়োজনীয় পেইন্টিং সাইকেল এড়িয়ে যায়, যা দ্রুত প্রাথমিক পৃষ্ঠা লোড এবং মোডাল ভিউতে আসার সময় মসৃণ রূপান্তর ঘটায়। এটি সীমিত প্রসেসিং ক্ষমতা সম্পন্ন ডিভাইসগুলোতে ব্যবহারকারীদের পরিষেবা প্রদানকারী অ্যাপ্লিকেশনগুলোর জন্য অত্যন্ত গুরুত্বপূর্ণ।
এমবেডেড তৃতীয়-পক্ষের কন্টেন্টের পারফরম্যান্স বৃদ্ধি
তৃতীয়-পক্ষের কন্টেন্ট, যেমন বিজ্ঞাপন ইউনিট, সোশ্যাল মিডিয়া উইজেট, বা এমবেডেড ভিডিও প্লেয়ার (প্রায়শই <iframe>
এর মাধ্যমে সরবরাহ করা হয়) সংহত করা পারফরম্যান্স সমস্যার একটি প্রধান উৎস হতে পারে। এই বাহ্যিক স্ক্রিপ্ট এবং কন্টেন্টগুলো অপ্রত্যাশিত হতে পারে, প্রায়শই তাদের নিজস্ব রেন্ডারিংয়ের জন্য উল্লেখযোগ্য রিসোর্স ব্যবহার করে, এবং কিছু ক্ষেত্রে, এমনকি হোস্ট পৃষ্ঠায় রিফ্লো বা রিপেইন্ট ঘটায়। ওয়েব পরিষেবাগুলোর বিশ্বব্যাপী প্রকৃতির কারণে, এই তৃতীয়-পক্ষের উপাদানগুলোর অপটিমাইজেশন ব্যাপকভাবে পরিবর্তিত হতে পারে।
contain
দিয়ে সমাধান: <iframe>
বা তৃতীয়-পক্ষের উইজেটের জন্য কন্টেইনারকে contain: strict;
বা অন্তত contain: content;
এবং contain: size;
সহ একটি উপাদানে মোড়ানো।
.third-party-ad-wrapper {
width: 300px;
height: 250px;
contain: strict; /* অথবা contain: layout paint size; */
/* নিশ্চিত করে যে বিজ্ঞাপনটি পার্শ্ববর্তী লেআউট/পেইন্টকে প্রভাবিত করবে না */
}
.social-widget-container {
width: 400px;
height: 600px;
contain: strict;
}
সুবিধাসমূহ: strict
কন্টেনমেন্ট প্রয়োগ করে, আপনি সবচেয়ে শক্তিশালী সম্ভাব্য বিচ্ছিন্নতা প্রদান করেন। ব্রাউজারকে বলা হয় যে তৃতীয়-পক্ষের কন্টেন্টটি তার নির্ধারিত র্যাপারের বাইরের কোনো কিছুর আকার, লেআউট, স্টাইল বা পেইন্টকে প্রভাবিত করবে না। এটি বাহ্যিক কন্টেন্টের আপনার প্রধান অ্যাপ্লিকেশনের পারফরম্যান্স হ্রাস করার সম্ভাবনাকে নাটকীয়ভাবে সীমিত করে, যা এমবেডেড কন্টেন্টের উৎস বা অপ্টিমাইজেশন স্তর নির্বিশেষে ব্যবহারকারীদের জন্য একটি আরও স্থিতিশীল এবং দ্রুত অভিজ্ঞতা প্রদান করে।
কৌশলগত বাস্তবায়ন: কখন এবং কিভাবে contain
প্রয়োগ করবেন
যদিও contain
উল্লেখযোগ্য পারফরম্যান্স সুবিধা প্রদান করে, এটি একটি জাদুকরী নিরাময় নয় যা নির্বিচারে প্রয়োগ করা যেতে পারে। কৌশলগত বাস্তবায়ন এর শক্তি উন্মোচন করার জন্য এবং অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়া এড়ানোর জন্য চাবিকাঠি। কখন এবং কিভাবে এটি ব্যবহার করতে হবে তা বোঝা প্রতিটি ওয়েব ডেভেলপারের জন্য অপরিহার্য।
কন্টেনমেন্টের জন্য প্রার্থী সনাক্তকরণ
contain
প্রোপার্টি প্রয়োগ করার জন্য সেরা প্রার্থীরা হল সেই উপাদানগুলো যা:
- পৃষ্ঠার অন্যান্য উপাদান থেকে তাদের অভ্যন্তরীণ লেআউট এবং স্টাইলের দিক থেকে মূলত স্বাধীন।
- একটি পূর্বাভাসযোগ্য বা স্থির আকার আছে, অথবা তাদের আকার এমনভাবে পরিবর্তিত হয় যা বিশ্বব্যাপী লেআউটকে প্রভাবিত করা উচিত নয়।
- ঘন ঘন অভ্যন্তরীণ আপডেট হয়, যেমন অ্যানিমেশন, ডাইনামিক কন্টেন্ট লোডিং বা অবস্থার পরিবর্তন।
- প্রায়শই অফ-স্ক্রিন বা লুকানো থাকে, কিন্তু দ্রুত প্রদর্শনের জন্য DOM-এর অংশ।
- তৃতীয়-পক্ষের কম্পোনেন্ট যাদের অভ্যন্তরীণ রেন্ডারিং আচরণ আপনার নিয়ন্ত্রণের বাইরে।
গ্রহণের জন্য সেরা অভ্যাস
সিএসএস কন্টেনমেন্টকে কার্যকরভাবে ব্যবহার করতে, এই সেরা অভ্যাসগুলো বিবেচনা করুন:
- প্রথমে প্রোফাইল করুন, পরে অপ্টিমাইজ করুন: সবচেয়ে গুরুত্বপূর্ণ ধাপ হল ব্রাউজার ডেভেলপার টুলস (যেমন, ক্রোম ডেভটুলস পারফরম্যান্স ট্যাব, ফায়ারফক্স পারফরম্যান্স মনিটর) ব্যবহার করে প্রকৃত পারফরম্যান্স বাধাগুলো সনাক্ত করা। দীর্ঘ সময় ধরে চলা লেআউট এবং পেইন্ট টাস্কগুলো সন্ধান করুন। অন্ধভাবে
contain
প্রয়োগ করবেন না; এটি একটি লক্ষ্যযুক্ত অপটিমাইজেশন হওয়া উচিত। content
দিয়ে ছোট করে শুরু করুন: বেশিরভাগ স্বয়ংসম্পূর্ণ UI কম্পোনেন্টের জন্য (যেমন, কার্ড, তালিকা আইটেম, মৌলিক উইজেট),contain: content;
একটি চমৎকার এবং নিরাপদ সূচনা বিন্দু। এটি কঠোর আকারের সীমাবদ্ধতা আরোপ না করে লেআউট এবং পেইন্টের জন্য উল্লেখযোগ্য সুবিধা প্রদান করে।- আকারের প্রভাব বুঝুন: যদি আপনি
contain: size;
বাcontain: strict;
ব্যবহার করেন, তবে এটি একেবারে অপরিহার্য যে উপাদানটির আপনার সিএসএসে একটি সংজ্ঞায়িতwidth
এবংheight
(বা অন্যান্য আকারের প্রোপার্টি) রয়েছে। এটি করতে ব্যর্থ হলে উপাদানটি সংকুচিত হয়ে যাবে এবং এর কন্টেন্ট অদৃশ্য হয়ে যাবে। - ব্রাউজার এবং ডিভাইস জুড়ে পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন: যদিও
contain
-এর জন্য ব্রাউজার সমর্থন শক্তিশালী, সর্বদা আপনার বাস্তবায়ন বিভিন্ন ব্রাউজার, সংস্করণ এবং বিশেষ করে বিভিন্ন ডিভাইসে (ডেস্কটপ, মোবাইল, ট্যাবলেট) এবং নেটওয়ার্ক পরিস্থিতিতে পরীক্ষা করুন। একটি উচ্চ-সম্পন্ন ডেস্কটপে যা পুরোপুরি কাজ করে তা ধীর ইন্টারনেটযুক্ত একটি অঞ্চলে একটি পুরানো মোবাইল ডিভাইসে ভিন্নভাবে পারফর্ম করতে পারে। - অ্যাক্সেসিবিলিটি বিবেচনা করুন: নিশ্চিত করুন যে
contain
প্রয়োগ করা অনিচ্ছাকৃতভাবে স্ক্রিন রিডার থেকে কন্টেন্ট লুকিয়ে না রাখে বা সহায়ক প্রযুক্তির উপর নির্ভরশীল ব্যবহারকারীদের জন্য কীবোর্ড নেভিগেশন ভেঙে না দেয়। যে উপাদানগুলো সত্যিকারের অফ-স্ক্রিন, তাদের যদি ভিউতে আনা হলে ফোকাসযোগ্য বা পঠনযোগ্য হওয়ার কথা থাকে তবে নিশ্চিত করুন যে সেগুলো এখনও অ্যাক্সেসিবিলিটির জন্য সঠিকভাবে পরিচালিত হচ্ছে। - অন্যান্য কৌশলগুলোর সাথে একত্রিত করুন:
contain
শক্তিশালী, কিন্তু এটি একটি বৃহত্তর পারফরম্যান্স কৌশলের অংশ। এটিকে অন্যান্য অপটিমাইজেশন যেমন লেজি লোডিং, ইমেজ অপ্টিমাইজেশন এবং দক্ষ জাভাস্ক্রিপ্টের সাথে একত্রিত করুন।
সাধারণ সমস্যা এবং সেগুলো এড়ানোর উপায়
- অপ্রত্যাশিত কন্টেন্ট ক্লিপিং: সবচেয়ে ঘন ঘন সমস্যা, বিশেষ করে
contain: paint;
বাcontain: strict;
-এর সাথে। যদি আপনার কন্টেন্ট কন্টেইনড উপাদানের সীমানা অতিক্রম করে, তবে এটি ক্লিপ করা হবে। নিশ্চিত করুন যে আপনার আকার শক্তিশালী বা যেখানে উপযুক্ত সেখানেoverflow: visible;
ব্যবহার করুন (যদিও এটি কিছু পেইন্ট কন্টেনমেন্ট সুবিধা বাতিল করতে পারে)। contain: size;
সহ উপাদান সংকুচিত হওয়া: যেমন উল্লেখ করা হয়েছে, যদিcontain: size;
সহ একটি উপাদানের সুস্পষ্ট মাত্রা না থাকে, তবে এটি সংকুচিত হবে। সর্বদাcontain: size;
-কে একটি সংজ্ঞায়িতwidth
এবংheight
-এর সাথে যুক্ত করুন।contain: style;
-এর প্রভাব ভুল বোঝা: যদিও সাধারণ ব্যবহারের ক্ষেত্রে খুব কমই সমস্যা হয়,contain: style;
সিএসএস কাউন্টার রিসেট করতে পারে বা এর বংশধরদের জন্য ফন্ট প্রোপার্টি ইনহেরিটেন্সকে প্রভাবিত করতে পারে। যদি আপনার ডিজাইন তাদের উপর নির্ভর করে তবে এই নির্দিষ্ট প্রভাবগুলো সম্পর্কে সচেতন থাকুন।- অতিরিক্ত প্রয়োগ: প্রতিটি উপাদানের কন্টেনমেন্টের প্রয়োজন নেই। পৃষ্ঠার প্রতিটি
<div>
-তে এটি প্রয়োগ করা তার নিজস্ব ওভারহেড তৈরি করতে পারে বা কেবল কোনো পরিমাপযোগ্য সুবিধা নাও থাকতে পারে। যেখানে বাধা সনাক্ত করা হয় সেখানে এটি বিচক্ষণতার সাথে ব্যবহার করুন।
contain
-এর বাইরে: ওয়েব পারফরম্যান্সের একটি সামগ্রিক দৃষ্টিভঙ্গি
যদিও সিএসএস contain
রেন্ডারিং পারফরম্যান্স বিচ্ছিন্ন করার জন্য একটি অবিশ্বাস্যভাবে মূল্যবান টুল, এটি মনে রাখা অপরিহার্য যে এটি একটি অনেক বড় ধাঁধার একটি অংশ। একটি সত্যিকারের পারফরম্যান্ট ওয়েব অভিজ্ঞতা তৈরি করার জন্য একটি সামগ্রিক পদ্ধতির প্রয়োজন, যা একাধিক অপটিমাইজেশন কৌশলকে একত্রিত করে। contain
কিভাবে এই বৃহত্তর প্রেক্ষাপটে ফিট করে তা বোঝা আপনাকে বিশ্বব্যাপী उत्कृष्ट ওয়েব অ্যাপ্লিকেশন তৈরি করতে ক্ষমতাবান করবে।
content-visibility
: একটি শক্তিশালী সহোদর: যে উপাদানগুলো প্রায়শই অফ-স্ক্রিনে থাকে, তাদের জন্যcontent-visibility
contain: paint;
-এর চেয়েও বেশি আক্রমণাত্মক অপটিমাইজেশন প্রদান করে। যখন একটি উপাদানেরcontent-visibility: auto;
থাকে, তখন ব্রাউজার তার সাবট্রি রেন্ডার করা পুরোপুরি এড়িয়ে যায় যখন এটি অফ-স্ক্রিনে থাকে, শুধুমাত্র যখন এটি দৃশ্যমান হতে চলেছে তখন লেআউট এবং পেইন্ট কাজ করে। এটি দীর্ঘ, স্ক্রোলযোগ্য পৃষ্ঠা বা অ্যাকর্ডিয়নের জন্য অবিশ্বাস্যভাবে শক্তিশালী। এটি প্রায়শইcontain: layout;
-এর সাথে ভালভাবে যুক্ত হয় সেইসব উপাদানগুলোর জন্য যা অফ-স্ক্রিন এবং অন-স্ক্রিন অবস্থার মধ্যে পরিবর্তন হয়।will-change
: ইচ্ছাকৃত ইঙ্গিত:will-change
সিএসএস প্রোপার্টি আপনাকে ব্রাউজারকে স্পষ্টভাবে ইঙ্গিত দিতে দেয় যে আপনি অদূর ভবিষ্যতে একটি উপাদানে কোন প্রোপার্টি অ্যানিমেট বা পরিবর্তন করার আশা করছেন। এটি ব্রাউজারকে তার রেন্ডারিং পাইপলাইন অপ্টিমাইজ করার জন্য সময় দেয়, উদাহরণস্বরূপ, উপাদানটিকে তার নিজস্ব লেয়ারে উন্নীত করে, যা মসৃণ অ্যানিমেশনের দিকে পরিচালিত করতে পারে। এটি অল্প পরিমাণে এবং শুধুমাত্র সত্যিকারের প্রত্যাশিত পরিবর্তনগুলোর জন্য ব্যবহার করুন, কারণ অতিরিক্ত প্রয়োগ মেমরি ব্যবহার বাড়িয়ে তুলতে পারে।- ভার্চুয়ালাইজেশন এবং উইন্ডোয়িং কৌশল: অত্যন্ত বড় তালিকার জন্য (হাজার বা দশ হাজার আইটেম), এমনকি
contain: content;
-ও যথেষ্ট নাও হতে পারে। যে ফ্রেমওয়ার্ক এবং লাইব্রেরিগুলো ভার্চুয়ালাইজেশন (বা উইন্ডোয়িং) বাস্তবায়ন করে, তারা শুধুমাত্র তালিকার আইটেমগুলোর একটি ছোট উপসেট রেন্ডার করে যা বর্তমানে ভিউপোর্টে দৃশ্যমান, ব্যবহারকারী স্ক্রোল করার সাথে সাথে গতিশীলভাবে আইটেম যোগ এবং অপসারণ করে। এটি বিশাল ডেটা সেট পরিচালনার জন্য চূড়ান্ত কৌশল। - সিএসএস অপটিমাইজেশন:
contain
-এর বাইরে, সিএসএস সংগঠনের জন্য সেরা অভ্যাসগুলো ব্যবহার করুন (যেমন, BEM, ITCSS), জটিল নির্বাচকের ব্যবহার কমিয়ে আনুন, এবং যেখানে সম্ভব!important
এড়িয়ে চলুন। দক্ষ সিএসএস ডেলিভারি (মিনিফিকেশন, কনক্যাটেনেশন, ক্রিটিক্যাল সিএসএস ইনলাইনিং) দ্রুত প্রাথমিক রেন্ডারের জন্য অপরিহার্য। - জাভাস্ক্রিপ্ট অপটিমাইজেশন: দক্ষতার সাথে DOM ম্যানিপুলেট করুন, ব্যয়বহুল পুনঃগণনা ট্রিগারকারী ইভেন্ট হ্যান্ডলারগুলোকে ডিবাউন্স বা থ্রোটল করুন, এবং যেখানে উপযুক্ত সেখানে ভারী গণনাগুলো ওয়েব ওয়ার্কারে অফলোড করুন। মূল থ্রেড ব্লক করে এমন জাভাস্ক্রিপ্টের পরিমাণ কমিয়ে আনুন।
- নেটওয়ার্ক অপটিমাইজেশন: এর মধ্যে রয়েছে ইমেজ অপটিমাইজেশন (কম্প্রেশন, সঠিক ফরম্যাট, প্রতিক্রিয়াশীল ছবি), ছবি এবং ভিডিওর লেজি লোডিং, দক্ষ ফন্ট লোডিং কৌশল, এবং বিশ্বব্যাপী ব্যবহারকারীদের কাছাকাছি অ্যাসেট পরিবেশন করার জন্য কন্টেন্ট ডেলিভারি নেটওয়ার্ক (CDN) ব্যবহার করা।
- সার্ভার-সাইড রেন্ডারিং (SSR) / স্ট্যাটিক সাইট জেনারেশন (SSG): গুরুত্বপূর্ণ কন্টেন্টের জন্য, সার্ভারে বা বিল্ড টাইমে HTML জেনারেট করা অনুভূত পারফরম্যান্স এবং কোর ওয়েব ভাইটালসকে উল্লেখযোগ্যভাবে উন্নত করতে পারে, কারণ প্রাথমিক রেন্ডারটি পূর্ব-গণনা করা হয়।
সিএসএস কন্টেনমেন্টকে এই বৃহত্তর কৌশলগুলোর সাথে একত্রিত করে, ডেভেলপাররা সত্যিকারের উচ্চ-পারফরম্যান্স ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারে যা তাদের ডিভাইস, নেটওয়ার্ক বা ভৌগোলিক অবস্থান নির্বিশেষে সর্বত্র ব্যবহারকারীদের জন্য একটি উন্নত অভিজ্ঞতা প্রদান করে।
উপসংহার: সকলের জন্য একটি দ্রুত, আরও অ্যাক্সেসযোগ্য ওয়েব তৈরি করা
সিএসএস contain
প্রোপার্টি ওয়েব স্ট্যান্ডার্ডের ক্রমাগত বিবর্তনের একটি প্রমাণ হিসাবে দাঁড়িয়ে আছে, যা ডেভেলপারদের রেন্ডারিং পারফরম্যান্সের উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে। আপনাকে স্পষ্টভাবে কম্পোনেন্টগুলো বিচ্ছিন্ন করতে সক্ষম করে, এটি ব্রাউজারগুলোকে আরও দক্ষতার সাথে কাজ করতে দেয়, অপ্রয়োজনীয় লেআউট এবং পেইন্ট কাজ হ্রাস করে যা প্রায়শই জটিল ওয়েব অ্যাপ্লিকেশনগুলোকে জর্জরিত করে। এটি সরাসরি একটি আরও তরল, প্রতিক্রিয়াশীল এবং উপভোগ্য ব্যবহারকারীর অভিজ্ঞতায় রূপান্তরিত হয়।
এমন একটি বিশ্বে যেখানে ডিজিটাল উপস্থিতি সর্বাপেক্ষা গুরুত্বপূর্ণ, একটি পারফরম্যান্ট এবং একটি অলস ওয়েবসাইটের মধ্যে পার্থক্য প্রায়শই সাফল্য বা ব্যর্থতা নির্ধারণ করে। একটি নির্বিঘ্ন অভিজ্ঞতা প্রদানের ক্ষমতা কেবল নান্দনিকতার বিষয় নয়; এটি অ্যাক্সেসিবিলিটি, এনগেজমেন্ট এবং শেষ পর্যন্ত, বিশ্বের প্রতিটি কোণ থেকে ব্যবহারকারীদের জন্য ডিজিটাল বিভাজন দূর করার বিষয়। একটি উন্নয়নশীল দেশের একজন ব্যবহারকারী একটি পুরানো মোবাইল ফোনে আপনার পরিষেবা অ্যাক্সেস করার সময় সিএসএস কন্টেনমেন্ট দিয়ে অপ্টিমাইজ করা একটি সাইট থেকে ব্যাপকভাবে উপকৃত হবেন, ঠিক যেমন একটি উচ্চ-সম্পন্ন ডেস্কটপ সহ ফাইবার অপটিক সংযোগে থাকা একজন ব্যবহারকারী।
আমরা সকল ফ্রন্ট-এন্ড ডেভেলপারকে contain
-এর ক্ষমতাগুলো অন্বেষণ করতে উৎসাহিত করি। আপনার অ্যাপ্লিকেশনগুলো প্রোফাইল করুন, অপটিমাইজেশনের জন্য উপযুক্ত ক্ষেত্রগুলো চিহ্নিত করুন এবং কৌশলগতভাবে এই শক্তিশালী সিএসএস ঘোষণাগুলো প্রয়োগ করুন। contain
-কে একটি দ্রুত সমাধান হিসাবে নয়, বরং একটি চিন্তাশীল, স্থাপত্যগত সিদ্ধান্ত হিসাবে গ্রহণ করুন যা আপনার ওয়েব প্রকল্পগুলোর দৃঢ়তা এবং দক্ষতায় অবদান রাখে।
সিএসএস কন্টেনমেন্টের মতো কৌশলগুলোর মাধ্যমে রেন্ডারিং পাইপলাইনকে সতর্কতার সাথে অপ্টিমাইজ করে, আমরা একটি এমন ওয়েব তৈরিতে অবদান রাখি যা দ্রুত, আরও দক্ষ এবং সর্বত্র সকলের জন্য সত্যিকারের অ্যাক্সেসযোগ্য। পারফরম্যান্সের প্রতি এই প্রতিশ্রুতি একটি উন্নত বিশ্বব্যাপী ডিজিটাল ভবিষ্যতের প্রতি একটি প্রতিশ্রুতি। আজই contain
নিয়ে পরীক্ষা শুরু করুন এবং আপনার অ্যাপ্লিকেশনগুলোর জন্য ওয়েব পারফরম্যান্সের পরবর্তী স্তরটি আনলক করুন!