دموی رایگان

آموزش گام‌به‌گام بهینه‌سازی خط لولهٔ رندر صفحه

دلوین خیری مقدم خواندن ~۸ دقیقه سرعت و کارایی وردپرس
آموزش گام‌به‌گام بهینه‌سازی خط لولهٔ رندر صفحه
بهینه‌سازی رندر صفحه یعنی کوتاه‌کردن مسیر از دریافت HTML تا اولین نمایشی که کاربر می‌تواند با آن کار کند؛ گلوگاه‌های رایج سه‌تایند: CSS بلاک‌کننده، اسکریپت‌های جلوی صفحه و فونت. ترتیب کار هم ثابت است: اندازه‌گیری، حذف بی‌موردها، تعویق بقیه و بازآزمایی با عدد — به تجربهٔ ما اکثر بهبودِ واقعی در همین سه قدم اول اتفاق می‌افتد.

کابری که همهٔ مدیران سایت تجربه کرده‌اند: عکسی که با هر بار باز کردن صفحه یک‌تکه بالا می‌آید، متن بعد از عکس می‌نشیند و منو با تأخیر جا می‌افتد. سایت «باز می‌شود» اما حسِ کندی دارد. این حس، محصول زنجیره‌ای است که کاربر نمی‌بیند و مرورگر هر بار از سر می‌گیرد: خط لولهٔ رندر.

نقشهٔ کامل کارایی — کش، CDN، هاست — را در هاب سرعت و کارایی وردپرس نگه داشته‌ایم؛ این مقاله فقط یک ایستگاه آن نقشه را عمیق می‌کند: مسیری که مرورگر از فایل خام به تصویر روی صفحه می‌رود و جاهایی که معمولاً گیر می‌کند. اگر ترتیب این مسیر را ندانید، هر ابزار بهینه‌سازی فقط اسمی تازه برای حدس است.

خط لولهٔ رندر در پنج ایستگاه

خط لولهٔ رندر در پنج ایستگاه
تا CSSOM کامل شود رندر شروع نمی‌شود؛ همین‌جا گلوگاه‌ها جمع‌اند.

مرورگر پنج ایستگاه را پشت هم طی می‌کند: HTML را می‌خواند و درخت DOM را می‌سازد؛ CSS را می‌خواند و CSSOM را می‌سازد؛ این دو را ترکیب می‌کند و درخت رندر به دست می‌آید؛ چیدمان محاسبه می‌شود — هر عنصر کجای صفحه می‌نشیند؛ و در آخر نقاشی، تصویر نهایی را روی صفحه می‌کشد. تا CSSOM کامل نشود، رندر شروع نمی‌شود؛ و هر اسکریپتی که وسط راه بخواهد DOM را دستکاری کند، کار را متوقف می‌کند. کل ماجرا همین دو جملهانه، اما همین دو جمله سرنوشت سرعت است.

تشبیه چاپخانه کمک می‌کند: HTML متن خام است، CSS صفحه‌آرایی، و نقاشی چاپ. اگر صفحه‌آرایی دیر برسد، چاپخانه منتظر می‌ماند؛ اگر وسط چاپ نویسنده‌ای متن را عوض کند، همه‌چیز از اول. تعویق یعنی بگویید «این اصلاح بعد از چاپ اول بیاید»، نه اینکه نویسنده را بیرون بیندازید.

چرا این مدل لازم است؟ چون هر ابزار اندازه‌گیری، خطا را در یک ایستگاه نشان می‌دهد و رفعِ هر ایستگاه داروی مخصوص خودش را دارد. بدون نقشه، «صفحه کند است» تشخیص نیست، شکایت است؛ با نقشه، همان شکایت به «CSS بلاک‌کننده در ایستگاه دوم» تبدیل می‌شود که کار مشخصی دارد.

بهینه‌سازی رندر صفحه از اندازه‌گیری شروع می‌شود

بهینه‌سازی رندر صفحه از اندازه‌گیری شروع می‌شود، نه از نصب افزونه. دو گزارش بگیرید: یک گزارش آزمایشگاهی از ابزارهای تست که شرایط ثابت و تکرارپذیر می‌دهد، و یک نگاه به دادهٔ میدانی کاربران واقعی. روش درست گرفتن و تفسیر این گزارش‌ها را در روش درست تست سرعت سایت جداگانه نوشته‌ایم؛ این‌جا فقط قاعده‌اش: هر عدد را به یک ایستگاه وصل کنید. «اولین نمایش دیر است» یعنی گلوگاه در CSS یا فونت؛ «صفحه پرید» یعنی چیدمان؛ «تعامل دیر جواب می‌دهد» یعنی اسکریپت.

قاعدگی هم داشته باشید: پیش از هر تغییری، همان گزارش را با همان تنظیمات بگیرید تا مقایسه معتبر بماند. قیاسِ تست دوشنبه با تست پنج‌شنبهٔ شبکه‌ی متفاوت، عددی است که هیچ تصمیمی نمی‌سازد.

یک مرز صادقانه هم بگذارید: نمرهٔ ابزار هدف نیست؛ تجربهٔ کاربر هدف است. سایت‌هایی دیده‌ایم با نمرهٔ عالی و کاربرِ ناراضی، و برعکس. نمره وسیله است؛ وقتی اولین نمایش سریع شد و پرش چیدمان نماند، تفاوت چند امتیازیِ باقی‌مانده را جشن نمی‌گیریم، تجربه را می‌سنجیم.

CSS و جاوااسکریپت بلاک‌کننده؛ تعویق به‌جای حذف کور

CSS بلاک‌کننده است چون تا CSSOM کامل نشود مرورگر رندر نمی‌کند؛ اسکریپت هم اگر اجازه بخواهد DOM را تغییر دهد، خواندن HTML را متوقف می‌کند. درمان به ترتیب سه قدم است. قدم اول، حذف بی‌موردها: فایل‌هایی که هیچ صفحه‌ای از آن‌ها استفاده نمی‌کند. قدم دوم، تعویق: اسکریپت مستقل با async، اسکریپت وابسته به ترتیب با defer. قدم سوم، CSS بحرانی: استایلِ نمای بالای صفحه را کوچک و درون صفحه بگذارید و بقیه را غیرهم‌زمان بار کنید.

ترتیب این سه را عوض نکنید؛ حذفِ کور قبل از اندازه‌گیری، قالب را می‌ریزد و رندر را بدتر می‌کند. فهرست حذفِ اصولی — کدام فایل، با کدام شواهد — را در حذف اسکریپت‌های غیرضروری آورده‌ایم؛ آن مقاله می‌گوید چه چیزی را حذف کنید، این‌جا می‌گوییم باقی‌مانده را با چه ترتیبی لود کنید تا رندر منتظر نماند. دو مقاله را مکمل هم بخوانید، نه جایگزین هم.

برای CSS بحرانی یک تجربهٔ عملی: دستی بسازیدش، خودکارهای آماده هم قالب را نمی‌شناسند. چند سطر استایلِ منو، تیتر و دکمهٔ اصلی، اغلب کل نیازِ نمای اول است؛ بقیه را با تعویق بفرستید. و بعد از هر تغییر قالب، CSS بحرانی را به‌روز کنید؛ نسخهٔ کهنه، چیدمانی می‌سازد که لحظه‌ای بعد عوض می‌شود و کاربر پرش را می‌بیند.

فونت فارسی؛ مهمان‌پذیری زنجیرهٔ رندر

فونت، مهمانِ خاص زنجیرهٔ رندر است: تا فونت برسد، متن یا مخفی می‌ماند یا با فونت جایگزین نشان داده می‌شود. در سایت فارسی این موضوع سنگین‌تر است چون فایل‌های فونت فارسی حجیم‌ترند و مجموعه‌نویسی (subsetting) معمولاً فراموش می‌شود. سه کار اصلی: فونت اصلی را با preload زودتر اعلام کنید؛ display فونت را روی swap بگذارید تا متن با فونت جایگزین بی‌درنگ دیده شود؛ و از هر خانواده فقط وزن‌هایی را لود کنید که واقعاً استفاده می‌شوند.

انتخاب فونت، زیرمجموعه‌سازی و تبدیل فرمت را در فونت فارسی و سرعت سایت کامل باز کرده‌ایم؛ آن مقاله می‌گوید کدام فونت و چگونه آماده شود، این‌جا جای آن در زنجیرهٔ رندر: فونت اگر دیر برسد و swap نداشته باشد، ایستگاه نقاشی را گروگان می‌گیرد. به تجربهٔ ما، تنظیم swap ساده‌ترین بهبودِ متن‌محورِ سایت‌های فارسی است و در همان روز قابل دیدن.

یک خطای رایج را هم نام ببریم: چند خانوادهٔ فونت برای چند عنصر کم‌اهمیت. هر خانواده یک فایل و یک انتظار تازه است؛ سایت فارسی با یک خانوادهٔ اصلی و حداکثر یکی برای تیترها، هم هویت بصری تمیزتری دارد هم زنجیرهٔ رندر کوتاه‌تری.

تصاویر و لود تنبل؛ پایان مسابقهٔ دانلود

تصاویر در خط لولهٔ رندر مسابقه‌برگزاری می‌کنند: هر تصویر بدون ابعاد، چیدمان را معطل می‌کند و بعد با آمدن، صفحه را می‌پراند. سه درمان: ابعاد ثابت برای همهٔ تصاویر تا مرورگر جا را از اول رزرو کند؛ لود تنبل برای تصاویر پایین صفحه تا دانلود از اول اولویت واقعی بگیرد؛ و تصویرِ نمای اول را از تنبلی معاف کنید چون همان اولین نمایش کاربر است. جزئیات پیاده‌سازی در لود تنبل تصاویر وردپرس آمده؛ آن مقاله تنظیم افزونه و کد است، این‌جا جای تصمیم در زنجیره.

قاعدهٔ ما برای مرز تنبلی: از دومین بلاک محتوا به پایین. هرچه بالاتر، تنبلی پرهزینه‌تر؛ هرچه پایین‌تر، تنبلی بخشنده‌تر. و یادتان باشد لود تنبل برای فایل‌های ویدیویی و نگه‌داشته‌های اجتماعیِ پایین صفحه، سودش چندبرابر است؛ برای آیکون‌های کوچک، پیچیدگی بی‌دلیل.

پرش چیدمان را جدی بگیرید؛ فقط حس بد نمی‌سازد، کلیکِ اشتباه می‌سازد: کاربر روی دکمه‌ای زده که لحظه‌ای قبل آن‌جا بود و حالا جای دیگری است. ابعاد ثابت تصویر، ارتفاع رزروشدهٔ جاگذاری‌ها و پرهیز از بنرهای تازه‌واردِ بالای محتوا، هم تجربه را نجات می‌دهد هم ایستگاه چیدمان را کوتاه.

بازآزمایی؛ هر تغییر جدا، با عدد قبل و بعد

سه درمان اصلی و اثر هر یک
هر درمان یک ایستگاه را کوتاه می‌کند؛ جدا اعمال و جدا بسنجید.

قاعدهٔ طلایی اجرا: هر تغییر جدا، هر تغییر با عدد. سه درمان را با هم اعمال کنید و نمرهٔ تازه بگیرید، نمی‌دانید کدام کار کرد و کدام خراب کرد؛ اگر فردا قالب عوض شد، هیچ دانشی از این پروژه به آن‌جا منتقل نمی‌شود. جدول کوچکی بسازید: تغییر، عدد قبل، عدد بعد، تاریخ. همین جدول ساده، دانش فنی سایت شماست و در تحویل به تیم بعدی، گران‌بهاترین برگه.

کجا متوقف شویم؟ وقتی بهبودها کم‌اثر شدند، گلوگاه دیگر در ایستگاه‌های رندر نیست؛ در انتقال یا سرور است — آن‌جا موضوع به CDN و هاست می‌رسد که خانوادهٔ سرعت می‌داند. تشخیصِ درستِ مرز، از خرید ده ابزار بهتر است؛ بهینه‌سازی رندر تنها یک لایه از کارایی است، نه کل آن.

و برای پایداری: بهینه‌سازی را یک‌بار نکنید، به روتین بندید. هر قالب تازه، هر افزونهٔ صفحه‌ساز و هر بنر کمپین، دوباره گلوگاه می‌آورد. یک بازآزمایی فصلی با همان ابزار و همان صفحات نمونه، سایت را از برگشتِ بی‌سروصدا نگه می‌دارد.

جمع‌بندی؛ ترتیب کاری یک هفته

ترتیب کاری یک هفته‌ای که به تیم‌ها می‌دهیم: روز اول، اندازه‌گیری پایه و انتخاب دو صفحهٔ نمونه؛ روز دوم، فهرست حذف با شواهد؛ روزهای سوم و چهارم، تعویق اسکریپت‌ها و CSS بحرانی؛ روز پنجم، فونت و swap؛ روز ششم، ابعاد و لود تنبل؛ روز هفتم، بازآزمایی و ثبت جدول. یک هفته، همیشه کوتاه‌تر از ماه‌ها حدس زدن است.

اگر ترجیح می‌دهید این لایه را از دوش تیم بردارید، قابلیت‌های پلتفرم مسیر جایگزین است: در پلتفرم، انتشار محتوا خودکار و امن اجرا می‌شود و پلن پیشرو — انتشار خودکار با اپراتور — به‌روزرسانیِ منظم را بدون ریسکِ دستی پیش می‌برد؛ چون صفحاتی که مرتب تازه می‌شوند، اگر خط لولهٔ رندر سالم باشد، بدون دردسر تازه می‌مانند.

حرف آخر: رندر، رقابت منابع است؛ هر چیزی که «الان» لازم نیست، می‌تواند بعد برسد. کل بهینه‌سازی رندر صفحه را می‌شود در همین یک جمله خلاصه کرد و بقیهٔ مقاله، راه اجرای منصفانهٔ همین جمله بود — منصفانه برای کاربر، برای تیم و برای قالبی که قرار است سال‌ها بماند.

دموی رایگان پلتفرم

پلن پیشرو — ۷٫۹ میلیون تومان/ماه (انتشار خودکار + اپراتور)

دموی رایگان پلتفرم

رصد ما، رشد شما.

سؤالات پرتکرار

CSS بحرانی چیست و چقدر باید کوچک باشد؟

کوچک‌ترین استایلی که نمای بالای صفحه را می‌سازد؛ به قالب شما بستگی دارد و معمولاً چند ده خط. دقیق‌ترین راه، ساختنش برای قالب خودتان و آزمون بصری بعد از اعمال است، نه اتکای کورکورانه به ابزار خودکار.

defer یا async؛ کدام را بگذارم؟

اسکریپت مستقل و بی‌وابسته async؛ اسکریپتی که به ترتیب اجرا یا DOM وابسته است defer. اگر مطمئن نیستید، defer انتخاب امن‌تری است چون ترتیب را نگه می‌دارد و کمتر چیزی را می‌شکند.

لود تنبل را روی تصویر اول صفحه بگذاریم؟

نه؛ تصویر اصلی بالای صفحه بدون تعویق بیاید، چون همان اولین نمایش کاربر است. تنبلی را از دومین بلاک محتوا به پایین شروع کنید؛ آن‌جا هم تجربه بهتر می‌شود هم دانلود اولویت واقعی پیدا می‌کند.

چرا بعد از بهینه‌سازی، نمرهٔ ابزار هنوز صد نیست؟

نمرهٔ ابزار ترکیبی از چند سنجهٔ آزمایشگاهی است؛ هدف تجربهٔ واقعی کاربر است. وقتی اولین نمایش سریع شد و پرش چیدمان نماند، تفاوت چند امتیازیِ باقی‌مانده اثر عملی ندارد.