بررسی مفهوم TTFB
TTFB مخفف Time To First Byte بوده و برابر است با بازهی زمانی از لحظهی ارسال HTTP Request از مرورگر بهسمت سرور، تا هنگامیکه نخستین بایت از دادهها را مرورگر از جانب سرور دریافت کند. در هنگام محاسبهی این بازهی زمانی، مدت زمان لازم برای DNS Lookup و تاخیرهای شبکه نیز لحاظ میشوند. TTFB یکی از جنبههای مهم در ارزیابی عملکرد و بهینه بودن وبسایتهاست. هرچه این بازهی زمانی کمتر باشد، دسترسی کاربر به منابع و Load صفحه نیز سریعتر خواهد بود.
TTFB از سه مولفهی جداگانه تشکیل میشود:
- مدت زمان مورد نیاز برای ارسال یک (HTTP Request (HTTP Request Time: هنگام باز کردن یک وبسایت در مرورگر، از جانب مرورگر HTTP Request بهسمت سرور ارسال میشود. از عوامل تاثیرگذار بر مدت زمان رسیدن این درخواست از مرورگر به سرور میتوان به موارد زیر اشاره کرد:
- مدت زمان DNS Lookup
- فاصلهی جغرافیایی میان کاربر و سرور
- وجود فایروالهایی با قوانین پیچیده در فاصلهی میان کاربر و سرور
- سرعت اینترنت کاربر
- مدت زمان مورد نیاز برای پردازش Request از سوی سرور (Process Request Time): سرور پس از دریافت درخواست کاربر آن را پردازش میکند و متناسب با درخواست دریافتی، پاسخی (Response) را تولید میکند. مدت زمان لازم برای فراخوانی دیتابیس، عدم استفاده از مکانیسمهای Caching، عدم بهینه بودن کدها یا قالب مورد استفاده، همگی عواملی تاثیرگذار بر مدت زمان پردازش و تولید پاسخ هستند.
- مدت زمان مورد نیاز برای دریافت نخستین بایت از دادههای ارسالی سرور از سوی کاربر (HTTP Response Time): پس از تولید Responseهای سرور، این پاسخ بهسمت کاربر ارسال میشود. سرعت اینترنت کاربر و سرور بر مدت زمان دریافت این پاسخ از سوی مرورگر نقش مهمی دارند.
با توجه به آنچه در بالا گفته شد، بهشکل کلی رایجترین عوامل تاثیرگذار بر افزایش مقدار TTFB را میتوان بهشکل زیر دستهبندی کرد:
- نوع محتوا (استاتیک یا داینامیک)
- مشکلات شبکه (پهنای باند کم، فاصلهی جغرافیایی بسیار، فایروالهایی با قوانین پیچیده و...)
- پیکربندی ضعیف وبسرور (عدم بهینهسازی کدها و قالب، عدم استفاده از مکانیسمهای Caching و...)
- ضعیف بودن منابع سرور (RAM، CPU، disk I/O و...)
- ضعیف بودن طراحی/پیکربندی دیتابیس
بازهی زمانی نرمال برای TTFB
مقدار TTFB وابسته به نوع محتوا (محتوای استاتیک یا داینامیک) و پیکربندی سرور، میتواند متفاوت باشد، پس تعیین مقدار دقیق برای TTFB بهعنوان یک بازهی زمانی خوب و ایدهآل، امری دشوار و کاملن وابسته به موقعیت است.
با این حال میتوان میانگینی را بهطور نسبی مشخص کرد. برای نمونه، TTFB زیر ۱۰۰ میلیثانیه حاکی از عالی بودن موقعیت دارد، TTFB در بازهی ۲۰۰ تا ۵۰۰ میلیثانیه، نرمال و استاندارد است و TTFB بالای ۵۰۰ میلیثانیه تا یک ثانیه نشان از وجود مشکل دارد و نیازمند بررسی است.
همانگونه که اشاره شد این مقادیر، میانگینهایی نسبی هستند و نمیتوان آنها را به تمام وبسایتها بسط داد. وابسته به نوع محتوا و پیچیدگی وبسایت، ممکن است برای TTFB مقداری بالای یک ثانیه بهدست آید و با توجه به موقعیت، این مقدار بهدست آمده غیرعادی و دور از استاندارد نیز نباشد.
روشهای اندازهگیری TTFB
- استفاده از Google Chrome DevTools
برای استفاده از این ابزار، در مرورگر Chrome بهشکل همزمان کلیدهای Ctrl+Shift+I در سیستمعامل ویندوز یا کلیدهای Cmd+Opt+I در MacOS را فشار دهید. در پنجرهی باز شده روی زبانه Network و در بخش All روی فایل مورد نظر کلیک کنید. سپس به بخش Timing بروید. در این بخش میتوان مقدار TTFB را مشاهده کرد.
نکته: دقت داشته باشید که در هنگام استفاده از این ابزار روی کامپیوتر شخصی پارامترهایی همچون: میزان پهنای باند یا استفاده از VPN در هنگام تست، عواملی هستند که بر مقدار TTFB محاسبه شدهی این ابزار تاثیرگذارند، به همین دلیل اگر قصد دارید تا مقدار دقیقتری برای TTFB بهدست آورید، بهتر است از یکی از سه روش معرفی شده در ادامه، بهره گیرید.
- استفاده از WebPageTest
با مراجعه به وبسایت WebPageTest میتوان با مشخص کردن URL مورد نظر و یک موقعیت مکانی دلخواه، مقدار TTFB را بهدست آورد. طبق راهنمای این وبسایت برای محاسبهی مقدار TTFB، مدتزمان لازم برای DNS Lookup و مذاکرات SSL نیز لحاظ میشوند. پس از وارد کردن URL و اتمام تست، در پنجرهی باز شده، در بخش Performance Results، مقدار درج شده زیر عبارت First Byte، بیانگر مقدار TTFB است.
- استفاده از Pingdom
در این وبسایت نیز میتوان با مشخص کردن URL مورد نظر و یک موقعیت جغرافیایی، مقدار TTFB را بهدست آورد. تنها نکته در هنگام استفاده از این وبسایت برای محاسبهی TTFB آن است که در اینجا، بهجای عبارت TTFB از عبارت "Wait time" استفاده میشود. برای مشاهدهی این مقدار، پس از اتمام تست به بخش File Requests بروید و در منوی سمت راست، mouse را روی فایل مورد نظر خود نگاه دارید.
- استفاده از GTmetrix
یک وبسایت دیگر برای محاسبهی TTFB، GTmetrix است که در آن نیز مشابه Pingdom، از TTFB با عنوان wait time یاد میشود. برای مشاهدهی این مقدار زمانی، پس از وارد کردن URL و اتمام تست، در صفحهی نشان داده شده به بخش Waterfall بروید و روی منبع مورد نظر mouse را نگه دارید.
بهبود مقدار TTFB
چون مقدار TTFB تاثیر مستقیم بر تجربهی کاربران در کار با سایت و ردهبندی سایت دارد، باید بهدنبال راهکارهایی برای بهبود آن بود. مواردیکه میتوانند سبب بهبود مقدار TTFB شوند، عبارتاند از:
- استفاده از CDN: شبکهی توزیع محتوا آروان (CDN) با Cache محتوای وبسایتها در سرورهای لبه خود و توزیع این سرورها در نقاط مختلف جغرافیایی، به کاربران نهایی از نزدیکترین نقطه به آنها پاسخ میدهد و به این ترتیب تاخیر حاصل از مسافت میان کاربر و سرور اصلی برای دستیابی به محتوا کاهش مییابد.
- بهینهسازی کدها و منابع: بهرهگیری از تکنیکهای فشردهسازی، پشتیبانی از HTTP/2 و استفاده از مکانیسمهای Caching، سهم بهسزایی در کاهش سایز فایلها و بهینه شدن عملکرد وبسایت دارند.
- بهینهسازی queryهای دیتابیس: ایجاد indexهایی برای بازیابی دادههای درست، تنها زمانیکه به آنها نیاز است. این امر سبب میشود تا در هنگام فراخوانی، نیاز به خوانده شدن کل دیتابیس برای پاسخ به query دریافتی نباشد. از سوی دیگر تا حد امکان توصیه بر عدم استفاده از subqueryهای به هم وابسته است؛ چرا که این وابستگی سبب افزایش زمان پردازش queryها میشود.
- کاهش تعداد درخواستهای HTTP: ابتدا بررسی تعداد HTTP requestها و با تشخیص فراوان بودن آنها، با انجام اعمالی چون حذف عکسهای غیرضروری از وبسایت، کاهش سایز فایلهای مربوط به تصاویر باقیمانده و ترکیب فایلهای CSS با یکدیگر میتوان تعداد این درخواستها را کاهش داد.
- اطمینان از پاسخگویی سریع سرور: گاهی میتوان فایلهای CSS و JS را داخل فایل HTML قرار داد و از این راه، نیاز به فراخوانی این منابع بهشکل جداگانه را از بین برد.
- استفاده از روش Respond First, Process Later (RFPL) Cache: در این روش، سرور پس از دریافت request، responseای را که از پیش Cache کرده برای کاربر ارسال میکند و بهشکل همزمان request دریافتی کاربر را نیز پردازش میکند. از این راه، کاربر بیدرنگ به محتوای Cache شده دسترسی مییابد و پاسخی را دریافت میکند که ممکن است با پاسخ جدیدی که سرور برای آن ارسال میکند، چندان تفاوتی نداشته باشد.
- بهروزرسانی مداوم: همواره اطمینان داشته باشید که پارامترهای سمت سرور چون: وبسرور (Apache، Nginx)، زبان سمت سرور (PHP، Ruby و...) و هر آنچه مربوط به سمت سرور میشود، به آخرین نسخه بهروزرسانی شوند.
- بررسی پیوستهی logها: با بررسی مداوم logها میتوان سریع از افزایش سربار وبسرور یا دیتابیس آگاه شد. در هنگام افزایش ترافیک ارسالی بهسمت سرور، ممکن است سرور قادر به مدیریت این حجم از ترافیک نباشد و در نتیجه مقدار TTFB افزایش یابد.