اپلیکیشنهای جاوااسکریپت خود را با یک چارچوب عملکرد قدرتمند بهبود بخشید. یاد بگیرید چگونه یک زیرساخت بهینهسازی برای سرعت و کارایی بهتر در پروژههای متنوع جهانی بسازید.
چارچوب عملکرد جاوااسکریپت: پیادهسازی زیرساخت بهینهسازی
در چشمانداز دیجیتال پرشتاب امروز، عملکرد اپلیکیشنهای جاوااسکریپت شما از اهمیت بالایی برخوردار است. یک وبسایت کند یا ناکارآمد میتواند منجر به نرخ پرش بالا، از دست رفتن تبدیلها و تجربه کاربری ضعیف شود. این راهنمای جامع شما را در فرآیند پیادهسازی یک چارچوب عملکرد قدرتمند جاوااسکریپت راهنمایی میکند و بر ساخت یک زیرساخت بهینهسازی تمرکز دارد که میتواند در پروژههای متنوع جهانی شما به کار رود. ما مفاهیم اصلی، بهترین شیوهها و مثالهای عملی را بررسی خواهیم کرد تا به شما کمک کنیم عملکرد جاوااسکریپت خود را ارتقا داده و تجربیات کاربری استثنایی را، صرفنظر از مکان یا دستگاه کاربر، ارائه دهید.
درک اهمیت عملکرد جاوااسکریپت
پیش از پرداختن به جزئیات پیادهسازی، بیایید ببینیم چرا عملکرد جاوااسکریپت اینقدر حیاتی است. عوامل متعددی در این امر نقش دارند:
- تجربه کاربری: یک وبسایت واکنشگرا و سریع باعث رضایت بیشتر کاربران میشود. در دنیایی با بازههای توجه کوتاه، هر میلیثانیه اهمیت دارد. عملکرد کند منجر به ناامیدی میشود و میتواند کاربران را فراری دهد.
- سئو (بهینهسازی برای موتورهای جستجو): موتورهای جستجو مانند گوگل، سرعت صفحه را یک فاکتور رتبهبندی مهم در نظر میگیرند. جاوااسکریپت بهینهشده شانس وبسایت شما را برای کسب رتبه بالاتر در نتایج جستجو افزایش داده و ترافیک ارگانیک را بیشتر میکند.
- نرخ تبدیل: وبسایتهای سریعتر اغلب به نرخ تبدیل بالاتری منجر میشوند. اگر کاربران در تکمیل یک تراکنش یا تعامل با سایت شما تأخیر را تجربه کنند، احتمالاً آن را رها خواهند کرد.
- دنیای موبایل-محور: با افزایش روزافزون استفاده از دستگاههای موبایل، بهینهسازی عملکرد در این دستگاهها حیاتی است. شبکههای موبایل اغلب کندتر و کماعتمادتر از همتایان دسکتاپ خود هستند.
- دسترسی جهانی: وبسایتها باید برای کاربران در سراسر جهان، صرفنظر از سرعت اتصال اینترنت یا دستگاهشان، عملکرد خوبی داشته باشند. بهینهسازی بهویژه هنگام خدمترسانی به کاربران در قارههای مختلف مانند آمریکای شمالی، اروپا و آسیا اهمیت دارد.
اجزای اصلی یک چارچوب عملکرد جاوااسکریپت
یک چارچوب جامع عملکرد جاوااسکریپت از چندین جزء کلیدی تشکیل شده است که با هم کار میکنند تا تنگناهای عملکردی را شناسایی، تحلیل و برطرف کنند. این اجزا زیرساختی را برای ارزیابی و بهبود مستمر عملکرد تشکیل میدهند:
۱. پروفایلسازی و تحلیل کد
پروفایلسازی کد شامل تحلیل کد جاوااسکریپت شما برای شناسایی تنگناهای عملکردی است. این کار معمولاً با استفاده از ابزارهایی انجام میشود که زمان و منابع صرف شده برای اجرای بخشهای مختلف کد شما را اندازهگیری میکنند. این شامل استفاده از CPU، مصرف حافظه و زمان لازم برای اجرای کد است. ابزارهای پروفایلسازی محبوب عبارتند از:
- ابزارهای توسعهدهنده مرورگر: اکثر مرورگرهای مدرن (کروم، فایرفاکس، سافاری، اج) ابزارهای توسعهدهنده داخلی را ارائه میدهند که شامل قابلیتهای پروفایلسازی عملکرد است. از پنلهای performance یا timeline برای ضبط و تحلیل اجرای کد خود استفاده کنید.
- پروفایلرهای Node.js: اگر با جاوااسکریپت سمت سرور (Node.js) کار میکنید، میتوانید از پروفایلرهایی مانند Node.js Inspector یا ابزارهایی مانند `v8-profiler` استفاده کنید.
- ابزارهای پروفایلسازی شخص ثالث: ابزارهایی مانند New Relic، Sentry یا Datadog را برای مانیتورینگ و تحلیل جامعتر عملکرد، بهویژه در محیطهای پروداکشن، در نظر بگیرید. این ابزارها بینشهای دقیقی در مورد عملکرد اپلیکیشن شما، از جمله ردیابی تراکنشها، نظارت بر خطاها و داشبوردهای آنی ارائه میدهند.
مثال: با استفاده از Chrome DevTools، میتوانید یک پروفایل عملکرد را با رفتن به تب Performance، کلیک بر روی "Record"، تعامل با وبسایت خود و سپس بررسی نتایج، ضبط کنید. این ابزار توابعی را که بیشترین زمان CPU را مصرف میکنند یا باعث نشت حافظه میشوند، شناسایی میکند. سپس میتوانید از این دادهها برای هدف قرار دادن بخشهای خاص برای بهینهسازی استفاده کنید.
۲. مانیتورینگ عملکرد و هشداردهی
مانیتورینگ مستمر برای شناسایی افت عملکرد و اطمینان از مؤثر بودن بهینهسازیهای شما ضروری است. پیادهسازی مانیتورینگ عملکرد شامل ردیابی معیارهای کلیدی و تنظیم هشدارها برای اطلاعرسانی به شما در هنگام کاهش عملکرد است. شاخصهای کلیدی عملکرد (KPIs) عبارتند از:
- First Contentful Paint (FCP): زمانی که طول میکشد تا مرورگر اولین قطعه محتوا را از DOM رندر کند.
- Largest Contentful Paint (LCP): زمانی که طول میکشد تا بزرگترین عنصر محتوایی (تصویر، بلوک متن و غیره) قابل مشاهده شود.
- Time to Interactive (TTI): زمانی که طول میکشد تا یک صفحه به طور کامل تعاملی شود.
- Total Blocking Time (TBT): کل زمانی که نخ اصلی مسدود شده و از ورودی کاربر جلوگیری میکند.
- Cumulative Layout Shift (CLS): پایداری بصری صفحه را با کمیسازی جابجاییهای غیرمنتظره لایه اندازهگیری میکند.
از ابزارهایی مانند گزارش Core Web Vitals گوگل در Search Console و سرویسهایی مانند WebPageTest برای نظارت بر این معیارها استفاده کنید. WebPageTest بینشهای دقیقی در مورد عملکرد بارگذاری صفحه در دستگاهها و شرایط شبکه مختلف ارائه میدهد. هشدارهایی را تنظیم کنید تا هنگامی که این معیارها به زیر آستانههای قابل قبول رسیدند، به شما اطلاع داده شود. برای مانیتورینگ آنی و داشبوردهای زنده، سرویسهایی مانند New Relic، Sentry یا Datadog را در نظر بگیرید.
مثال: سرویسی مانند Sentry را برای ردیابی زمانهای کند بارگذاری صفحه پیکربندی کنید. یک قانون سفارشی ایجاد کنید تا اگر LCP از ۲.۵ ثانیه فراتر رفت، هشداری فعال شود. این به شما امکان میدهد تا به طور پیشگیرانه به مشکلات عملکردی رسیدگی کنید.
۳. تکنیکهای بهینهسازی کد
هنگامی که تنگناهای عملکردی را از طریق پروفایلسازی و مانیتورینگ شناسایی کردید، گام بعدی پیادهسازی تکنیکهای بهینهسازی است. چندین تکنیک رایج وجود دارد که میتواند عملکرد جاوااسکریپت شما را به طور قابل توجهی بهبود بخشد. تکنیکهای خاصی که استفاده میکنید به ساختار اپلیکیشن شما و مشکلات شناساییشده بستگی دارد.
- کوچکسازی (Minification): اندازه فایلهای جاوااسکریپت خود را با حذف کاراکترهای غیرضروری (فضای خالی، کامنتها) کاهش دهید. ابزارها شامل UglifyJS، Terser و Babel (با پلاگینهای مناسب) هستند.
- فشردهسازی (Gzip/Brotli): فایلهای جاوااسکریپت خود را قبل از ارائه به کاربران فشرده کنید. سرور فایلها را قبل از انتقال فشرده میکند و مرورگر آنها را در سمت کلاینت از حالت فشرده خارج میکند. این کار به طور قابل توجهی میزان دادهای را که باید منتقل شود کاهش میدهد. اکثر وبسرورها از فشردهسازی Gzip و Brotli پشتیبانی میکنند.
- بستهبندی (Bundling): چندین فایل جاوااسکریپت را در یک فایل واحد ترکیب کنید تا تعداد درخواستهای HTTP کاهش یابد. ابزارهایی مانند Webpack، Parcel و Rollup بستهبندی و سایر تکنیکهای بهینهسازی را تسهیل میکنند.
- تقسیم کد (Code Splitting): کد خود را به قطعات کوچکتر تقسیم کرده و آنها را در صورت تقاضا بارگذاری کنید. این کار زمان بارگذاری اولیه را با بارگذاری تنها کد لازم برای نمایش اولیه کاهش میدهد. ابزارهایی مانند Webpack و Parcel از تقسیم کد پشتیبانی میکنند.
- بارگذاری تنبل (Lazy Loading): بارگذاری منابع غیرحیاتی (تصاویر، اسکریپتها) را تا زمانی که به آنها نیاز است به تعویق بیندازید. این میتواند عملکرد درکشده وبسایت شما را به طور قابل توجهی بهبود بخشد.
- Debouncing و Throttling: از تکنیکهای debouncing و throttling برای محدود کردن فرکانس فراخوانی توابع، بهویژه در پاسخ به رویدادهای کاربر (مانند اسکرول، تغییر اندازه) استفاده کنید.
- دستکاری کارآمد DOM: دستکاریهای DOM را به حداقل برسانید، زیرا اغلب عملکرد-بر هستند. از تکنیکهایی مانند document fragments و بهروزرسانیهای دستهای برای کاهش تعداد reflowها و repaintها استفاده کنید.
- مدیریت بهینه رویدادها: از شنوندگان رویداد غیرضروری اجتناب کنید و از تفویض رویداد (event delegation) برای کاهش تعداد شنوندگان رویداد متصل به عناصر استفاده کنید.
- کش کردن (Caching): از کش مرورگر و کش سمت سرور برای کاهش نیاز به دانلود مجدد منابع بهره ببرید. برای استراتژیهای کش پیشرفته، استفاده از Service Workerها را در نظر بگیرید.
- اجتناب از عملیات مسدودکننده: عملیات طولانیمدت را به صورت ناهمزمان اجرا کنید (مثلاً با استفاده از `setTimeout`، `setInterval`، Promiseها یا `async/await`) تا از مسدود شدن نخ اصلی و ایجاد فریز شدن رابط کاربری جلوگیری شود.
- بهینهسازی درخواستهای شبکه: تعداد و اندازه درخواستهای HTTP را کاهش دهید. از تکنیکهایی مانند HTTP/2 یا HTTP/3، در صورت پشتیبانی توسط مرورگرها و سرورها، برای امکان مالتیپلکسینگ (چندین درخواست بر روی یک اتصال واحد) استفاده کنید.
مثال: از یک باندلر مانند Webpack برای کوچکسازی، بستهبندی و بهینهسازی فایلهای جاوااسکریپت خود استفاده کنید. آن را طوری پیکربندی کنید که از تقسیم کد برای ایجاد بستههای جداگانه برای بخشهای مختلف اپلیکیشن شما استفاده کند. فشردهسازی Gzip یا Brotli را روی وبسرور خود پیکربندی کنید تا فایلهای جاوااسکریپت شما قبل از ارسال به کلاینت فشرده شوند. بارگذاری تنبل تصاویر را با استفاده از ویژگی `loading="lazy"` یا یک کتابخانه جاوااسکریپت پیادهسازی کنید.
۴. تست و پیشگیری از پسرفت
تست کامل برای اطمینان از اینکه بهینهسازیهای شما عملکرد را بهبود میبخشند بدون اینکه باعث پسرفت (مشکلات عملکردی جدید) شوند، حیاتی است. این شامل موارد زیر است:
- تست عملکرد: تستهای عملکرد خودکار ایجاد کنید که معیارهای کلیدی را اندازهگیری میکنند. ابزارهایی مانند WebPageTest و Lighthouse میتوانند در خط لوله CI/CD شما ادغام شوند تا تستهای عملکرد را به طور خودکار پس از هر تغییر کد اجرا کنند.
- تست پسرفت (Regression Testing): به طور منظم اپلیکیشن خود را تست کنید تا اطمینان حاصل شود که بهبودهای عملکردی پایدار هستند و کد جدید به طور ناخواسته عملکرد را کاهش نمیدهد.
- تست بار (Load Testing): بارهای بالای کاربر را شبیهسازی کنید تا عملکرد اپلیکیشن خود را تحت فشار تست کنید. ابزارهایی مانند JMeter و LoadView میتوانند به شما در شبیهسازی بار از سوی کاربران متعدد کمک کنند.
- تست پذیرش کاربر (UAT): کاربران واقعی را در تست عملکرد دخیل کنید. بازخورد کاربران در مکانهای مختلف را جمعآوری کنید تا اطمینان حاصل شود که اپلیکیشن برای مخاطبان جهانی عملکرد خوبی دارد. به کاربران در مناطقی با اتصالات اینترنت کندتر توجه ویژه داشته باشید.
مثال: Lighthouse را در خط لوله CI/CD خود ادغام کنید تا به طور خودکار ممیزیهای عملکرد را روی هر pull request اجرا کند. این کار بازخورد فوری در مورد تغییرات عملکرد ارائه میدهد. هشدارهایی را در ابزار مانیتورینگ عملکرد خود (مثلاً New Relic) تنظیم کنید تا شما را از هرگونه افت قابل توجه عملکرد پس از استقرار کد جدید مطلع سازد. تستهای پسرفت را خودکار کنید تا اطمینان حاصل شود که بهبودهای عملکردی در طول زمان پایدار میمانند.
۵. بهبود مستمر و تکرار
بهینهسازی عملکرد یک فرآیند مداوم است، نه یک راهحل یکباره. به طور منظم معیارهای عملکرد خود را مرور کنید، کد خود را پروفایل کنید و استراتژیهای بهینهسازی خود را تکرار کنید. به طور مداوم عملکرد اپلیکیشن خود را نظارت کرده و در صورت لزوم تنظیمات را انجام دهید. این شامل موارد زیر است:
- ممیزیهای منظم: ممیزیهای دورهای عملکرد را برای شناسایی تنگناهای جدید و زمینههای بهبود انجام دهید. از ابزارهایی مانند Lighthouse، PageSpeed Insights و WebPageTest برای انجام این ممیزیها استفاده کنید.
- بهروز بمانید: با آخرین بهترین شیوههای عملکرد جاوااسکریپت و بهروزرسانیهای مرورگرها بهروز باشید. ویژگیهای جدید و بهینهسازیهای مرورگرها به طور مداوم منتشر میشوند، بنابراین مطلع ماندن حیاتی است.
- اولویتبندی کنید: تلاشهای خود را بر روی تأثیرگذارترین بهینهسازیها متمرکز کنید. با مسائلی شروع کنید که بیشترین تأثیر را بر تجربه کاربری دارند (مانند LCP، TTI).
- جمعآوری بازخورد: بازخورد کاربران را در مورد عملکرد جمعآوری کرده و هرگونه نگرانی را برطرف کنید. بازخورد کاربران میتواند بینشهای ارزشمندی در مورد مسائل عملکردی در دنیای واقعی ارائه دهد.
مثال: هر ماه یک ممیزی عملکرد را برنامهریزی کنید تا معیارهای عملکرد وبسایت خود را بررسی کرده و زمینههای بهبود را شناسایی کنید. با عضویت در وبلاگهای صنعتی، شرکت در کنفرانسها و دنبال کردن توسعهدهندگان کلیدی در رسانههای اجتماعی، از آخرین بهروزرسانیهای مرورگر و بهترین شیوههای جاوااسکریپت مطلع بمانید. به طور مداوم بازخورد کاربران را جمعآوری کرده و هرگونه نگرانی عملکردی را که کاربران گزارش میدهند، برطرف کنید.
پیادهسازی چارچوب: راهنمای گام به گام
بیایید مراحل پیادهسازی یک چارچوب بهینهسازی عملکرد جاوااسکریپت را تشریح کنیم:
۱. تعریف اهداف عملکرد و KPIها
- اهداف عملکرد واضحی را تعیین کنید. به عنوان مثال، LCP زیر ۲.۵ ثانیه، TTI زیر ۵ ثانیه و CLS برابر با ۰.۱ یا کمتر را هدف قرار دهید.
- KPIهای خود را انتخاب کنید (FCP، LCP، TTI، TBT، CLS و غیره).
- اهداف عملکرد و KPIهای خود را مستند کنید. اطمینان حاصل کنید که همه اعضای تیم آنها را درک میکنند.
۲. راهاندازی مانیتورینگ عملکرد
- یک ابزار مانیتورینگ عملکرد انتخاب کنید (مانند Google Analytics، New Relic، Sentry، Datadog).
- مانیتورینگ عملکرد را در وبسایت خود پیادهسازی کنید. این کار اغلب شامل افزودن یک اسکریپت ردیابی به وبسایت شما است.
- داشبوردهایی را برای تجسم KPIهای خود پیکربندی کنید.
- هشدارهایی را برای اطلاعرسانی در مورد هرگونه افت عملکرد تنظیم کنید.
۳. پروفایل کردن کد شما
- از ابزارهای توسعهدهنده مرورگر یا پروفایلرهای Node.js برای شناسایی تنگناهای عملکردی استفاده کنید.
- پروفایلهای عملکردی از اپلیکیشن خود را ضبط کنید، با تمرکز بر سفرهای حیاتی کاربر و اجزای پرکاربرد.
- پروفایلها را برای شناسایی توابع کند، نشت حافظه و سایر مسائل عملکردی تحلیل کنید.
۴. پیادهسازی تکنیکهای بهینهسازی
- تکنیکهای کوچکسازی و فشردهسازی را روی فایلهای جاوااسکریپت خود اعمال کنید.
- فایلهای جاوااسکریپت خود را با استفاده از یک باندلر مانند Webpack یا Parcel بستهبندی کنید.
- تقسیم کد و بارگذاری تنبل را برای کاهش زمان بارگذاری اولیه پیادهسازی کنید.
- دستکاریهای DOM و مدیریت رویدادها را بهینه کنید.
- از کش مرورگر و کش سمت سرور بهره ببرید.
- در صورت لزوم از debouncing و throttling استفاده کنید.
- هرگونه تنگنای عملکردی شناساییشده در حین پروفایلسازی کد را برطرف کنید.
۵. تست و اعتبارسنجی بهینهسازیها
- تستهای عملکرد را برای اندازهگیری تأثیر بهینهسازیهای خود اجرا کنید.
- از تست پسرفت برای اطمینان از اینکه بهینهسازیهای شما مشکلات عملکردی جدیدی ایجاد نمیکنند، استفاده کنید.
- تست بار را برای ارزیابی عملکرد اپلیکیشن خود تحت فشار انجام دهید.
- اپلیکیشن خود را در دستگاهها و شرایط شبکه مختلف تست کنید تا سناریوهای دنیای واقعی را شبیهسازی کنید.
- بازخورد کاربران را جمعآوری کرده و هرگونه نگرانی عملکردی را برطرف کنید.
۶. تکرار و اصلاح
- به طور منظم معیارهای عملکرد و پروفایلهای کد خود را مرور کنید.
- به طور مداوم عملکرد اپلیکیشن خود را نظارت کرده و در صورت لزوم تنظیمات را انجام دهید.
- با آخرین بهترین شیوههای عملکرد جاوااسکریپت و بهروزرسانیهای مرورگرها بهروز باشید.
- تلاشهای بهینهسازی خود را بر اساس تأثیر بر تجربه کاربری اولویتبندی کنید.
مثالهای عملی و ملاحظات جهانی
بیایید چند مثال عملی از بهینهسازی عملکرد جاوااسکریپت را با دیدگاه جهانی بررسی کنیم:
مثال ۱: بهینهسازی بارگذاری تصویر برای کاربران بینالمللی
مشکل: یک وبسایت تجارت الکترونیک جهانی با تصاویر محصول با وضوح بالا، زمان بارگذاری کندی را برای کاربران در مناطقی با اتصالات اینترنت کندتر تجربه میکند.
راه حل:
- استفاده از تصاویر واکنشگرا: ویژگیهای `srcset` و `sizes` را در تگهای `
` خود پیادهسازی کنید تا اندازههای مختلف تصویر را بر اساس اندازه صفحه و دستگاه کاربر ارائه دهید. این تضمین میکند که کاربران در دستگاههای کوچکتر فایلهای تصویر کوچکتری دریافت کرده و مصرف پهنای باند کاهش یابد.
- پیادهسازی بارگذاری تنبل: از بارگذاری تنبل برای به تعویق انداختن بارگذاری تصاویر تا زمانی که در دید کاربر قرار گیرند، استفاده کنید. این کار زمان بارگذاری اولیه و عملکرد درکشده وبسایت را بهبود میبخشد. کتابخانههایی مانند lazysizes میتوانند پیادهسازی را سادهتر کنند.
- بهینهسازی فرمتهای تصویر: از فرمتهای تصویر مدرن مانند WebP برای فشردهسازی و کیفیت بهتر استفاده کنید. تصاویر WebP را به مرورگرهایی که از آن پشتیبانی میکنند ارائه دهید و برای مرورگرهای قدیمیتر جایگزین فراهم کنید. ابزارهایی مانند ImageOptim و Squoosh میتوانند به بهینهسازی تصاویر کمک کنند.
- استفاده از CDN: تصاویر را بر روی یک شبکه تحویل محتوا (CDN) مستقر کنید تا آنها را به صورت جغرافیایی توزیع کنید. CDNها تصاویر را روی سرورهای نزدیکتر به کاربران شما کش میکنند و تأخیر را کاهش میدهند. CDNهای اصلی شامل Cloudflare، Amazon CloudFront و Akamai هستند. این امر بهویژه برای کاربران در مناطقی مانند آفریقا، آسیای جنوب شرقی و آمریکای جنوبی که زیرساخت اینترنت ممکن است به طور قابل توجهی متفاوت باشد، حیاتی است.
مثال ۲: تقسیم کد برای یک اپلیکیشن توزیعشده جهانی
مشکل: یک اپلیکیشن وب که توسط تیمهایی در سراسر اروپا، آمریکای شمالی و آسیا استفاده میشود، زمان بارگذاری اولیه کندی را برای همه کاربران تجربه میکند.
راه حل:
- پیادهسازی تقسیم کد: از تقسیم کد برای تقسیم کد جاوااسکریپت اپلیکیشن خود به قطعات کوچکتر استفاده کنید. این به مرورگر اجازه میدهد تا فقط کد لازم برای نمایش اولیه را بارگذاری کند.
- وارد کردن پویا (Dynamic Imports): از وارد کردن پویا (`import()`) برای بارگذاری قطعات کد در صورت تقاضا استفاده کنید. این بدان معناست که فقط کدی که برای یک ویژگی یا بخش خاص از اپلیکیشن مورد نیاز است، هنگام پیمایش کاربر به آن بخش دانلود میشود.
- بستهبندی بهینه: از یک باندلر مانند Webpack یا Parcel برای ایجاد بستههای بهینه استفاده کنید. این ابزارها را طوری پیکربندی کنید که کد شما را به طور خودکار بر اساس مسیرها، ویژگیها یا ماژولها تقسیم کنند.
- Preloading و Pre-fetching: از راهنمای منابع `preload` و `prefetch` برای بارگذاری پیشگیرانه منابع حیاتی استفاده کنید. `preload` به مرورگر میگوید که یک منبع را فوراً بارگذاری کند، در حالی که `prefetch` اشاره میکند که ممکن است در آینده به یک منبع نیاز باشد.
مثال ۳: به حداقل رساندن تأثیر جاوااسکریپت شخص ثالث
مشکل: یک وبسایت خبری جهانی به چندین کتابخانه جاوااسکریپت شخص ثالث (مانند ویجتهای رسانههای اجتماعی، ابزارهای تحلیلی) متکی است که به طور قابل توجهی بر عملکرد آن تأثیر میگذارند.
راه حل:
- ممیزی اسکریپتهای شخص ثالث: به طور منظم تمام اسکریپتهای شخص ثالث را ممیزی کنید تا تأثیر آنها بر عملکرد را شناسایی کنید. نیاز به هر اسکریپت و اینکه آیا برای تجربه کاربری ضروری است را ارزیابی کنید.
- بارگذاری تنبل اسکریپتهای شخص ثالث: اسکریپتهای شخص ثالث را به صورت ناهمزمان بارگذاری کنید یا بارگذاری آنها را تا پایان رندر شدن صفحه به تعویق بیندازید. این کار از مسدود شدن رندر محتوای اصلی توسط این اسکریپتها جلوگیری میکند. از ویژگیهای `defer` یا `async` در تگهای `