وظایف

این راهنما وظایف را توصیف می کند، یک ویژگی پیشرفته که برای سفارشی کردن نحوه اعتبارسنجی، ساخت و ارسال درخواست های پروتکل اندازه گیری analytics.js استفاده می شود.

بررسی اجمالی

هر بار که دستور send فراخوانی می‌شود، analytics.js دنباله‌ای از وظایف را برای اعتبارسنجی، ساختن و ارسال درخواست پروتکل اندازه‌گیری از مرورگر کاربر به Google Analytics اجرا می‌کند. جدول زیر هر یک از این وظایف را به ترتیب اجرا توضیح می دهد:

نام وظیفه شرح
customTask به طور پیش فرض این کار هیچ کاری انجام نمی دهد. برای ارائه رفتار سفارشی، آن را لغو کنید.
previewTask در صورتی که صفحه فقط برای ایجاد تصویر کوچک «سایت‌های برتر» برای سافاری ارائه شود، درخواست را لغو می‌کند.
checkProtocolTask اگر پروتکل صفحه http یا https نباشد، درخواست را لغو می کند.
validationTask در صورتی که فیلدهای لازم وجود نداشته باشد یا نامعتبر باشد، درخواست را لغو می کند.
checkStorageTask اگر ردیاب برای استفاده از کوکی ها پیکربندی شده باشد اما مرورگر کاربر کوکی ها را غیرفعال کرده باشد، درخواست را لغو می کند.
historyImportTask اطلاعات را از کوکی‌های ga.js و urchin.js وارد می‌کند تا تاریخچه بازدیدکنندگان را هنگام انتقال سایت به Universal Analytics حفظ کند.
samplerTask از بازدیدکنندگان بر اساس تنظیمات sampleRate برای این ردیاب نمونه برداری می کند.
buildHitTask یک رشته درخواست پروتکل اندازه گیری می سازد و آن را در قسمت hitPayload ذخیره می کند.
sendHitTask درخواست پروتکل اندازه گیری ذخیره شده در قسمت hitPayload را به سرورهای Google Analytics منتقل می کند.
timingTask بر اساس تنظیم siteSpeedSampleRate برای این ردیاب، به طور خودکار یک ضربه زمان بندی سرعت سایت ایجاد می کند.
displayFeaturesTask اگر ویژگی‌های نمایش فعال باشد و بازدید قبلی در بازه زمانی تعیین‌شده توسط کوکی ویژگی‌های تبلیغاتی (_gat) ارسال نشده باشد، یک ضربه اضافی ارسال می‌کند.

هر یک از این وظایف به عنوان یک تابع جاوا اسکریپت اجرا می شود که یک پارامتر مدل واحد را به عنوان ورودی می گیرد. مدل یک شی ساده است که دسترسی به هر یک از فیلدهای تعریف شده در مرجع فیلد Analytics.js را فراهم می کند.

با استفاده از روش‌های get و set استاندارد ردیاب می‌توان به وظایف دسترسی پیدا کرد یا جایگزین کرد. با استفاده از این روش‌ها، می‌توانید وظایف را با توابع سفارشی خود جایگزین کنید، یا عملکرد موجود را با زنجیر کردن توابع سفارشی خود برای اجرای قبل یا بعد از یک کار موجود، تقویت کنید.

پیاده سازی

این بخش نحوه افزودن عملکرد جدید به وظایف موجود، جایگزینی توابع وظیفه داخلی با کد سفارشی خود یا غیرفعال کردن یک تابع وظیفه را به طور کامل شرح می دهد.

نادیده گرفتن یک کار

برای نادیده گرفتن یک کار، می توانید مقدار آن را روی تابعی set که کار متفاوتی انجام می دهد. یک دلیل متداول برای نادیده گرفتن وظایف، حذف عملکرد هنگام آزمایش پیاده‌سازی analytics.js است.

کد زیر sendHitTask با تابعی جایگزین می‌کند که پیلود ضربه را به کنسول ثبت می‌کند:

ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'sendHitTask', function(model) {
  console.log(model.get('hitPayload'));
});

اضافه کردن به یک کار

برای درج عملکرد جدید، می‌توانید تابع وظیفه سفارشی خود را برای اجرای قبل یا بعد از یک کار موجود زنجیره‌ای کنید. در مثال زیر، sendHitTask با یک تابع وظیفه سفارشی جایگزین شده است که ابتدا تابع sendHitTask اصلی را فراخوانی می کند تا چراغ درخواست عادی را به google-analytics.com/collection ارسال کند، سپس کد سفارشی را اجرا می کند تا یک کپی از درخواست پروتکل اندازه گیری را ارسال کند. یک سرور محلی

ga('create', 'UA-XXXXX-Y', 'auto');

ga(function(tracker) {

  // Grab a reference to the default sendHitTask function.
  var originalSendHitTask = tracker.get('sendHitTask');

  // Modifies sendHitTask to send a copy of the request to a local server after
  // sending the normal request to www.google-analytics.com/collect.
  tracker.set('sendHitTask', function(model) {
    originalSendHitTask(model);
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/localhits', true);
    xhr.send(model.get('hitPayload'));
  });
});

ga('send', 'pageview');

لغو پردازش کار

یک کار می تواند پردازش وظایف بعدی را با پرتاب یک استثنا متوقف کند. اگر وظیفه پرتاب کننده استثنا قبل از sendHitTask اجرا شود، این امر باعث جلوگیری از ارسال درخواست پروتکل اندازه گیری به سرورهای Google Analytics می شود. در مثال زیر، هر زمان که مرورگر کاربر حاوی کوکی به نام «تست» با مقدار «true» باشد، درخواست را لغو می‌کنیم.

ga('create', 'UA-XXXXX-Y', 'auto');

ga(function(tracker) {
  var originalBuildHitTask = tracker.get('buildHitTask');
  tracker.set('buildHitTask', function(model) {
    if (document.cookie.match(/testing=true/)) {
      throw 'Aborted tracking for test user.';
    }
    originalBuildHitTask(model);
  });
});

ga('send', 'pageview');

غیرفعال کردن یک کار

برای غیرفعال کردن هر یک از توابع وظیفه داخلی، آن را با null جایگزین کنید.

ga('create', 'UA-XXXXX-Y', 'auto');
ga('set', 'checkProtocolTask', null); // Disables file protocol checking.
ga('send', 'pageview');