HTML

একটি DOCTYPE কী করে?

DOCTYPE হলো ডকুমেন্ট টাইপের সংক্ষিপ্ত রূপ। একটি DOCTYPE সবসময় একটি DTD - ডকুমেন্ট টাইপ ডেফিনিশনের সাথে সম্পর্কিত।

একটি DTD সংজ্ঞায়িত করে যে একটি নির্দিষ্ট ধরণের ডকুমেন্ট কিভাবে গঠিত হওয়া উচিত (যেমন, একটি button একটি span ধারণ করতে পারে কিন্তু একটি div নয়), যেখানে একটি DOCTYPE ঘোষণা করে যে একটি ডকুমেন্ট সম্ভবত কোন DTD কে সম্মান করে (যেমন, এই ডকুমেন্টটি HTML DTD কে সম্মান করে)।

ওয়েবপৃষ্ঠার জন্য, DOCTYPE ঘোষণা প্রয়োজন। এটি ব্যবহারকারী এজেন্টদের বলতে ব্যবহৃত হয় যে আপনার ডকুমেন্ট HTML স্পেসিফিকেশনের কোন সংস্করণকে সম্মান করে। একবার একজন ব্যবহারকারী এজেন্ট একটি সঠিক DOCTYPE সনাক্ত করলে, এটি ডকুমেন্ট পড়ার জন্য এই DOCTYPE এর সাথে মিলে যাওয়া নো-কুইর্কস মোড চালু করবে। যদি একজন ব্যবহারকারী এজেন্ট একটি সঠিক DOCTYPE সনাক্ত না করে, তাহলে এটি কুইর্কস মোড চালু করবে।

HTML5 স্ট্যান্ডার্ডের জন্য DOCTYPE ঘোষণা হলো <!DOCTYPE html>

আপনি কিভাবে একাধিক ভাষায় কন্টেন্ট সহ একটি পৃষ্ঠা পরিবেশন করবেন?

আমি ধরে নিচ্ছি যে এটি সবচেয়ে সাধারণ কেস সম্পর্কে জিজ্ঞাসা করছে, যা হলো কিভাবে একাধিক ভাষায় উপলব্ধ কন্টেন্ট সহ একটি পৃষ্ঠা পরিবেশন করতে হয়, তবে পৃষ্ঠার মধ্যেকার কন্টেন্ট শুধুমাত্র একটি সামঞ্জস্যপূর্ণ ভাষায় প্রদর্শিত হওয়া উচিত।

যখন একটি HTTP অনুরোধ সার্ভারে করা হয়, তখন অনুরোধকারী ব্যবহারকারী এজেন্ট সাধারণত ভাষা পছন্দ সম্পর্কে তথ্য পাঠায়, যেমন Accept-Language হেডারে। সার্ভার তখন এই তথ্য ব্যবহার করে ডকুমেন্টের একটি সংস্করণ উপযুক্ত ভাষায় ফিরিয়ে দিতে পারে যদি এমন কোনো বিকল্প উপলব্ধ থাকে। ফেরত আসা HTML ডকুমেন্টে <html> ট্যাগে lang অ্যাট্রিবিউটও ঘোষণা করা উচিত, যেমন <html lang="en">...</html>

অবশ্যই এটি সার্চ ইঞ্জিনকে জানাতে নিরর্থক যে একই কন্টেন্ট বিভিন্ন ভাষায় উপলব্ধ, এবং তাই আপনাকে <head>hreflang অ্যাট্রিবিউটও ব্যবহার করতে হবে। যেমন <link rel="alternate" hreflang="de" href="http://de.example.com/page.html" />

ব্যাক এন্ডে, HTML মার্কআপে i18n প্লেসহোল্ডার এবং নির্দিষ্ট ভাষার জন্য YML বা JSON ফরম্যাটে সংরক্ষিত কন্টেন্ট থাকবে। সার্ভার তখন সেই নির্দিষ্ট ভাষার কন্টেন্ট সহ HTML পৃষ্ঠাটি গতিশীলভাবে তৈরি করে, সাধারণত একটি ব্যাক এন্ড ফ্রেমওয়ার্কের সাহায্যে।

বহুভাষিক সাইটগুলির জন্য ডিজাইন বা ডেভেলপ করার সময় আপনাকে কী ধরনের বিষয় সম্পর্কে সতর্ক থাকতে হবে?

  • আপনার HTML এ lang অ্যাট্রিবিউট ব্যবহার করুন।
  • ব্যবহারকারীদের তাদের মাতৃভাষায় নির্দেশিত করা - একজন ব্যবহারকারীকে কোনো ঝামেলা ছাড়াই সহজেই তার দেশ/ভাষা পরিবর্তন করার অনুমতি দিন।
  • রাস্টার-ভিত্তিক ছবিতে (যেমন png, gif, jpg, ইত্যাদি) লেখা, একটি স্কেলেবল পদ্ধতি নয় - যেকোনো কম্পিউটারে সুন্দর, অ-সিস্টেম ফন্ট প্রদর্শনের জন্য ছবিতে টেক্সট স্থাপন করা এখনও একটি জনপ্রিয় উপায়। তবে, ছবির টেক্সট অনুবাদ করার জন্য, প্রতিটি টেক্সট স্ট্রিংয়ের জন্য প্রতিটি ভাষার জন্য একটি আলাদা ছবি তৈরি করতে হবে। এমন কয়েকটির বেশি প্রতিস্থাপন দ্রুত নিয়ন্ত্রণের বাইরে চলে যেতে পারে।
  • সীমাবদ্ধ শব্দ/বাক্যের দৈর্ঘ্য - কিছু কন্টেন্ট অন্য ভাষায় লেখা হলে দীর্ঘ হতে পারে। ডিজাইনে লেআউট বা ওভারফ্লো সমস্যা সম্পর্কে সতর্ক থাকুন। ডিজাইন এমনভাবে এড়িয়ে চলা ভালো যেখানে টেক্সটের পরিমাণ ডিজাইনকে তৈরি বা নষ্ট করে দেবে। শিরোনাম, লেবেল এবং বোতামের মতো বিষয়গুলির ক্ষেত্রে অক্ষরের সংখ্যা গুরুত্বপূর্ণ। শরীরের লেখা বা মন্তব্যের মতো অবাধ প্রবাহমান টেক্সটের ক্ষেত্রে এগুলি কম সমস্যাযুক্ত।
  • রঙ কিভাবে অনুভূত হয় সেদিকে খেয়াল রাখুন - রঙ বিভিন্ন ভাষা এবং সংস্কৃতি জুড়ে ভিন্নভাবে অনুভূত হয়। ডিজাইনে রঙ সঠিকভাবে ব্যবহার করা উচিত।
  • তারিখ এবং মুদ্রা বিন্যাস করা - ক্যালেন্ডারের তারিখগুলি কখনও কখনও বিভিন্ন উপায়ে উপস্থাপন করা হয়। যেমন মার্কিন যুক্তরাষ্ট্রে "মে 31, 2012" বনাম ইউরোপের কিছু অংশে "31 মে 2012"।
  • অনুবাদ করা স্ট্রিংগুলি একত্রিত করবেন না - "The date today is " + date এর মতো কিছু করবেন না। এটি ভিন্ন শব্দ ক্রম সহ ভাষাগুলিতে ভেঙে যাবে। পরিবর্তে প্রতিটি ভাষার জন্য প্যারামিটার প্রতিস্থাপন সহ একটি টেমপ্লেট স্ট্রিং ব্যবহার করুন। উদাহরণস্বরূপ, ইংরেজি এবং চীনা ভাষায় নিম্নলিখিত দুটি বাক্য দেখুন: I will travel on {% date %} এবং {% date %} আমি যাত্রা করব। মনে রাখবেন যে ভাষার ব্যাকরণ নিয়মের কারণে ভেরিয়েবলের অবস্থান ভিন্ন।
  • ভাষা পড়ার দিক - ইংরেজিতে, আমরা বাম থেকে ডানে, উপর থেকে নিচে পড়ি, ঐতিহ্যবাহী জাপানিজ ভাষায়, টেক্সট উপর থেকে নিচে, ডান থেকে বামে পড়া হয়।
  • দরকারী-কিছু - পাথে লোকেল অন্তর্ভুক্ত করুন (যেমন en_US, zh_CN, ইত্যাদি)।

`data-` অ্যাট্রিবিউটগুলি কিসের জন্য ভালো?

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

আজকাল, data- অ্যাট্রিবিউট ব্যবহার করা সাধারণত উৎসাহিত করা হয় না। একটি কারণ হল যে ব্যবহারকারীরা ব্রাউজারে 'এলিমেন্ট পরিদর্শন করুন' ব্যবহার করে ডেটা অ্যাট্রিবিউটটি সহজেই পরিবর্তন করতে পারেন। ডেটা মডেলটি জাভাস্ক্রিপ্টের মধ্যেই ভালভাবে সংরক্ষিত হয় এবং সম্ভবত একটি লাইব্রেরি বা ফ্রেমওয়ার্কের মাধ্যমে ডেটা বাইন্ডিংয়ের মাধ্যমে DOM এর সাথে আপডেট থাকে।

তবে, ডেটা অ্যাট্রিবিউটের একটি পুরোপুরি বৈধ ব্যবহার হল Selenium এবং Capybara এর মতো এন্ড টু এন্ড টেস্টিং ফ্রেমওয়ার্কগুলির জন্য একটি হুক যোগ করা, যার জন্য অর্থহীন ক্লাস বা আইডি অ্যাট্রিবিউট তৈরি করতে হয় না। এলিমেন্টের একটি নির্দিষ্ট Selenium স্পেক দ্বারা খুঁজে পাওয়ার একটি উপায় প্রয়োজন এবং data-selector='the-thing' এর মতো কিছু করা সেম্যান্টিক মার্কআপকে অন্যভাবে জটিল না করে এটি করার একটি বৈধ উপায়।

HTML5 কে একটি উন্মুক্ত ওয়েব প্ল্যাটফর্ম হিসেবে বিবেচনা করুন। HTML5 এর বিল্ডিং ব্লকগুলি কী কী?

  • সেম্যান্টিকস - আপনার কন্টেন্ট আরও স্পষ্টভাবে বর্ণনা করার অনুমতি দেয়।
  • কানেক্টিভিটি - নতুন এবং উদ্ভাবনী উপায়ে সার্ভারের সাথে যোগাযোগের অনুমতি দেয়।
  • অফলাইন এবং স্টোরেজ - ওয়েবপেজগুলিকে ক্লায়েন্ট-সাইডে স্থানীয়ভাবে ডেটা সংরক্ষণ করতে এবং অফলাইনে আরও দক্ষতার সাথে কাজ করার অনুমতি দেয়।
  • মাল্টিমিডিয়া - ভিডিও এবং অডিওকে ওপেন ওয়েবে প্রথম শ্রেণীর নাগরিক করে তোলে।
  • 2D/3D গ্রাফিক্স এবং প্রভাব - উপস্থাপনা বিকল্পগুলির আরও বৈচিত্র্যময় পরিসরের অনুমতি দেয়।
  • পারফরম্যান্স এবং ইন্টিগ্রেশন - বৃহত্তর গতি অপ্টিমাইজেশন এবং কম্পিউটার হার্ডওয়্যারের উন্নত ব্যবহার সরবরাহ করে।
  • ডিভাইস অ্যাক্সেস - বিভিন্ন ইনপুট এবং আউটপুট ডিভাইস ব্যবহারের অনুমতি দেয়।
  • স্টাইলিং - লেখকদের আরও পরিশীলিত থিম লিখতে দেয়।

একটি `cookie`, `sessionStorage` এবং `localStorage` এর মধ্যে পার্থক্য বর্ণনা করুন।

উপরে উল্লিখিত সমস্ত প্রযুক্তি ক্লায়েন্ট সাইডে কী-ভ্যালু স্টোরেজ মেকানিজম। তারা শুধুমাত্র স্ট্রিং হিসাবে মান সংরক্ষণ করতে সক্ষম।

| | cookie | localStorage | sessionStorage | | --- | --- | --- | --- | | প্রবর্তক | ক্লায়েন্ট বা সার্ভার। সার্ভার Set-Cookie হেডার ব্যবহার করতে পারে | ক্লায়েন্ট | ক্লায়েন্ট | | মেয়াদোত্তীর্ণ | ম্যানুয়ালি সেট করা হয় | চিরতরে | ট্যাব বন্ধ হলে | | ব্রাউজার সেশন জুড়ে স্থায়ী | মেয়াদ শেষ হওয়ার উপর নির্ভর করে | হ্যাঁ | না | | প্রতিটি HTTP অনুরোধের সাথে সার্ভারে পাঠানো হয় | কুকিগুলি স্বয়ংক্রিয়ভাবে Cookie হেডার ব্যবহার করে পাঠানো হয় | না | না | | ধারণক্ষমতা (প্রতি ডোমেন) | 4kb | 5MB | 5MB | | অ্যাক্সেসযোগ্যতা | যেকোনো উইন্ডো | যেকোনো উইন্ডো | একই ট্যাব |

দ্রষ্টব্য: যদি ব্যবহারকারী ব্রাউজার দ্বারা সরবরাহ করা যেকোনো পদ্ধতির মাধ্যমে ব্রাউজার ডেটা পরিষ্কার করার সিদ্ধান্ত নেয়, তাহলে এটি সংরক্ষিত যেকোনো cookie, localStorage, বা sessionStorage পরিষ্কার করবে। স্থানীয় স্থায়িত্বের জন্য ডিজাইন করার সময় এটি মনে রাখা গুরুত্বপূর্ণ, বিশেষ করে সার্ভার সাইডে একটি ডাটাবেসে বা অনুরূপ (যা অবশ্যই ব্যবহারকারীর ক্রিয়াকলাপ সত্ত্বেও স্থায়ী হবে) সংরক্ষণের বিকল্পগুলির সাথে তুলনা করার সময়।

`<script>`, `<script async>` এবং `<script defer>` এর মধ্যে পার্থক্য বর্ণনা করুন।

  • <script> - HTML পার্সিং ব্লক করা হয়, স্ক্রিপ্ট আনা হয় এবং অবিলম্বে এক্সিকিউট করা হয়, স্ক্রিপ্ট এক্সিকিউট হওয়ার পরে HTML পার্সিং আবার শুরু হয়।
  • <script async> - স্ক্রিপ্ট HTML পার্সিংয়ের সমান্তরালে আনা হবে এবং যত তাড়াতাড়ি উপলব্ধ হবে (সম্ভবত HTML পার্সিং শেষ হওয়ার আগে) এক্সিকিউট করা হবে। যখন স্ক্রিপ্ট পৃষ্ঠার অন্য কোনো স্ক্রিপ্টের উপর নির্ভরশীল নয়, উদাহরণস্বরূপ, অ্যানালিটিক্স, তখন async ব্যবহার করুন।
  • <script defer> - স্ক্রিপ্ট HTML পার্সিংয়ের সমান্তরালে আনা হবে এবং পৃষ্ঠা পার্সিং শেষ হলে এক্সিকিউট করা হবে। যদি একাধিক স্ক্রিপ্ট থাকে, তাহলে প্রতিটি ডিফার্ড স্ক্রিপ্ট ডকুমেন্টে তাদের সম্মুখীন হওয়ার ক্রম অনুসারে এক্সিকিউট করা হয়। যদি একটি স্ক্রিপ্ট সম্পূর্ণ পার্স করা DOM এর উপর নির্ভর করে, তাহলে defer অ্যাট্রিবিউটটি নিশ্চিত করতে সাহায্য করবে যে HTML সম্পূর্ণরূপে পার্স হওয়ার পরেই স্ক্রিপ্ট এক্সিকিউট হবে। একটি ডিফার্ড স্ক্রিপ্টে document.write থাকা উচিত নয়।

দ্রষ্টব্য: async এবং defer অ্যাট্রিবিউটগুলি src অ্যাট্রিবিউট নেই এমন স্ক্রিপ্টগুলির জন্য উপেক্ষা করা হয়।

সাধারণত CSS `<link>` গুলোকে `<head></head>` এর মধ্যে এবং JS `<script>` গুলোকে `</body>` এর ঠিক আগে রাখা কেন ভালো ধারণা? আপনি কি কোনো ব্যতিক্রম জানেন?

<link> গুলোকে <head> এ রাখা

<head><link> গুলোকে রাখা একটি অপ্টিমাইজড ওয়েবসাইট তৈরির সঠিক স্পেসিফিকেশনের অংশ। যখন একটি পৃষ্ঠা প্রথম লোড হয়, তখন HTML এবং CSS একই সাথে পার্স করা হয়; HTML DOM (Document Object Model) তৈরি করে এবং CSS CSSOM (CSS Object Model) তৈরি করে। ওয়েবসাইটে ভিজ্যুয়াল তৈরি করার জন্য উভয়ই প্রয়োজন, যা দ্রুত "প্রথম অর্থপূর্ণ পেইন্ট" সময় দেয়। এই প্রগতিশীল রেন্ডারিং একটি বিভাগ অপ্টিমাইজেশন সাইটগুলি তাদের পারফরম্যান্স স্কোরে পরিমাপ করা হয়। ডকুমেন্টের নিচে স্টাইলশীটগুলি রাখা অনেক ব্রাউজারে প্রগতিশীল রেন্ডারিং বাধাগ্রস্ত করে। কিছু ব্রাউজার রেন্ডারিং ব্লক করে যদি তাদের স্টাইল পরিবর্তিত হয় তবে পৃষ্ঠার উপাদানগুলিকে আবার রঙ করার প্রয়োজন এড়াতে। ব্যবহারকারী তখন একটি ফাঁকা সাদা পৃষ্ঠা দেখতে আটকে থাকে। অন্য সময় অ-স্টাইলযুক্ত কন্টেন্টের ঝলক (FOUC) থাকতে পারে, যা কোনো স্টাইলিং প্রয়োগ করা হয়নি এমন একটি ওয়েবপৃষ্ঠা দেখায়।

<script> গুলোকে </body> এর ঠিক আগে রাখা

<script> ট্যাগগুলি HTML পার্সিং ব্লক করে যখন সেগুলি ডাউনলোড এবং এক্সিকিউট করা হয় যা আপনার পৃষ্ঠা ধীর করে দিতে পারে। স্ক্রিপ্টগুলি নিচে রাখলে HTML প্রথমে পার্স এবং ব্যবহারকারীকে প্রদর্শিত হতে দেবে।

<script> গুলোকে নিচে রাখার একটি ব্যতিক্রম হলো যখন আপনার স্ক্রিপ্টে document.write() থাকে, কিন্তু আজকাল document.write() ব্যবহার করা ভালো অভ্যাস নয়। এছাড়াও, <script> গুলোকে নিচে রাখলে ব্রাউজার পুরো ডকুমেন্ট পার্স না হওয়া পর্যন্ত স্ক্রিপ্ট ডাউনলোড শুরু করতে পারে না। এটি নিশ্চিত করে যে আপনার কোড যা DOM উপাদানগুলিকে ম্যানিপুলেট করতে হবে তা ত্রুটি ফেলবে না এবং পুরো স্ক্রিপ্ট বন্ধ করবে না। যদি আপনাকে <head><script> গুলোকে রাখতে হয়, তাহলে defer অ্যাট্রিবিউট ব্যবহার করুন, যা HTML পার্স হওয়ার পরেই স্ক্রিপ্ট চালানোর একই প্রভাব অর্জন করবে কিন্তু ব্রাউজার স্ক্রিপ্টটি আগে ডাউনলোড করতে পারবে।

মনে রাখবেন যে ক্লোজিং </body> ট্যাগের ঠিক আগে স্ক্রিপ্ট স্থাপন করলে এমন একটি বিভ্রম তৈরি হবে যে পৃষ্ঠাটি একটি খালি ক্যাশে দ্রুত লোড হয় (কারণ স্ক্রিপ্টগুলি ডকুমেন্টের বাকি অংশ ডাউনলোড ব্লক করবে না)। তবে, যদি আপনার কাছে কিছু কোড থাকে যা পৃষ্ঠা লোডের সময় চালাতে চান, তবে এটি পুরো পৃষ্ঠা লোড হওয়ার পরেই কার্যকর হওয়া শুরু করবে। যদি আপনি সেই স্ক্রিপ্টগুলি <head> ট্যাগে রাখেন, তবে তারা আগে কার্যকর হওয়া শুরু করবে - তাই একটি প্রাইমড ক্যাশে পৃষ্ঠাটি আসলে দ্রুত লোড হতে দেখাবে।

<head> এবং <body> ট্যাগগুলি এখন ঐচ্ছিক

HTML5 স্পেসিফিকেশন অনুযায়ী, <head> এবং <body> এর মতো কিছু HTML ট্যাগ ঐচ্ছিক। গুগল এর স্টাইল গাইড এমনকি বাইট সংরক্ষণের জন্য সেগুলিকে সরিয়ে ফেলার পরামর্শ দেয়। তবে, এই অভ্যাসটি এখনও ব্যাপকভাবে গৃহীত হয়নি এবং পারফরম্যান্স লাভ সম্ভবত ন্যূনতম হবে এবং বেশিরভাগ সাইটের জন্য এটি সম্ভবত কোনো ব্যাপার হবে না।

প্রগতিশীল রেন্ডারিং কী?

প্রগতিশীল রেন্ডারিং হলো ওয়েবপৃষ্ঠার কর্মক্ষমতা উন্নত করার জন্য ব্যবহৃত কৌশলগুলির নাম (বিশেষ করে, অনুভূত লোড সময় উন্নত করা) যাতে কন্টেন্ট যত দ্রুত সম্ভব প্রদর্শনের জন্য রেন্ডার করা যায়।

ব্রডব্যান্ড ইন্টারনেট আসার আগে এটি অনেক বেশি প্রচলিত ছিল কিন্তু মোবাইল ডেটা সংযোগগুলি ক্রমবর্ধমান জনপ্রিয় (এবং unreliable) হওয়ায় এটি আধুনিক উন্নয়নে এখনও ব্যবহৃত হয়!

এই ধরনের কৌশলগুলির উদাহরণ:

  • ছবিগুলির লেজি লোডিং - পৃষ্ঠার সমস্ত ছবি একবারে লোড হয় না। যখন ব্যবহারকারী পৃষ্ঠার সেই অংশে স্ক্রোল করে যা ছবিটি প্রদর্শন করে, তখন জাভাস্ক্রিপ্ট ব্যবহার করে ছবিটি লোড করা হবে।
  • দৃশ্যমান কন্টেন্টকে অগ্রাধিকার দেওয়া (বা above-the-fold রেন্ডারিং) - ব্যবহারকারীর ব্রাউজারে প্রথম প্রদর্শিত হওয়ার জন্য প্রয়োজনীয় ন্যূনতম CSS/কন্টেন্ট/স্ক্রিপ্টগুলি অন্তর্ভুক্ত করুন, তারপর আপনি অন্যান্য সংস্থান এবং কন্টেন্ট লোড করার জন্য ডিফার্ড স্ক্রিপ্টগুলি ব্যবহার করতে পারেন বা DOMContentLoaded/load ইভেন্টের জন্য শুনতে পারেন।
  • অ্যাসিঙ্ক HTML ফ্র্যাগমেন্ট - ব্যাক এন্ডে পৃষ্ঠাটি তৈরি হওয়ার সাথে সাথে HTML এর অংশগুলি ব্রাউজারে ফ্লাশ করা। কৌশল সম্পর্কে আরও বিস্তারিত জানা যাবে।

কেন আপনি একটি ইমেজ ট্যাগে `srcset` অ্যাট্রিবিউট ব্যবহার করবেন? ব্রাউজার এই অ্যাট্রিবিউটের বিষয়বস্তু মূল্যায়ন করার জন্য যে প্রক্রিয়া ব্যবহার করে তা ব্যাখ্যা করুন।

আপনি srcset অ্যাট্রিবিউটটি ব্যবহার করবেন যখন আপনি ব্যবহারকারীদের তাদের ডিভাইসের ডিসপ্লে প্রস্থের উপর নির্ভর করে বিভিন্ন ছবি পরিবেশন করতে চান - রেটিনা ডিসপ্লে সহ ডিভাইসগুলিতে উচ্চ মানের ছবি পরিবেশন করলে ব্যবহারকারীর অভিজ্ঞতা বাড়ে যখন নিম্ন-রেজোলিউশনের ডিভাইসগুলিতে নিম্ন-রেজোলিউশনের ছবি পরিবেশন করলে কর্মক্ষমতা বৃদ্ধি পায় এবং ডেটা অপচয় কমে (কারণ একটি বড় ছবি পরিবেশন করলে কোনো দৃশ্যমান পার্থক্য থাকবে না)। উদাহরণস্বরূপ: <img srcset="small.jpg 500w, medium.jpg 1000w, large.jpg 2000w" src="..." alt=""> ব্রাউজারকে ক্লায়েন্টের রেজোলিউশনের উপর নির্ভর করে ছোট, মাঝারি বা বড় .jpg গ্রাফিক প্রদর্শন করতে বলে। প্রথম মানটি ছবির নাম এবং দ্বিতীয়টি পিক্সেলগুলিতে ছবির প্রস্থ। 320px এর ডিভাইস প্রস্থের জন্য, নিম্নলিখিত গণনাগুলি করা হয়:

  • 500 / 320 = 1.5625
  • 1000 / 320 = 3.125
  • 2000 / 320 = 6.25

যদি ক্লায়েন্টের রেজোলিউশন 1x হয়, তাহলে 1.5625 সবচেয়ে কাছাকাছি, এবং small.jpg এর সাথে সঙ্গতিপূর্ণ 500w ব্রাউজার দ্বারা নির্বাচিত হবে।

যদি রেজোলিউশন রেটিনা (2x) হয়, তাহলে ব্রাউজার সর্বনিম্ন থেকে উপরে নিকটতম রেজোলিউশন ব্যবহার করবে। এর অর্থ এটি 500w (1.5625) নির্বাচন করবে না কারণ এটি 1 এর চেয়ে বেশি এবং ছবিটি খারাপ লাগতে পারে। ব্রাউজার তখন 2 এর কাছাকাছি ফলাফল সহ 1000w (3.125) ছবিটি নির্বাচন করবে।

srcset গুলি সেই সমস্যাটি সমাধান করে যেখানে আপনি ছোট স্ক্রিনের ডিভাইসগুলিতে ছোট ইমেজ ফাইল পরিবেশন করতে চান, কারণ ডেস্কটপ ডিসপ্লেগুলির মতো তাদের বিশাল ছবিগুলির প্রয়োজন হয় না - এবং ঐচ্ছিকভাবে আপনি উচ্চ ঘনত্ব/নিম্ন-ঘনত্বের স্ক্রিনগুলিতে বিভিন্ন রেজোলিউশনের ছবি পরিবেশন করতে চান।

আপনি কি এর আগে বিভিন্ন HTML টেম্প্লেটিং ভাষা ব্যবহার করেছেন?

হ্যাঁ, Pug (আগে Jade), ERB, Slim, Handlebars, Jinja, Liquid, এবং EJS কিছু নাম বলতে পারি। আমার মতে, তারা কমবেশি একই এবং কন্টেন্ট এস্কেপ করা এবং প্রদর্শিত ডেটা ম্যানিপুলেট করার জন্য সহায়ক ফিল্টারগুলির একই রকম কার্যকারিতা সরবরাহ করে। বেশিরভাগ টেম্প্লেটিং ইঞ্জিন আপনাকে প্রদর্শন করার আগে কাস্টম প্রক্রিয়াকরণের প্রয়োজন হলে আপনার নিজস্ব ফিল্টার ইনজেক্ট করার অনুমতি দেবে।

ক্যানভাস এবং SVG এর মধ্যে পার্থক্য কী?

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

বিপরীতভাবে, SVG ডেক্লারেটিভ ড্রইং ব্যবহার করে, যেখানে আকার এবং পাথগুলি সরাসরি HTML এ সংজ্ঞায়িত করা হয়, যা এটিকে আরও অ্যাক্সেসযোগ্য এবং SEO-বান্ধব করে তোলে। ক্যানভাস তার কম ওভারহেডের কারণে জটিল দৃশ্যের জন্য সর্বোত্তম, তবে স্কেলিং ছবির মানের ক্ষতি হতে পারে। SVG, রেজোলিউশন-স্বাধীন হওয়ায়, গুণমান নষ্ট না করে বিভিন্ন স্ক্রিন আকারের সাথে খাপ খায়।

শেষ পর্যন্ত, ক্যানভাস গতিশীল, পারফরম্যান্স-নিবিড় গ্রাফিক্সের জন্য উপযুক্ত, যখন SVG স্কেলেবল, রেজোলিউশন-স্বাধীন গ্রাফিক্সের ক্ষেত্রে excels, অন্তর্নিহিত অ্যাক্সেসযোগ্যতা এবং SEO সুবিধা সহ।

HTML এ খালি উপাদান কী?

HTML এ খালি উপাদানগুলি হলো এমন উপাদান যা তাদের খোলা এবং বন্ধ ট্যাগের মধ্যে কোনো কন্টেন্ট ধারণ করে না। পরিবর্তে, তারা স্ব-বন্ধ ট্যাগ, যার অর্থ তাদের শেষ অ্যাঙ্গেল ব্র্যাকেটের (>) আগে একটি ফরোয়ার্ড স্ল্যাশ (/) থাকে। খালি উপাদানগুলির কিছু সাধারণ উদাহরণ অন্তর্ভুক্ত:

  • <img>: ডকুমেন্টে ছবি এম্বেড করতে ব্যবহৃত হয়।
  • <input>: ব্যবহারকারীর ইনপুট গ্রহণ করতে ব্যবহৃত হয়।
  • <br>: লাইন ব্রেক বা জোরপূর্বক লাইন ব্রেক সন্নিবেশ করতে ব্যবহৃত হয়।
  • <hr>: অনুভূমিক নিয়ম বা বিভাজক তৈরি করতে ব্যবহৃত হয়।