معرفی NoState Prefetch

کیتی همپنیوس
Katie Hempenius

مقدمه

NoState Prefetch مکانیزم جدیدی در Chrome است که جایگزینی برای فرآیند پیش‌اجرای منسوخ شده است که برای تقویت ویژگی‌هایی مانند <link rel="prerender"> استفاده می‌شود. مانند پیش اجرا، منابع را از قبل دریافت می کند. اما برخلاف اجرای اولیه، جاوا اسکریپت را اجرا نمی کند یا هیچ بخشی از صفحه را از قبل رندر نمی کند. هدف NoState Prefetch این است که از حافظه کمتری نسبت به اجرای اولیه استفاده کند و در عین حال زمان بارگذاری صفحه را کاهش دهد.

NoState Prefetch یک API نیست، بلکه مکانیزمی است که کروم برای پیاده‌سازی APIها و ویژگی‌های مختلف استفاده می‌کند. Resource Hints API و همچنین واکشی اولیه صفحات توسط نوار آدرس کروم، هر دو با استفاده از NoState Prefetch اجرا می‌شوند. اگر از Chrome 63 یا جدیدتر استفاده می کنید، مرورگر شما در حال حاضر از NoState Prefetch برای ویژگی هایی مانند <link rel="prerender"> استفاده می کند.

این مقاله نحوه عملکرد NoStatePrefetch، انگیزه‌های معرفی آن و دستورالعمل‌های استفاده از هیستوگرام‌های کروم برای مشاهده آمار استفاده از آن را توضیح می‌دهد.

انگیزه

دو انگیزه اصلی برای معرفی NoState Prefetch وجود داشت:

مصرف حافظه را کاهش دهید

NoState Prefetch فقط از 45 مگابایت حافظه استفاده می کند. نگهداری اسکنر پیش بارگذاری هزینه اولیه حافظه برای NoState Prefetch است و این هزینه در موارد استفاده مختلف نسبتا ثابت می ماند. افزایش اندازه یا حجم واکشی ها تاثیر قابل توجهی بر میزان حافظه مصرفی NoState Prefetch ندارد.

در مقابل، پیش‌رندر معمولاً 100 مگابایت حافظه مصرف می‌کند و مصرف حافظه روی 150 مگابایت محدود می‌شود. این مصرف زیاد حافظه آن را برای دستگاه های کم رده (یعنی <= 512 مگابایت رم) نامناسب می کند. در نتیجه، Chrome پیش اجرا را در دستگاه‌های ارزان‌قیمت انجام نمی‌دهد و در عوض از قبل متصل می‌شود.

تسهیل پشتیبانی از ویژگی های جدید پلت فرم وب

با اجرای پیش‌اجرا، هیچ اقدامی با کاربر (مثلاً پخش موسیقی یا ویدیو) یا عملکرد حالتی (مثلاً تغییر جلسه یا فضای ذخیره‌سازی محلی) انجام نمی‌شود. با این حال، جلوگیری از انجام این اقدامات در حین رندر کردن یک صفحه می تواند دشوار و پیچیده باشد. NoState Prefetch فقط منابع را از قبل واکشی می کند: کد را اجرا نمی کند یا صفحه را رندر نمی کند. این امر باعث می‌شود که از انجام اقداماتی که کاربر روبه‌رو می‌شود و حالتی رخ ندهد، ساده‌تر می‌شود.

پیاده سازی

مراحل زیر نحوه عملکرد NoState Prefetch را توضیح می دهد.

  1. NoStatePrefetch راه اندازی می شود.

    یک راهنمایی منبع پیش اجرا (یعنی <link rel="prerender"> ) و برخی از ویژگی‌های Chrome NoState Prefetch را فعال می‌کنند، مشروط بر اینکه دو شرط زیر برآورده شوند: الف) کاربر در یک دستگاه ارزان قیمت نباشد، و ب) کاربر در شبکه تلفن همراه نیست

  2. یک رندر اختصاصی جدید برای NoState Prefetch ایجاد شده است.

    در کروم، " رندر " فرآیندی است که مسئول گرفتن یک سند HTML، تجزیه آن، ساخت درخت رندر آن، و نقاشی نتیجه روی صفحه است. هر تب در کروم، و همچنین هر فرآیند NoState Prefetch، رندر مخصوص به خود را برای ارائه انزوا دارد. این به کاهش اثرات اشتباه (مثلاً خراب شدن برگه) و همچنین جلوگیری از دسترسی کدهای مخرب به سایر تب ها یا سایر بخش های سیستم کمک می کند.

  3. منبعی که با NoState Prefetch بارگیری می شود واکشی می شود. سپس HTMLPreloadScanner این منبع را اسکن می کند تا منابع فرعی را که نیاز به واکشی دارند را کشف کند. اگر منبع اصلی یا هر یک از منابع فرعی آن یک سرویس‌کار ثبت‌شده داشته باشد، این درخواست‌ها از طریق سرویس‌کار مربوطه انجام می‌شود.

    NoState Prefetch فقط از روش GET HTTP پشتیبانی می کند. هیچ منبع فرعی که نیاز به استفاده از سایر روش های HTTP داشته باشد را دریافت نخواهد کرد. علاوه بر این، هیچ منبعی را که به اقدامات کاربر نیاز دارد (مثلاً پنجره های بازشو تأیید اعتبار، گواهی مشتری SSL یا لغو دستی) واکشی نمی کند.

  4. منابع فرعی که واکشی می شوند با اولویت خالص "IDLE" واکشی می شوند.

    اولویت خالص «IDLE» پایین‌ترین اولویت ممکن در Chrome است.

  5. تمام منابع بازیابی شده توسط NoState Prefetch با توجه به هدرهای کش آنها ذخیره می شوند.

    NoState Prefetch تمام منابع را به جز منابعی که سربرگ no-store Cache-Control دارند، ذخیره می کند. اگر هدر پاسخ Vary ، هدر Cache-Control no-cache وجود داشته باشد، یا اگر منبع بیش از 5 دقیقه باشد، یک منبع قبل از استفاده مجدداً اعتبارسنجی می شود.

  6. رندر پس از بارگیری همه منابع فرعی کشته می شود.

    اگر زمان منابع فرعی تمام شود، رندر پس از 30 ثانیه کشته می شود.

  7. مرورگر علاوه بر به‌روزرسانی فروشگاه کوکی و حافظه پنهان DNS محلی، هیچ تغییری در وضعیت ایجاد نمی‌کند. مهم است که این را فراخوانی کنید زیرا این "NoState" در "NoState Prefetch" است.

    در این مرحله از فرآیند بارگذاری صفحه "عادی"، مرورگر احتمالاً کارهایی را انجام می دهد که وضعیت مرورگر را تغییر می دهد: به عنوان مثال، اجرای جاوا اسکریپت، تغییر دادن sessionStorage یا localStorage ، پخش موسیقی یا ویدیو، استفاده از History API، یا درخواست از کاربر. . تنها تغییرات حالتی که در NoState Prefetch رخ می‌دهد، به‌روزرسانی حافظه پنهان DNS هنگام رسیدن پاسخ‌ها و به‌روزرسانی ذخیره‌سازی کوکی‌ها در صورتی که پاسخی حاوی هدر Set-Cookie باشد، است.

  8. هنگامی که منبع مورد نیاز است، در پنجره مرورگر بارگذاری می شود.

    با این حال، بر خلاف یک صفحه از پیش اجرا شده، صفحه بلافاصله قابل مشاهده نخواهد بود - هنوز باید توسط مرورگر رندر شود. مرورگر از رندری که برای NoState Prefetch استفاده کرده است مجددا استفاده نمی کند و در عوض از یک رندر جدید استفاده می کند. رندر نکردن صفحه از قبل، مصرف حافظه NoStatePrefetch را کاهش می دهد، اما تاثیر احتمالی آن بر زمان بارگذاری صفحه را نیز کاهش می دهد.

    اگر صفحه دارای یک سرویس دهنده باشد، این بارگذاری صفحه دوباره از طریق سرویس دهنده انجام می شود.

    اگر NoState Prefetch واکشی منابع فرعی را تا زمان نیاز به صفحه تمام نکرده باشد، مرورگر از همان جایی که NoState Prefetch متوقف شد، به فرآیند بارگیری صفحه ادامه خواهد داد. مرورگر همچنان نیاز به واکشی منابع دارد، اما اگر NoState Prefetch راه اندازی نشده بود، نه به اندازه ای که لازم بود.

تاثیر بر تجزیه و تحلیل وب

صفحات بارگیری شده با استفاده از NoState Prefetch توسط ابزارهای تجزیه و تحلیل وب در زمان‌های کمی متفاوت ثبت می‌شوند که بستگی به این دارد که آیا ابزار داده‌ها را در سمت سرویس گیرنده یا سمت سرور جمع‌آوری می‌کند.

هنگامی که صفحه به کاربر نشان داده می شود، اسکریپت های تجزیه و تحلیل سمت مشتری، یک نمای صفحه را ثبت می کنند. این اسکریپت ها بر اجرای جاوا اسکریپت متکی هستند و NoState Prefetch هیچ جاوا اسکریپتی را اجرا نمی کند.

ابزارهای تجزیه و تحلیل سمت سرور، معیارها را هنگام رسیدگی به درخواست ثبت می کنند. برای منابع بارگیری شده از طریق NoState Prefetch، فاصله زمانی قابل توجهی بین زمانی که یک درخواست رسیدگی می شود و زمانی که پاسخ واقعاً توسط مشتری استفاده می شود (در صورت استفاده از آن) وجود دارد. از Chrome 69، NoState Prefetch سرصفحه را اضافه می‌کند Purpose: Prefetch اولیه به همه درخواست‌ها به منظور متمایز کردن آنها از مرور معمولی.

آن را بررسی کنید

NoStatePrefetch در دسامبر 2017 در Chrome 63 ارسال شد. در حال حاضر برای:

  • راهنمایی منبع prerender را اجرا کنید
  • اولین نتیجه را در نتایج جستجوی Google واکشی کنید
  • صفحاتی را واکشی کنید که نوار آدرس کروم پیش‌بینی می‌کند احتمالاً در آینده بازدید می‌شوند

می‌توانید از Chrome Internals استفاده کنید تا ببینید چگونه از NoStatePrefetch استفاده کرده‌اید.

برای مشاهده لیست سایت هایی که با NoState Prefetch بارگذاری شده اند، به chrome://net-internals/#prerender بروید.

برای مشاهده آمار استفاده از NoState Prefetch، به chrome://histograms بروید و «NoStatePrefetch» ​​را جستجو کنید. سه هیستوگرام NoState Prefetch مختلف وجود دارد - یکی برای هر مورد استفاده NoState Prefetch:

  • "NoStatePrefetch" (آمار برای استفاده توسط نکات منبع پیش اجرا)
  • "gws_NoStatePrefetch" (آمار برای استفاده توسط صفحه نتایج جستجوی Google)
  • «omnibox_NoStatePrefetch» ​​(آمار برای استفاده در نوار آدرس Chrome)