جلسه ۳۳ – رفع ارور Preconnect to required origins

آموزش حل مشکل Preconnect to required origins در جی تی متریکس

رفع ارور Preconnect to required origins

سلام همراهان عزیز میزفا
از مجموعه مقالات آموزش جی تی متریکس میزفا همراه شما هستیم. تو جلسه قبلی درباره رفع ارور Minimize main-thread work صحبت کردیم و در این جلسه به آموزش رفع خطای Preconnect to required origins در جی تی متریکس می‌پردازیم. ارور Preconnect to required origins مربوط به بهینه سازی کدها و منابع دامنه‌های دیگه در صفحات سایت ما از طریق پیش اتصال (Preconnect) هست. اول درباره اهمیت این خطا صحبت می‌کنیم و بعد روش برطرف کردنش رو می‌گیم که خیلی سخت نیست؛ اما لازمه از منابع دامنه‌های دیگه (یعنی دامنه‌های third-pary) که در صفحاتمون قرار دادیم آگاه باشیم.
لطفا تا پایان با میزفا همراه باشید.

خلاصه خطای Preconnect to required origins

میزان سختی: ***
روی چه مواردی تاثیر می‌ذاره: TTI و DNS lookup

علت ایجاد خطای Preconnect to required origins چیست؟

خطای Preconnect to required origins مربوط به اتصال‌های شخص ثالث یا همون third-party هست. به زبون ساده‌تر، مربوط به منابع و کدهایی که از سایر سایت‌ها در صفحات سایتمون قرار دادیم. مثلا یه ویدئو از آپارات یا Youtube یا کدهای مربوط به ابزارهای چت آنلاین مثل رایچت. برای دانلود شدن این منابع، مرورگر باید به سرور این سایت‌ها درخواست ارسال کنه. ارور Preconnect to required origins اشاره به این موضوع داره که اگه قراره مرورگر برای منابعی که از دامنه‌های دیگه هستند درخواست ارسال کنه، بهتره ما در کدهامون با استفاده از Preconnect این مسئله رو زودتر به مرورگر هشدار بدیم تا آماده باشه. یعنی قبل از رسیدن به کدهای مربوط به اون دامنه، فرآیند DNS lookup رو انجام بده و یه اتصال اولیه با دامنه مورد نظر ایجاد کنه.

اجازه بدید کمی دقیق‌تر توضیح بدم. همونطور که می‌دونیم، مرورگر برای دانلود منابع مختلف مثل عکس‌ها، فونت‌ها، CSS و سایر موارد باید به سرور درخواستی رو ارسال کنه. اما قبل از اون، مرورگر باید یه اتصال (Connection) رو ایجاد کرده باشه. حالا اگه قرار باشه منابع ما از چند دامنه مختلف دانلود بشن، مرورگر باید ابتدا با هر دامنه یک Connection ایجاد کنه. این فرآیند ایجاد اتصال، براساس وضعیت اون دامنه (مثلا سرور ضعیف یا DNS lookup طولانی) ممکنه خیلی طول بکشه. پس بهتره کاری کنیم که وقتی مرورگر به کدهای مربوط به اون دامنه رسید، تازه نخواد بره سراغ DNS lookup و ایجاد Connection با اون دامنه. آیا این کار امکان پذیره؟

با استفاده از Preconnect می‌تونیم این ایده رو عملی کنیم. یعنی در ابتدای کدهای صفحه و در تگ head به مرورگر هشدار می‌دیم که قراره جلوتر منابعی رو از دامنه third-praty.com دانلود کنی؛ آماده باش!! مرورگر هم ضمن تشکر از ما برای این هشدار به موقع و مهم، کارهای لازم رو انجام میده. اما نکته جالب اینجاست که کار اصلی خودش (یعنی Render کردن صفحه) رو متوقف نمی‌کنه و ادامه میده. از طرفی زمانی که به کدهای مربوط به دامنه مورد نظر برسه، چون قبلا (با استفاده از هشدار ما) یه Connection ایجاد کرده، حالا به راحتی منابع مورد نظر رو دانلود می‌کنه. بنابراین استفاده درست از Preconnect باعث ایجاد تجربه کاربری (UX) بهتر و افزایش سرعت سایت میشه. همونطور که تو عکس مشاهده می‌کنید، استفاده از Preconnect و رفع ارور Preconnect to required origins باعث میشه اتصال‌های ضروری قبلا ایجاد شده باشند و در نتیجه، صفحه سریع‌تر لود بشه.

اهمیت Preconnect to required origins
اهمیت استفاده از Preconnect to required origins

چطور خطای Preconnect to required origins را برطرف کنیم؟

خب با ماهیت خطای Preconnect to required origins آشنا شدیم. قبل از اینکه روش حل مشکل Preconnect to required origins در جی تی متریکس رو بگیم، باید به یه نکته مهم دیگه هم توجه کنیم. استفاده از Preconnect اگرچه آسونه و وابسته به یه کد کوتاهه، اما باید هوشمندانه انجام بشه. اگه ما به مرورگر درباره ایجاد Connection هشدار بدیم و مرورگر اتصال رو ایجاد کنه، اما تا ۱۰ الی ۱۵ ثانیه هیچ استفاده‌ای از این اتصال نشه، مرورگر Connection رو قطع می‌کنه و زحمات ما هدر میره. پس باید از Preconnect فقط برای مهم‌ترین دامنه‌های third-party استفاده بشه.

استفاده از preconnect

با قرار دادن کد زیر در تگ head میشه پیش اتصال با دامنه مورد نظر ایجاد کنیم و خطای Preconnect to required origins در جی تی متریکس رو بهینه سازی کنیم. البته به‌جای third-praty.com باید نام دامنه مورد نظر رو قرار بدیم.

<link rel="preconnect" href="https://third-praty.com">

برای برخی از منابع third-party که به‌صورت Anonymous لود میشن (مثلا فونت‌ها) باید در کد بالا از ویژگی crossorigin هم در انتهای تگ <link> استفاده کنیم تا پیش اتصال (Preconnect) موثر باشه. یعنی به این شکل زیر. در غیر این صورت، مرورگر فقط DNS lookup رو انجام میده و اتصال صورت نمی‌گیره.

<link rel="preconnect" href="https://third-pary.com/ComicSans" crossorigin>

استفاده از dns-prefetch

همونطور که گفتیم، استفاده از Preconnect باید فقط برای مهم‌ترین third-party ها باشه. اما اگه از منابع دامنه‌های third-party متعددی در صفحاتمون استفاده کرده باشیم چی؟ در این صورت باید برای مهم‌ترین دامنه‌ها از Preconnect استفاده کنیم و برای سایر موارد، از dns-prefetch استفاده کنیم. dns-prefetch باعث ایجاد Connection نمیشه، اما مرحله قبل از Connection (یعنی DNS lookup) رو تسریع می‌کنه. لازم به توضیحه که سرورها مثل ما آدم‌ها دامنه‌ها رو با اسمشون نمی‌شناسند؛ بلکه IP دامنه‌ها رو شناسایی می‌کنند. برای همین DNS یا Domain Name Service ایجاد شده تا مرورگر نام دامنه‌ها رو به IP اونها تبدیل کنه. DNS lookup قبل از مرحله Connection انجام میشه و معمولا خیلی هم سریعه (حدود ۲۰ تا ۱۲۰ میلی‌ثانیه). اما با استفاده از dns-prefetch میشه در همین زمان هم صرفه جویی کرد. استفاده از dns-prefetch هم شبیه Preconnect و از طریق کد زیر انجام میشه (ضمنا اگه دوست دارید بیشتر درباره DNS lookup بدونید، مقاله DNS lookup چیست رو مطالعه کنید):

<link rel="dns-prefetch" href="http://third-party.com">

چندتا نکته تکمیلی مهم درباره خطای Preconnect to required origins

تا اینجا اصول و روش استفاده از Preconnect و dns-prefetch رو گفتیم. در ادامه چندتا نکته مهم می‌گیم که به شما در برطرف کردن خطای Preconnect to required origins در جی تی متریکس کمک می‌کنه:

  • با اینکه بیشتر مرورگرهای جدید از هر ۲ مورد پشتیبانی می‌کنند، پشتیبانی بعضی مرورگرها از Preconnect کمی متفاوت از dns-prefetch هست. برای همین میشه در ۲تا تگ <link> از هر ۲ مورد استفاده کرد تا در صورت عدم پشتیبانی از Preconnect، مرورگر dns-prefetch رو اعمال کنه. به‌صورت زیر:
<link rel="preconnect" href="http://third-party.com">
<link rel="dns-prefetch" href="http://third-party.com">

البته نباید هر ۲ مورد رو در یه تگ <link> قرار بدیم. چرا که باعث ایجاد مشکلاتی میشه؛ از جمله اینکه مرورگر Safari در این حالت Preconnect رو منتفی می‌کنه. پس کد زیر بهینه نیست:

<link rel="preconnect dns-prefetch" href="http://third-party.com">
  • از Preconnect و dns-prefetch باید فقط برای دامنه‌های third-party استفاده بشه. استفاده از این ۲ برای منابع دامنه خودمون موثر نیست. همونطور که از ابتدای مقاله هم گفتیم، مشکل Preconnect to required origins مربوط به منابع دامنه‌های دیگه به‌جز دامنه خودمون هست.
  • از Preconnect فقط برای دامنه‌های third-party ضروری استفاده کنید. بهتره نهایتا ۲ بار و برای ۲ دامنه از Preconnect استفاده بشه. در صورت ۳ بار (یا بیشتر) استفاده ازش، ممکنه GTmetrix این موضوع رو خطا در نظر بگیره.
  • بهتره در استفاده از dns-prefetch هم زیاده روی نکنیم. هرچند سایت جی تی متریکس این موضوع رو خطا محسوب نمی‌کنه، اما مرورگر کروم نهایتا ۳تا dns-prefetch رو به‌صورت موازی پردازش می‌کنه.
  • با کلیک روی گزارش Structure در جی تی متریکس لیستی از دامنه‌هایی که استفاده از Preconnect باعث اتصال سریع‌تر به اونها میشه رو مشاهده می‌کنیم. نکته جالب اینجاست که معیار GTmetrix برای خطای Preconnect to required origins فقط استفاده یا عدم استفاده از Preconnect و dns-prefetch نیست. بلکه معیارش زمان لازم برای اتصال به دامنه‌های third-party هست. پس ممکنه ما برای دامنه‌ای از این ۲ مورد استفاده کرده باشیم، اما باز هم با ارور Preconnect to required origins در جی تی متریکس مواجه بشیم. در این صورت باید مشکل رو بررسی کرد و براساس وضعیت، تصمیم گیری کرد که چطور میشه زمان اتصال به اون دامنه رو کاهش داد.

کار رو به یه متخصص بسپارید

اگه مقاله رو خوندید و تلاش کردید ارور Preconnect to required origins رو برطرف کنید اما هنوز موفق نشدید، می‌تونید کار رو به یه متخصص برنامه نویسی یا متخصص سئو بسپارید. اگه تیم خوب می‌شناسید که هیچ ولی اگه دنبال یک تیم حرفه‌ای و همینطور دنبال خدمات خوب در زمینه سئو می‌گردید، می‌تونید خدمات حرفه ای سئو میزفا رو بررسی کنید. کلی خدمات متنوع از جمله بهینه سازی سرعت سایت برای خدمت رسانی به شما عزیزان آماده کردیم.

جمع بندی

در این مقاله میزفا درباره روش برطرف کردن خطای Preconnect to required origins در جی تی متریکس جدید صحبت کردیم. این ارور مربوط به منابع دامنه‌های third-party در سایت ماست. با استفاده درست از پیش اتصال (Preconnect) و یا dns-prefetch می‌تونیم سرعت لود سایت خودمون رو بیشتر کنیم. امیدوارم این آموزش برای شما مفید بوده باشه. تو جلسه بعدی درباره خطای Preload key requests که شبیه به همین خطا اما درباره منابع موجود در دامنه خودمونه صحبت می‌کنیم.

اگه سوالی دارید در قسمت نظرات (پایین همین صفحه) بپرسید تا با کمال میل پاسخگوی شما عزیزان باشیم.

فیلم آموزشی افزایش سرعت سایت با gtmetrix
فیلم آموزشی افزایش سرعت سایت با gtmetrix
محمدعرفان صدری
از ۱۶-۱۷ سالگی تا الان (که ۲۶ سالمه) شغل‌های متنوعی رو تجربه کردم؛ از پخش کردن تراکت تا کار تو کارگاه ماست بندی؛ از منشی آموزشگاه زبان تا تدریس زبان انگلیسی؛ مشاوره تحصیلی و یه سری کارهای اجرایی؛ و در نهایت هم SEO و بازاریابی آنلاین. چیزی که تو همه این مشاغل توجهم رو جلب کرده، اینه که موسسات و سازمان‌های ایرانی چقدر جا برای رشد و پیشرفت حرفه‌ای دارند و چقدر از این موضوع غافلند. از طرف دیگه متوجه شدم علاقه شدید و پتانسیل عجیبی دارم برای کمک به رشد و توسعه کسب‌وکارها. و اینطوری شد که الان در حیطه SEO و بازاریابی محتوایی، پروژه انجام می‌دم، تدریس می‌کنم و مقاله می‌نویسم تا در حد خودم کمکی کرده باشم به رشد شما عزیزان.
لیست آموزش GTmetrix نسخه جدید

1 نظر

یک پاسخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

حداکثر حجم فایل برای آپلود: 1 مگابایت. فایل‌های مجاز برای آپلود: عکس, ویس, ویدیو, ورد یا پی دی اف, فایل متنی, زیپ. شما می‌تونید برای بهتر پرسیدن سوالتون، عکس یا ویس یا حتی فیلم در بخش نظرات میزفا آپلود کنید. برای ضبط ویس می‌تونید از خود واتس آپ استفاده کنید و بعد اینجا آپلود کنید و برای ارسال عکس هم کافی هست اسکرین شات بگیرید. Drop file here

با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

عضویت در خبرنامه هفتگی برای دریافت:

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
فیلم آموزشی asp.net core 2
ترک میزفا خوب نیست!
معرفی جامع‌ترین ابزار سئو در ایران
بالای ۱۰ هزار عضو
PHZpZGVvIHdpZHRoPSI2MDAiIGhlaWdodD0iMzUwIiBwb3N0ZXI9Imh0dHBzOi8vbWl6ZmEuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvcG9zdGVyLW1pemZhLXRvb2xzLXZpZGVvLW1pbi5wbmciIGNvbnRyb2xzIHByZWxvYWQ9Im5vbmUiPiANCiAgIDxzb3VyY2Ugc3JjPSJodHRwczovL21pemZhLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA1L21pemZhX3Rvb2xzXzcyMHAubXA0IiB0eXBlPSJ2aWRlby9tcDQiPg0KPC92aWRlbz4=