วัดการใช้งานแบบออฟไลน์

วิธีติดตามการใช้งานเว็บไซต์แบบออฟไลน์เพื่อให้คุณสามารถอธิบายเหตุผลที่เว็บไซต์ของคุณต้องมีประสบการณ์การใช้งานแบบออฟไลน์ที่ดีขึ้น

Stephan Giesau
Stephan Giesau
Martin Schierle
Martin Schierle

ดูวิธีติดตามการใช้งานเว็บไซต์แบบออฟไลน์ เพื่อให้คุณสามารถระบุเหตุผล ที่เว็บไซต์ของคุณต้องมีโหมดออฟไลน์ที่ดีขึ้น ทําความเข้าใจข้อผิดพลาดและปัญหา ที่ควรหลีกเลี่ยงเมื่อติดตั้งใช้งานข้อมูลวิเคราะห์การใช้งานแบบออฟไลน์

ข้อควรระวังเกี่ยวกับเหตุการณ์ของเบราว์เซอร์ออนไลน์และออฟไลน์

วิธีที่ชัดเจนในการติดตามการใช้งานออฟไลน์คือการสร้าง Listener เหตุการณ์สำหรับเหตุการณ์ online และ offline (ซึ่งเบราว์เซอร์จํานวนมากรองรับ) และวางตรรกะการติดตามข้อมูลวิเคราะห์ไว้ใน Listener เหล่านั้น อย่างไรก็ตาม วิธีนี้มีปัญหาและข้อจำกัดหลายประการ ดังนี้

  • โดยทั่วไป การติดตามเหตุการณ์สถานะการเชื่อมต่อเครือข่ายทุกครั้งอาจมากเกินไป และไม่เป็นผลดีในโลกที่เน้นความเป็นส่วนตัวซึ่งควรเก็บรวบรวมข้อมูลให้น้อยที่สุด เท่าที่จะเป็นไปได้ นอกจากนี้ เหตุการณ์ online และ offline ยังอาจเริ่มทำงานเพียงเสี้ยววินาทีเมื่อเครือข่ายขาดหาย ซึ่งผู้ใช้ อาจไม่เห็นหรือสังเกตเห็นด้วยซ้ำ
  • การติดตามกิจกรรมออฟไลน์ของ Analytics ไม่ได้ไปถึงเซิร์ฟเวอร์ Analytics
  • การติดตามการประทับเวลาในเครื่องเมื่อผู้ใช้ออฟไลน์ และการส่งกิจกรรมออฟไลน์ไปยังเซิร์ฟเวอร์ข้อมูลวิเคราะห์เมื่อผู้ใช้กลับมาออนไลน์อีกครั้งขึ้นอยู่กับการที่ผู้ใช้กลับมาที่เว็บไซต์ของคุณ หากผู้ใช้ออกจากเว็บไซต์เนื่องจากไม่มีโหมดออฟไลน์และไม่กลับมาอีก คุณจะไม่มีวิธีติดตามผู้ใช้รายนั้น ความสามารถในการติดตามการทำไม่สำเร็จแบบออฟไลน์เป็นข้อมูลสําคัญในการสร้างเคสเกี่ยวกับเหตุผลที่เว็บไซต์ของคุณต้องมีโหมดออฟไลน์ที่ดีขึ้น
  • online เหตุการณ์นี้ไม่ค่อยน่าเชื่อถือเนื่องจากทราบเฉพาะการเข้าถึงเครือข่าย ไม่ใช่การเข้าถึงอินเทอร์เน็ต ดังนั้นผู้ใช้อาจยังออฟไลน์อยู่ และการส่ง Ping ติดตามอาจยังคงล้มเหลว
  • แม้ว่าผู้ใช้จะยังคงอยู่ในหน้าปัจจุบันขณะออฟไลน์ แต่ระบบก็จะไม่ติดตามเหตุการณ์ Analytics อื่นๆ (เช่น เหตุการณ์การเลื่อน การคลิก ฯลฯ) ด้วยเช่นกัน ซึ่งอาจเป็นข้อมูลที่เกี่ยวข้องและมีประโยชน์มากกว่า
  • การออฟไลน์เพียงอย่างเดียวไม่ได้มีความหมายมากนัก คุณอาจต้องการทราบ ว่าโหลดทรัพยากรใดไม่สำเร็จ ซึ่งเกี่ยวข้องกับแอปพลิเคชันหน้าเว็บเดียว (SPA) โดยเฉพาะ เนื่องจากการเชื่อมต่อเครือข่ายที่ขาดหายอาจไม่นำไปสู่หน้าข้อผิดพลาดแบบออฟไลน์ของเบราว์เซอร์ที่ผู้ใช้เข้าใจ แต่มีแนวโน้มที่จะทำให้ส่วนแบบไดนามิกแบบสุ่มของหน้าเว็บล้มเหลวโดยไม่มีการแจ้งเตือน

คุณยังคงใช้โซลูชันนี้เพื่อทำความเข้าใจพื้นฐานเกี่ยวกับการใช้งานแบบออฟไลน์ได้ แต่ต้องพิจารณาข้อเสียและข้อจำกัดต่างๆ อย่างรอบคอบ

แนวทางที่ดีกว่า: Service Worker

โซลูชันที่เปิดใช้โหมดออฟไลน์ยังเป็นโซลูชันที่ดีกว่าในการติดตาม การใช้งานแบบออฟไลน์ด้วย คุณสามารถจัดเก็บ Ping การวิเคราะห์ใน IndexedDB ตราบใดที่ผู้ใช้ออฟไลน์ และส่งอีกครั้งเมื่อผู้ใช้ออนไลน์อีกครั้ง สำหรับ Google Analytics ฟีเจอร์นี้มีอยู่ในโมดูล Workbox อยู่แล้ว แต่โปรดทราบว่าระบบอาจไม่ประมวลผล Hit ที่ส่งโดยเลื่อนเวลาไปนานกว่า 4 ชั่วโมง

ในรูปแบบที่ง่ายที่สุด คุณสามารถเปิดใช้งานได้ภายใน Service Worker ที่ใช้ Workbox ด้วย 2 บรรทัดต่อไปนี้

import * as googleAnalytics from 'workbox-google-analytics';

googleAnalytics.initialize();

ซึ่งจะติดตามเหตุการณ์และการ Ping การดูหน้าเว็บที่มีอยู่ทั้งหมดขณะออฟไลน์ แต่คุณจะไม่ทราบว่าเหตุการณ์เหล่านั้นเกิดขึ้นแบบออฟไลน์ เนื่องจากระบบจะเล่นซ้ำตามที่เป็นอยู่ คุณจัดการคำขอติดตามด้วย Workbox ได้ โดยเพิ่มแฟล็ก offline ลงในการ Ping ข้อมูลวิเคราะห์โดยใช้มิติข้อมูลที่กำหนดเอง ดังนี้

import * as googleAnalytics from 'workbox-google-analytics';

googleAnalytics.initialize({
  parameterOverrides: {
    customDimension1: 'offline',
  },
});

จะเกิดอะไรขึ้นหากผู้ใช้ออกจากหน้าเว็บเนื่องจากออฟไลน์อยู่ก่อนที่การเชื่อมต่ออินเทอร์เน็ตจะกลับมา แม้ว่าโดยปกติแล้ว Service Worker จะเข้าสู่โหมดสลีปเนื่องจากส่งข้อมูลไม่ได้เมื่อการเชื่อมต่อกลับมา แต่โมดูล Workbox Google Analytics จะใช้ Background Sync API การซิงค์ข้อมูลเบื้องหลังจะส่งข้อมูลวิเคราะห์เมื่อ การเชื่อมต่อกลับมา แม้ว่าผู้ใช้จะปิดแท็บหรือเบราว์เซอร์ก็ตาม

แต่ก็ยังมีข้อเสียอยู่ นั่นคือแม้ว่าวิธีนี้จะทำให้การติดตามที่มีอยู่สามารถทำงานแบบออฟไลน์ได้ แต่คุณอาจไม่เห็นข้อมูลที่เกี่ยวข้องมากนักจนกว่าจะใช้ โหมดออฟไลน์พื้นฐาน ผู้ใช้จะยังคงออกจากเว็บไซต์อย่างรวดเร็วเมื่อการเชื่อมต่อขาดหาย แต่ตอนนี้คุณสามารถวัดและหาค่านี้ได้โดย เปรียบเทียบระยะเวลาเซสชันโดยเฉลี่ยและการมีส่วนร่วมของผู้ใช้สำหรับผู้ใช้ที่มีมิติข้อมูลออฟไลน์ กับผู้ใช้ปกติ

SPA และการโหลดแบบ Lazy Loading

หากผู้ใช้ที่เข้าชมหน้าเว็บที่สร้างเป็นเว็บไซต์แบบหลายหน้าออฟไลน์และพยายามไปยังส่วนต่างๆ หน้าออฟไลน์เริ่มต้นของเบราว์เซอร์จะปรากฏขึ้น ซึ่งจะช่วยให้ผู้ใช้เข้าใจสิ่งที่เกิดขึ้น อย่างไรก็ตาม หน้าเว็บที่สร้างเป็นแอปพลิเคชันหน้าเว็บเดียวจะทำงานแตกต่างกัน ผู้ใช้จะอยู่ในหน้าเดิม และระบบจะโหลดเนื้อหาใหม่แบบไดนามิกผ่าน AJAX โดยไม่ต้องไปยังส่วนต่างๆ ของเบราว์เซอร์ ผู้ใช้จะไม่เห็น หน้าข้อผิดพลาดของเบราว์เซอร์เมื่อออฟไลน์ แต่ส่วนแบบไดนามิกของหน้าเว็บจะแสดงผลพร้อมข้อผิดพลาด เข้าสู่สถานะที่ไม่ได้กำหนด หรือหยุดเป็นแบบไดนามิก

ผลลัพธ์ที่คล้ายกันอาจเกิดขึ้นภายในเว็บไซต์แบบหลายหน้าเนื่องจากการโหลดแบบ Lazy Loading เช่น การโหลดครั้งแรกอาจเกิดขึ้นทางออนไลน์ แต่ผู้ใช้ออฟไลน์ก่อนที่จะเลื่อน เนื้อหาทั้งหมดที่โหลดแบบ Lazy Loading ที่อยู่ครึ่งหน้าล่างจะล้มเหลวโดยไม่มีการแจ้งเตือนและหายไป

เนื่องจากกรณีเหล่านี้สร้างความรำคาญให้กับผู้ใช้เป็นอย่างมาก จึงควรติดตาม Service Worker เป็นจุดที่เหมาะที่สุดในการตรวจหาข้อผิดพลาดของเครือข่าย และติดตามข้อผิดพลาดเหล่านั้นโดยใช้ Analytics Workbox ช่วยให้กำหนดค่า ตัวแฮนเดิล catch ทั่วโลก เพื่อแจ้งให้หน้าเว็บทราบเกี่ยวกับคำขอที่ไม่สำเร็จได้โดยการส่งเหตุการณ์ข้อความ

import { setCatchHandler } from 'workbox-routing';

setCatchHandler(({ event }) => {
  // https://developer.mozilla.org/docs/Web/API/Client/postMessage
  event.waitUntil(async function () {
    // Exit early if we don't have access to the client.
    // Eg, if it's cross-origin.
    if (!event.clientId) return;

    // Get the client.
    const client = await clients.get(event.clientId);
    // Exit early if we don't get the client.
    // Eg, if it closed.
    if (!client) return;

    // Send a message to the client.
    client.postMessage({
      action: "network_fail",
      url: event.request.url,
      destination: event.request.destination
    });

    return Response.error();

  }());
});

อีกวิธีหนึ่งคือการตรวจหาข้อผิดพลาดในเส้นทางที่เฉพาะเจาะจงเท่านั้น แทนที่จะฟังคำขอที่ล้มเหลวทั้งหมด ตัวอย่างเช่น หากต้องการรายงานข้อผิดพลาดที่เกิดขึ้นใน เส้นทางไปยัง /products/* เท่านั้น เราสามารถเพิ่มการตรวจสอบใน setCatchHandler ซึ่ง กรอง URI ด้วยนิพจน์ทั่วไป

วิธีที่สะอาดกว่าคือการใช้ registerRoute กับตัวแฮนเดิลที่กำหนดเอง ซึ่ง จะห่อหุ้มตรรกะทางธุรกิจไว้ในเส้นทางแยกต่างหาก โดยมี ความสามารถในการบำรุงรักษาที่ดีขึ้นใน Service Worker ที่ซับซ้อนมากขึ้น

import { registerRoute } from 'workbox-routing';
import { NetworkOnly } from 'workbox-strategies';

const networkOnly = new NetworkOnly();
registerRoute(
  new RegExp('https:\/\/example\.com\/products\/.+'),
  async (params) => {
    try {
      // Attempt a network request.
      return await networkOnly.handle(params);
    } catch (error) {
      // If it fails, report the error.
      const event = params.event;
      if (!event.clientId) return;
      const client = await clients.get(event.clientId);
      if (!client) return;

      client.postMessage({
        action: "network_fail",
        url: event.request.url,
        destination: "products"
      });

      return Response.error();
    }
  }
);

ในขั้นตอนสุดท้าย หน้าเว็บต้องรับฟังเหตุการณ์ message และส่งการ Ping ของ Analytics โปรดตรวจสอบอีกครั้งว่าได้บัฟเฟอร์คำขอข้อมูลวิเคราะห์ที่เกิดขึ้นแบบออฟไลน์ภายใน Service Worker ดังที่อธิบายไว้ก่อนหน้านี้ ให้เริ่มต้นใช้งานปลั๊กอิน workbox-google-analytics เพื่อรองรับ Google Analytics ในตัว

ตัวอย่างต่อไปนี้ใช้ Google Analytics แต่สามารถนำไปใช้ในลักษณะเดียวกันกับผู้ให้บริการวิเคราะห์รายอื่นๆ ได้

if ("serviceWorker" in navigator) {
  // ... SW registration here

  // track offline error events
  navigator.serviceWorker.addEventListener("message", event => {
    if (gtag && event.data && event.data.action === "network_fail") {
      gtag("event", "network_fail", {
        event_category: event.data.destination,
        // event_label: event.data.url,
        // value: event.data.value
      });
    }
  });
}

ซึ่งจะติดตามการโหลดทรัพยากรที่ไม่สําเร็จใน Google Analytics ซึ่งสามารถวิเคราะห์ได้ด้วยการรายงาน ข้อมูลเชิงลึกที่ได้สามารถนำไปใช้เพื่อปรับปรุงการแคชของ Service Worker และการจัดการข้อผิดพลาดโดยทั่วไป เพื่อให้หน้าเว็บมีประสิทธิภาพและเชื่อถือได้มากขึ้นในสภาพเครือข่ายที่ไม่เสถียร

ขั้นตอนถัดไป

คุณได้เรียนรู้วิธีต่างๆ ในการติดตามการใช้งานออฟไลน์พร้อมข้อดีและข้อเสีย แม้ว่าวิธีนี้จะช่วยระบุจำนวนผู้ใช้ที่ออฟไลน์และพบปัญหาเนื่องจากออฟไลน์ได้ แต่ก็เป็นเพียงจุดเริ่มต้นเท่านั้น ตราบใดที่เว็บไซต์ของคุณไม่มีโหมดออฟไลน์ที่สร้างขึ้นอย่างดี คุณก็จะไม่เห็นการใช้งานแบบออฟไลน์มากนักในข้อมูลวิเคราะห์

เราขอแนะนำให้ติดตั้งการติดตามทั้งหมดให้เรียบร้อย จากนั้นจึงขยายความสามารถแบบออฟไลน์ในการทำซ้ำ โดยมุ่งเน้นที่การติดตาม เริ่มต้นด้วยหน้าข้อผิดพลาดแบบออฟไลน์ สร้างด้วย Workbox ได้ง่ายๆ และเป็นแนวทางปฏิบัติแนะนำด้าน UX ที่คล้ายกับหน้า 404 ที่กำหนดเอง จากนั้นให้พยายามใช้ การสำรองข้อมูลแบบออฟไลน์ขั้นสูงเพิ่มเติม และสุดท้ายคือเนื้อหาแบบออฟไลน์จริง ตรวจสอบว่าคุณโฆษณาและอธิบาย ฟีเจอร์นี้ให้ผู้ใช้ทราบอย่างดี แล้วคุณจะเห็นการใช้งานที่เพิ่มขึ้น เพราะทุกคน ต่างก็ต้องออฟไลน์กันบ้าง

ดูเคล็ดลับเกี่ยวกับวิธีรายงานเมตริกและสร้างวัฒนธรรมด้านประสิทธิภาพ และการแก้ไขความเร็วของเว็บไซต์แบบข้ามฟังก์ชัน เพื่อโน้มน้าวผู้มีส่วนเกี่ยวข้องแบบข้ามฟังก์ชันให้ลงทุนในเว็บไซต์ของคุณมากขึ้น แม้ว่าโพสต์เหล่านั้นจะมุ่งเน้นที่ประสิทธิภาพ แต่ก็ควรช่วยให้คุณมีแนวคิดทั่วไปเกี่ยวกับวิธีดึงดูดผู้มีส่วนเกี่ยวข้อง