Web Performance

বেশির ভাগ সাইটে Web fonts এখনও সবচেয়ে সহজ পারফরম্যান্স জয়

variable fonts আসার পাঁচ বছর এবং WOFF2 সর্বজনীন হওয়ার দশ বছর পরও, গড়পড়তা সাইট এখনও ভুলভাবে fonts লোড করছে। ঠিকভাবে করার সংক্ষিপ্ত পথটি এখানে।

The Wux Webtools Team The Wux Webtools Team 1 মিনিট পড়া
Editorial illustration of a single bold letter glyph with subtle weight axis lines, soft green palette
সুচিপত্র
  1. যে প্যাটার্নটি বারবার দেখা যায়
  2. ছয়টি static font-এর বদলে একটি variable font ব্যবহার করুন
  3. যুক্তিসঙ্গত `font-display` সেট করুন
  4. আপনার fallback metrics মিলিয়ে নিন
  5. Self-host করুন
  6. কখন custom fonts পুরোপুরি বাদ দেবেন
  7. সৎ সারাংশ

যে প্যাটার্নটি বারবার দেখা যায়

আজ যদি আপনি এলোমেলোভাবে দশটি production website audit করেন, বেশির ভাগ ক্ষেত্রেই font নিয়ে প্রায় একই পরিস্থিতি পাবেন:

  • Home page-এ ছয় থেকে দশটি font file লোড হয়
  • সবগুলো WOFF2-তে (ভালো), কিন্তু কোনো font-display strategy নেই (খারাপ)
  • এমন কয়েকটি weight এবং style থাকে যা পেজের কোথাও ব্যবহারই হচ্ছে না
  • পুরো stack একটি third-party domain থেকে serve করা হয় (সাধারণত Google Fonts), সঙ্গে আসে DNS, TLS এবং privacy-র সব খরচ
  • কোনো unicode-range subsetting নেই, ফলে পেজটি English হলেও প্রতিটি visitor Cyrillic এবং Greek glyphs ডাউনলোড করে

এটি শুধু ছোট সাইটের সমস্যা নয়। যথেষ্ট বাজেট থাকা অনেক marketing page এখনও প্রথম paragraph paintable হওয়ার আগেই 600 KB font লোড করে। প্যাটার্নটি একবার চোখে পড়লে আর না দেখে থাকা যায় না।

সমাধানটি অদ্ভুত কিছু নয়। এটি কয়েকটি সুপরিচিত technique, যা বহু বছর ধরে browser-এ আছে।

ছয়টি static font-এর বদলে একটি variable font ব্যবহার করুন

আপনি যদি Inter Regular, Inter Medium, Inter SemiBold, Inter Bold এবং সেগুলোর italics লোড করেন, তাহলে প্রয়োজনের তুলনায় আনুমানিক ছয় গুণ বেশি bytes ডাউনলোড করছেন। একটি মাত্র Inter variable font পুরো weight axis (এবং কিছু build-এ slant) এক ফাইলে কভার করে, যার আকার মাত্র দুইটি static weight-এর চেয়ে সামান্য বড়।

Browser support নিয়ে গল্প বহু আগেই মিটে গেছে — variable fonts যেখানে গুরুত্বপূর্ণ, সব জায়গাতেই কাজ করে। বাকি দ্বিধা বেশির ভাগই static-font যুগের অভ্যাস থেকে পাওয়া।

ব্যবহারিক নিয়ম: প্রতি script, প্রতি family-তে একটি variable font file। Latin এক ফাইলে, Cyrillic আরেকটিতে, Greek তৃতীয়টিতে, unicode-range দিয়ে শর্তসাপেক্ষে লোড হবে। এতটুকুই।

যুক্তিসঙ্গত font-display সেট করুন

Custom font এখনও লোড হচ্ছে—এ অবস্থায় default behaviour হলো কিছুই না দেখানো — invisible text — সর্বোচ্চ তিন সেকেন্ড পর্যন্ত। এটি সবচেয়ে খারাপ default। Users একটি blank page দেখে ধরে নেয় কিছু নষ্ট হয়েছে।

প্রতিটি @font-face rule-এ এটি যোগ করুন:

@font-face {
  font-family: 'Inter';
  src: url('/fonts/inter-var.woff2') format('woff2-variations');
  font-weight: 100 900;
  font-display: swap;
}

swap fallback font সঙ্গে সঙ্গে দেখায় এবং custom font লোড হলে সেটিতে swap করে। User millisecond zero থেকেই পেজ পড়তে পারে। বিনিময়ে swap হওয়ার সময় সামান্য layout shift হতে পারে, যা পরের technique দিয়ে কমানো যায়।

আপনার fallback metrics মিলিয়ে নিন

unstyled text-এর flash তখনই বিরক্তিকর লাগে, যখন fallback এবং custom font-এর metrics খুব আলাদা হয়। Modern CSS এটি size-adjust, ascent-override এবং অনুরূপ প্রপার্টি দিয়ে ঠিক করে:

@font-face {
  font-family: 'Inter Fallback';
  src: local('Arial');
  size-adjust: 107%;
  ascent-override: 90%;
  descent-override: 22%;
  line-gap-override: 0%;
}

Fallback metrics ঠিকমতো tune করা থাকলে swap প্রায় বোঝাই যায় না — custom font আসার আগে ও পরে শব্দগুলো একই horizontal space দখল করে।

Google-এর --allow-fallback-font-metrics কাজ এখন baseline browser support, এবং tooling pipeline আছে (fontaine library এবং অনুরূপ), যা কয়েক সেকেন্ডে আপনার জন্য সঠিক সংখ্যাগুলো হিসাব করে দেয়।

Self-host করুন

Four-step self-hosted font pipeline: get WOFF2 variable file, subset by script, serve from same origin with immutable cache, preload critical weight
InfographicSelf-hosting web fonts: the simple delivery pipeline — A same-origin font pipeline cuts extra origin cost and removes the privacy question

Google Fonts সুবিধাজনক, free, এবং এর সঙ্গে দুটি বাস্তব খরচ আসে:

  1. দ্বিতীয় TLS handshake। HTTP/3 এবং connection coalescing থাকলেও, একটি extra origin খুব কম ক্ষেত্রেই বিনা খরচে আসে।
  2. Privacy এবং compliance প্রশ্ন। কয়েকটি European court রায় দিয়েছে যে fonts.gstatic.com থেকে Google Fonts লোড করা মানে personal data (IP address) third party-র কাছে পাঠানো। Self-hosting প্রশ্নটিই পুরোপুরি সরিয়ে দেয়।

Download-and-host pipeline হলো:

  1. WOFF2 file নিন (থাকলে variable build)
  2. আপনার audience আসলে যে scripts ব্যবহার করে, সেগুলোতে subset করুন
  3. সাইটের বাকি অংশের মতো একই origin থেকে serve করুন, দীর্ঘ Cache-Control: max-age=31536000, immutable সহ
  4. সবচেয়ে critical weight preload করুন: <link rel="preload" as="font" type="font/woff2" href="/fonts/inter-var.woff2" crossorigin>

এটাই পুরো pipeline। একটি existing site-এর জন্য এক বিকেল লাগে, এবং প্রায় কখনোই আর পেছনে ফিরতে হয় না।

কখন custom fonts পুরোপুরি বাদ দেবেন

এটি স্পষ্ট করে বলা দরকার: প্রতিটি সাইটের custom font দরকার নেই। System font stack এখন প্রতিটি operating system-এ সত্যিই সুন্দর:

font-family: system-ui, -apple-system, 'Segoe UI', Roboto, Inter, sans-serif;

Weight ঠিক, metrics ঠিক, rendering device-এর জন্য tune করা, এবং bytes-on-the-wire cost ঠিক শূন্য। কোনো tools site, internal app, content-কে অগ্রাধিকার দেওয়া portfolio, বা slow networks-এর users লক্ষ্য করে বানানো কিছুর জন্য system stack-ই সঠিক উত্তর।

<!-- tool-cta:start -->

💡 এটি চেষ্টা করুন: Webfont Generator ব্যবহার করে আপনার TTF বা OTF ফাইলগুলোকে প্রস্তুত-ব্যবহারযোগ্য CSS সহ আধুনিক WOFF2-এ রূপান্তর করুন, পোস্টটি যে ফরম্যাট পরিবর্তনের সুপারিশ করে সেটিই এটি।

<!-- tool-cta:end -->

সৎ সারাংশ

একটি সাধারণ ছোট সাইটের জন্য, web-font performance-এর পুরো গল্প চার ধাপে মিটে যায়:

  1. প্রতি family প্রতি script-এ একটি variable font
  2. matched fallback metrics সহ font-display: swap
  3. দীর্ঘ cache headers এবং critical weight-এর জন্য preload সহ Self-hosted
  4. অথবা fonts পুরোপুরি বাদ দিন এবং system stack ব্যবহার করুন

এটি একবার করুন, home page থেকে কয়েকশ kilobytes ফেরত পাবেন, perceived performance-এ কয়েকশ milliseconds জিতবেন, এবং পথিমধ্যে একটি third-party dependency সরিয়ে ফেলবেন। effort-to-payoff ratio-তে এর চেয়ে ভালো পরিবর্তন খুব কম।

Four-step checklist for faster web fonts: variable font, font-display swap with matched fallback metrics, self-host with cache and preload, or use system stack
InfographicThe 4-step web font performance fix — A compact playbook for reclaiming several hundred kilobytes and improving perceived performance
Comparison of six static font files versus one variable font file with script-based subsetting for Latin, Cyrillic, and Greek
InfographicFrom six static font files to one variable font — One variable file can replace a pile of weights and italics with far fewer bytes

প্রায়শই জিজ্ঞাসিত প্রশ্ন

Variable fonts কি সব জায়গায় supported?
হ্যাঁ — গুরুত্বপূর্ণ প্রতিটি browser বহু বছর ধরে variable font support দিয়েছে। কখনো যে দ্বিধার কথা শোনা যায়, তা static-font যুগের অভ্যাস; 2026 সালে এটি বাস্তব compatibility concern নয়।
আমার fonts কি manually subset করা উচিত?
Latin-only sites-এর জন্য, হ্যাঁ — একটি Latin subset পূর্ণ multilingual file-এর আনুমানিক অর্ধেক আকারের। Multilingual sites-এর জন্য, প্রতিটি script আলাদা file হিসেবে লোড করতে `unicode-range` ব্যবহার করুন, যাতে visitors শুধু তাদের content-এর সত্যিই প্রয়োজনীয় অংশই ডাউনলোড করে।
font-display: swap কখনো কখনো কুৎসিত flash তৈরি করে কেন?
কারণ fallback font-এর metrics custom font-এর metrics থেকে আলাদা, তাই swap হওয়ার সময় words reflow করে। Custom font-এর metrics-এর সঙ্গে মিলাতে fallback-এ `size-adjust`, `ascent-override` এবং `descent-override` ব্যবহার করুন — flash প্রায় অদৃশ্য হয়ে যায়।
Google Fonts কি সত্যিই privacy issue?
কয়েকটি European court decision রায় দিয়েছে যে `fonts.gstatic.com` থেকে লোড করলে visitor-এর IP consent ছাড়া third party-র কাছে যায়, যা কিছু ব্যাখ্যায় GDPR violation। Self-hosting প্রশ্নটি পুরোপুরি সরিয়ে দেয় এবং সাধারণত যাই হোক দ্রুততর।

স्रोत ও আরও পড়া

  1. MDN — `@font-face` and `font-display`
  2. MDN — Variable fonts guide
  3. web.dev — Reduce web font size
লেখক সম্পর্কে
The Wux Webtools Team

শেষ আপডেট:

আরও পড়ুন

Media, Images & Files

প্রোডাকশনে ভ্যারিয়েবল ফন্ট: যেসব ট্রেডঅফ কেউ বলে না

ভ্যারিয়েবল ফন্ট শক্তিশালী, কিন্তু প্রোডাকশনের ফল নির্ভর করে সাবসেটিং, ক্যাশিং, রেন্ডারিং, CSS শৃঙ্খলা এবং ডিজাইনের সংযমের ওপর।

3 মিনিট পড়া
Web Performance

আপনার সাইটের ছোট নয়, কম অনুরোধ পাঠানো উচিত কেন

আধুনিক সাইটগুলো প্রায়ই অনুরোধের সংখ্যা উপেক্ষা করে ফাইল ছোট করার পেছনে ছুটে। দ্রুততর সমাধান সাধারণত কম, আরও ভালো সময়ে পাঠানো অনুরোধ।

4 মিনিট পড়া
Web Performance

আপনার Time to First Byte কেন ধীর এবং এ বিষয়ে কী করবেন

ধীর TTFB সাধারণত ধীর routing, অনুপস্থিত cache, অতিরিক্ত চাপগ্রস্ত servers, অথবা ব্যয়বহুল backend work বোঝায়। কীভাবে এটি নির্ণয় ও ঠিক করবেন, তা এখানে।

5 মিনিট পড়া