
আপনার সাইট আপনার নিজের ল্যাপটপে বিদ্যুৎগতিতে খোলে, অথচ পাঠক বলছেন সাইটটা ভয়ানক ধীর। ঘটনাটা প্রায় সব ওয়েবসাইট মালিকের সাথেই হয়। কারণটা সহজ, আপনি দেখছেন ব্রাউজারের ক্যাশ থেকে আর পাঠক দেখছেন মোবাইল ডেটায় প্রথম বার।
এই ঝগড়া মেটানোর জন্যই Google তিনটি মাপকাঠি ঠিক করে দিয়েছে, যেগুলোকে একসাথে বলা হয় Core Web Vitals। এগুলো অনুমান নয়, বাস্তব ব্যবহারকারীর ব্রাউজার থেকে জমা হওয়া তথ্য।
এই টিউনে আমি বাস্তব রিপোর্টের আসল স্ক্রিনশট ধরে ধরে দেখাবো কোন সংখ্যাটি কী বলছে, কোন সমস্যা আগে ধরতে হবে এবং কোড লেভেলে ঠিক কী বদলালে সংখ্যাগুলো নামতে শুরু করে।
নামগুলো ভয় দেখায়, কিন্তু ভেতরের প্রশ্নগুলো একেবারে সাধারণ। পাঠক পাতা খোলার পর তিনটি জিনিস অনুভব করে, কত দ্রুত বড় জিনিসটা দেখা গেল, ছোঁয়ার পর কত দ্রুত সাড়া পাওয়া গেল, আর পড়তে গিয়ে লেখা কতবার লাফ দিল।
কাজ শুরু হয় মাপা দিয়ে, অনুমান দিয়ে নয়। PageSpeed Insights এ নিজের সাইটের ঠিকানা বসিয়ে দিলে দুইটি অংশ আসে। উপরের অংশটি বাস্তব ব্যবহারকারীর তথ্য আর নিচের অংশটি ল্যাব টেস্ট।

ছবিতে দেখুন তিনটি মেট্রিকের পাশে সবুজ গোল চিহ্ন আছে আর উপরে লেখা আছে অ্যাসেসমেন্ট পাস করেছে। এই তথ্যটি গত ২৮ দিনের, তাই আজ কোড বদলালে এখানে ফল দেখতে কিছু দিন সময় লাগবে।
সীমাগুলো জানা না থাকলে রিপোর্ট দেখে বোঝা যায় না অবস্থা আসলে কেমন। নিচের সংখ্যাগুলো Google এর ঠিক করে দেওয়া সীমা, যেগুলো ধরেই রঙ বদলায়।
নিচের ছবিটি একটি বাস্তব সাইটের ফিল্ড ডেটা, যেখানে দুইটি মেট্রিক দারুণ থাকলেও একটির কারণে পুরো ফল ফেল হয়ে গেছে। এই ধরনটাই সবচেয়ে বেশি দেখা যায়।

এখানে INP আর CLS দুইটিই সবুজ, শুধু LCP কমলা। অর্থাৎ সাইটটি ছোঁয়ার পর ভালোই সাড়া দেয় আর লেআউটও নড়ে না, সমস্যা কেবল প্রথম দৃশ্যটি দেখাতে দেরি হওয়ায়। তাই এখানে সব কিছু ঠিক করার দরকার নেই, শুধু LCP নিয়ে কাজ করলেই ফল বদলে যাবে।
অনেকে দুইটি সংখ্যা আলাদা দেখে বিভ্রান্ত হন। ফিল্ড ডেটা আসে বাস্তব মানুষের ব্রাউজার থেকে, আর ল্যাব ডেটা তৈরি হয় একটি নকল পরিবেশে টেস্ট চালিয়ে। নিচের ছবিতে দেখুন সেই পরিবেশটি কেমন ছিল।

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

এটিই পুরো টিউনের সবচেয়ে দরকারি অংশ। রিপোর্ট শুধু LCP এর সময় বলে না, সেই সময়টা কোথায় খরচ হলো তাও ভাগ করে দেখায়। ভাগগুলো না দেখে ঠিক করতে গেলে ভুল জায়গায় পরিশ্রম যায়।

ছবিতে সার্ভার থেকে প্রথম বাইট আসতে লেগেছে খুব অল্প সময়, কিন্তু এলিমেন্ট আঁকা শুরু হতে দেরি হয়েছে অনেক বেশি। এর মানে সার্ভার বা হোস্টিং দোষী নয়, দোষ পাতার ভেতরের সাজানোর কাজে।
LCP সাধারণত একটি বড় ছবি বা একটি বড় লেখার অংশ হয়। ছবি হলে কাজটি অনেক সহজ। নিচের দুইটি লাইন যোগ করলেই বড় পার্থক্য দেখা যায়।
<link rel="preload" as="image" href="/img/hero.webp" fetchpriority="high"> <img src="/img/hero.webp" width="1200" height="630" alt="প্রধান ছবি" fetchpriority="high">
প্রথম লাইনটি ব্রাউজারকে আগেই জানিয়ে দেয় যে এই ছবিটি সবচেয়ে জরুরি, তাই সে অন্য কাজ ফেলে আগে এটি নামায়। দ্বিতীয় লাইনে মাপ লেখা থাকায় ব্রাউজার আগেই জায়গা রেখে দেয়, ফলে ছবি আসার সময় লেখা লাফ দেয় না।
INP খারাপ হয় তখনই যখন ব্রাউজারের মূল থ্রেড লম্বা সময় ধরে একটি কাজে আটকে থাকে। ব্যবহারকারী ক্লিক করে ফেলেছেন, কিন্তু ব্রাউজার তখনো আগের হিসাব শেষ করতে পারেনি।
function pause(ms){return new Promise(function(r){setTimeout(r, ms)})}
button.addEventListener("click", async function(){showSpinner() ; await pause(0) ; heavyWork()})
উপরের কৌশলটি সহজ। ভারী কাজটি শুরু করার আগে ব্রাউজারকে এক মুহূর্তের বিরতি দেওয়া হচ্ছে, যেন সে আগে পর্দায় সাড়া দেখাতে পারে। এতে কাজটি দ্রুত হয় না, কিন্তু ব্যবহারকারীর কাছে সাইট জীবন্ত মনে হয়।
লেআউট লাফ দেওয়ার কারণ প্রায় সব সময় একটি, কোনো জিনিস পরে এসে জায়গা দখল করেছে অথচ আগে তার জন্য জায়গা রাখা হয়নি। সমাধানও তাই একই, আগেই জায়গা রেখে দিন।
img, video {aspect-ratio: 1200 / 630}
img, video {width: 100%}
img, video {height: auto}
.notice-bar {min-height: 48px}
রিপোর্টের নিচের দিকে একটি তালিকা থাকে, যেখানে প্রতিটি সমস্যার পাশে লেখা থাকে ঠিক করলে কত জায়গা বা কত সময় বাঁচবে। এই সংখ্যাগুলো ধরেই কাজের ক্রম ঠিক করা সবচেয়ে বুদ্ধিমানের কাজ।

এই জায়গায় এসে অনেকে ধৈর্য হারিয়ে ফেলেন। কোড বদলানোর পর ল্যাব টেস্টের ফল সাথে সাথে বদলে যায়, কিন্তু ফিল্ড ডেটা বদলাতে সময় লাগে, কারণ ওটি গত ২৮ দিনের হিসাব।
সব কিছু একসাথে করার দরকার নেই। অভিজ্ঞতায় দেখা যায় নিচের পাঁচটি কাজ করলেই বেশির ভাগ ছোট ও মাঝারি সাইটের ফল সবুজে চলে আসে।
এই পাঁচটির মধ্যে প্রথম দুইটি কোনো টাকা খরচ ছাড়াই করা যায়, শুধু কিছু সময় দিতে হয়। তাই শুরুটা ওখান থেকেই করুন, তারপর বাকিগুলোতে হাত দিন।
সাইট দ্রুত করার কাজটি জাদু নয়, এটি একটি চক্র। মাপুন, সবচেয়ে বড় সমস্যাটি খুঁজুন, একটি করে ঠিক করুন, আবার মাপুন। এই চক্রটি তিন চার বার ঘোরালেই সংখ্যাগুলো নামতে শুরু করে।
উপরের প্রতিটি ছবি বাস্তব রিপোর্ট থেকে নেওয়া আসল স্ক্রিনশট, শুধু বোঝার সুবিধার জন্য আমি লাল ঘর আর বাংলা ব্যাখ্যা বসিয়ে দিয়েছি। আপনি নিজের সাইটের ঠিকানা বসিয়ে ঠিক একই রিপোর্ট বের করতে পারবেন।
আপনার সাইটে কোন মেট্রিকটি আটকে আছে তা টিউমেন্টে লিখে জানাতে পারেন। পরের টিউনে ছবি অপটিমাইজ আর ক্যাশিং নিয়ে হাতে কলমে আলোচনা করার ইচ্ছা আছে।
আমি নাছিরুল হক। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 2 দিন 9 ঘন্টা যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 13 টি টিউন ও 0 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
আমি নাছিরুল হক। প্রোগ্রামিং আর প্রযুক্তি নিয়ে ঘাঁটাঘাঁটি করতে ভালোবাসি। টেকটিউনসে মূলত Java প্রোগ্রামিং নিয়ে ধাপে ধাপে হাতে কলমে টিউটোরিয়াল লিখি — JDK ইনস্টল ও এনভায়রনমেন্ট সেটআপ থেকে শুরু করে IntelliJ IDEA, Exception Handling, OOP, Java Swing ও ফাইল হ্যান্ডলিং পর্যন্ত। এছাড়া স্মার্টফোন, ব্যাটারি ও নেটওয়ার্ক নিয়ে সহজ ভাষায় ব্যাখ্যামূলক...