بنابراین شما یک برنامه وب پیشرفته دارید که با یک سرویس دهنده کامل شده است که به آن اجازه می دهد به صورت آفلاین کار کند. عالیه شما همچنین Google Analytics موجود را برای برنامه وب خود راه اندازی کرده اید، و نمی خواهید هیچ یک از بینش های تحلیلی ناشی از استفاده در حالت آفلاین را از دست بدهید. اما اگر بخواهید در حالت آفلاین، داده ها را به Google Analytics ارسال کنید، این درخواست ها با شکست مواجه می شوند و داده ها از بین می روند.
راه حل، نباید شما را متعجب کرد، کارگران خدماتی! به طور خاص، کدی را به کارمند سرویس شما اضافه میکند تا درخواستهای Google Analytics را ذخیره کند (با استفاده از IndexedDB
) و بعداً زمانی که امیدواریم شبکهای در دسترس باشد دوباره آنها را امتحان کنید. ما کدی را برای مدیریت این منطق به عنوان بخشی از برنامه وب منبع باز Google I/O به اشتراک گذاشتیم، اما متوجه شدیم که این یک الگوی مفید است و کپی و چسباندن کد میتواند شکننده باشد.
امروز، ما خوشحالیم که اعلام کنیم همه چیزهایی که برای رسیدگی به درخواستهای Google Analytics آفلاین در سرویسکارگر خود نیاز دارید، در یک بسته npm قرار گرفته است: npm install --save-dev sw-offline-google-analytics
استفاده از sw-offline-google-analytics
از داخل کد سرویس کارگر موجود، موارد زیر را اضافه کنید:
// This code should live inside your service worker JavaScript, ideally
// before any other 'fetch' event handlers are defined:
// First, import the library into the service worker global scope:
importScripts('path/to/offline-google-analytics-import.js');
// Then, call goog.offlineGoogleAnalytics.initialize():
// See https://github.com/GoogleChrome/workbox/tree/main/packages/workbox-google-analytics
goog.offlineGoogleAnalytics.initialize();
// At this point, implement any other service worker caching strategies
// appropriate for your web app.
این تمام چیزی است که وجود دارد!
زیر کاپوت چه خبر است؟
sw-offline-google-analytics
یک کنترلکننده رویداد fetch
جدید را در سرویسکار شما راهاندازی میکند، که به درخواستهای ارسال شده به دامنه Google Analytics پاسخ میدهد. (کتابخانه درخواستهای غیر Google Analytics را نادیده میگیرد و به سایر کنترلکنندههای رویداد fetch
کارکنان خدمات شما فرصتی میدهد تا استراتژیهای مناسب را برای آن منابع پیادهسازی کنند.) ابتدا تلاش میکند تا درخواست را در برابر شبکه انجام دهد. اگر کاربر آنلاین باشد، به طور معمول ادامه خواهد یافت.
اگر درخواست شبکه با شکست مواجه شود ، کتابخانه به طور خودکار اطلاعات مربوط به درخواست را به IndexedDB
، همراه با یک مهر زمانی که نشان می دهد درخواست در ابتدا انجام شده است، ذخیره می کند. هر بار که سرویسکار شما راهاندازی میشود ، کتابخانه درخواستهای در صف را بررسی میکند و سعی میکند دوباره آنها را به همراه برخی از پارامترهای Google Analytics اضافی ارسال کند:
- یک پارامتر
qt
که روی مقدار زمانی که از زمان درخواست اولیه گذشته است تنظیم می شود تا اطمینان حاصل شود که زمان اصلی به درستی نسبت داده شده است. - هر پارامتر و مقدار اضافی ارائه شده در ویژگی
parameterOverrides
شی پیکربندی که بهgoog.offlineGoogleAnalytics.initialize()
ارسال شده است. برای مثال، میتوانید یک بعد سفارشی برای تشخیص درخواستهایی که مجدداً از طرف سرویسدهنده ارسال شدهاند از درخواستهایی که بلافاصله ارسال شدهاند، اضافه کنید.
اگر ارسال مجدد درخواست موفقیت آمیز باشد، عالی است! درخواست از IndexedDB حذف شده است. اگر تلاش مجدد ناموفق باشد و درخواست اولیه کمتر از 24 ساعت قبل انجام شده باشد، در IndexedDB
نگهداری میشود تا دفعه بعد که سرویسگر شروع به کار میکند دوباره امتحان شود. باید توجه داشته باشید که بازدیدهای Google Analytics قدیمیتر از چهار ساعت تضمین نمیشوند که پردازش شوند، اما ارسال مجدد بازدیدهای کمی قدیمیتر «فقط در مورد» نباید ضرری داشته باشد.
sw-offline-google-analytics
همچنین یک استراتژی "اول شبکه، بازگشت به حافظه پنهان" را برای کد واقعی جاوا اسکریپت analytics.js
مورد نیاز برای بوت استرپ Google Analytics پیاده سازی می کند .
چیزهای بیشتری در راه است!
sw-offline-google-analytics
بخشی از پروژه بزرگتر sw-helpers
است که مجموعهای از کتابخانهها است که به منظور ارائه پیشرفتهایی در پیادهسازیهای موجود در سرویسکار است.
همچنین بخشی از آن پروژه sw-appcache-behavior
است، کتابخانهای که استراتژیهای ذخیرهسازی را که در مانیفست AppCache موجود در داخل یک سرویسکار تعریف شده است، پیادهسازی میکند. در نظر گرفته شده است که به شما کمک کند تا از AppCache به کارگران خدماتی مهاجرت کنید و در عین حال حداقل در ابتدا یک استراتژی ذخیره سازی ثابت را حفظ کنید.
اگر ایده های دیگری برای کتابخانه دارید، خوشحال می شویم از شما بشنویم. بنابراین لطفاً درخواست خود را در ردیاب شماره ثبت کنید!