کارآزمایی منشا کارگران مشترک با طول عمر طولانی

تاریخ انتشار: 31 جولای 2025

از Chrome 139 در مسیر منشاء جدیدی برای کارگران مشترک طولانی مدت شرکت کنید. آزمایشی یک گزینه extendedLifetime: true را اضافه می کند تا به کارگران اشتراکی اجازه دهد تا بیش از آخرین بارگذاری سند زندگی کنند.

مورد استفاده برای ویژگی طول عمر طولانی

بسیاری از سایت‌ها می‌خواهند زمانی که کاربر از صفحه دور می‌شود، کارهایی را انجام دهند. به عنوان مثال، نوشتن در ذخیره سازی، یا ارسال داده ها به سرورها، برای ذخیره تجزیه و تحلیل وضعیت یا ضبط.

پلتفرم وب چند API برای مقابله با برخی از موارد استفاده ساده‌تر ارائه می‌کند، اما هر کدام دارای محدودیت‌هایی هستند:

  • APIهای جاوا اسکریپت همزمان، مانند نگارش localStorage ، قبل از بارگیری صفحه فعلی تا پایان اجرا می شوند.
  • fetch API دارای تعدادی گزینه مانند keepalive و اخیراً fetchLater است که به ارسال درخواست‌ها اجازه می‌دهد تا مدت کوتاهی از بارگیری سند خارج شوند.

با این حال، اینها فقط کارهای همزمان را به جز درخواست fetch نهایی پوشش می دهند. آنها اجازه استفاده از APIهای ناهمزمان مانند IndexedDB ، Compression Streams یا Web Crypto را برای هش یا رمزگذاری نمی دهند. بسیاری از APIها، به ویژه APIهای جدیدتر، برای جلوگیری از مسدود کردن رشته اصلی، ناهمزمان هستند، بنابراین عدم امکان استفاده از این APIها هنگام بارگیری محدود کننده است.

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

راه حل پیشنهادی

SharedWorker API یک API سبک تر است که برای تخلیه کار از رشته اصلی استفاده می شود. با این حال، آنها در حال حاضر بیشتر از طول عمر مبدا زندگی نمی کنند (زمانی که آخرین صفحه برای آن مبدا تخلیه می شود). کروم در حال پیشنهاد افزودن گزینه جدیدی به SharedWorker API است تا به کارگران اشتراکی اجازه دهد تا مدت کوتاهی از تخریب اسناد بیشتر بمانند.

استاندارد HTML قبلاً پیاده‌سازی‌ها را تشویق می‌کند تا کارگران اشتراک‌گذاری شده را برای مدت کوتاهی پس از بارگیری سند زنده نگه دارند، به طوری که پیمایش بین صفحات با مبدا یکسان از بین نرود و سپس کارگر مشترک را دوباره ایجاد کند. پیشنهاد طولانی‌مدت طول عمر فقط با پیشنهاد این که حتی اگر کاربر به مقصدی با مبدا یکسان حرکت نمی‌کند، عامل کاربر باید کارگر مشترک را برای مدتی زنده نگه دارد تا کار ناهمگام به پایان برسد، این را گسترش می‌دهد.

پیشنهاد این است که به کارگران مشترک اجازه داده شود تا پس از بارگیری آخرین سند، به همان میزانی که کارگران سرور مجاز به بیکار ماندن هستند، زندگی کنند - که برای Chrome 30 ثانیه است. توجه داشته باشید که برای کارگران مشترک، این حداکثر طول عمر پس از تخلیه است، نه یک زمان بیکار. یعنی محدودیت 30 ثانیه از بارگیری شروع می شود، نه از زمان بیکاری. کارهایی که در آن بازه زمانی شروع شده و هنوز تکمیل نشده باشد لغو می شود.

عمر طولانی را فعال کنید

این ویژگی را می توان با ثبت نام برای آزمایش اولیه برای کارگران مشترک طولانی مدت در سایت ها برای کاربران فعال کرد. همچنین، توسعه‌دهندگان می‌توانند با استفاده از پرچم chrome://flags/#enable-experimental-web-platform-features مرورگر خود را فعال کنند.

کد نمونه

پس از انتخاب پرچم آزمایشی یا ویژگی، عمر طولانی را به شرح زیر فعال کنید:

const myWorker = new SharedWorker("worker.js", { extendedLifetime: true });

از آنجایی که کارگران اشتراکی از حباب ها نیز پشتیبانی می کنند، این را می توان بدون اسکریپت جداگانه نیز فعال کرد. به عنوان مثال برای نوشتن داده ها در IndexedDb:

const sharedWorkerScript = `
  const transaction = db.transaction("analytics", "readwrite");
  const store = transaction.objectStore("analytics");
  const request = store.get("visitCount");
  request.onsuccess = (event) => {
    const newCount = (event.target.result || 0) + 1;
    store.put(newCount, "visitCount");
  };
`;

document.addEventListener("pagehide", () => {
  const blob = new Blob([sharedWorkerScript], { type: "text/javascript" });
  const blobURL = URL.createObjectURL(blob);
  new SharedWorker(blobURL, { extendedLifetime: true });
});

ما همچنین یک نمونه برنامه در اینجا داریم: https://sharedworker-extendedlifetime.netlify.app/ . هنگامی که صفحه دوباره بارگیری می شود (یا بسته می شود و ظرف 30 ثانیه دوباره باز می شود)، محاسبه قبلی همچنان در دسترس است.

کارگران اشتراک‌گذاری شده برای سایتی در آدرس زیر قابل مشاهده هستند: chrome://inspect/#workers و این به زودی بهبود می‌یابد تا نشان دهد آیا از گزینه extendedLifetime استفاده شده است یا خیر. کارگران مشترک با طول عمر طولانی نیز پس از بارگیری صفحه به مدت 30 ثانیه در این صفحه نمایش داده می شوند.

بازخورد خود را به اشتراک بگذارید

ما مشتاقانه منتظر شنیدن بازخورد شما در مورد مسیر منشاء کارگر مشترک طولانی مدت هستیم.

شکل API در GitHub در حال بحث است و ما توضیح فنی دقیق تری داریم.

برای بازخورد در مورد اجرای Chrome، یک اشکال Chromium را ثبت کنید.