7

Tôi đang cố gắng thực hiện theo dõi sự kiện khi người dùng rời khỏi trang bằng Google Analytics (analytics.js). Mặc dù không biết người dùng sẽ rời đi như thế nào, nhưng có thể do liên kết bên ngoài hoặc chỉ đóng tab. Vì vậy, suy nghĩ của tôi là để treo lên beforeunload hoặc dỡ bỏ sự kiện và sau đó:Google Analytics, sự kiện tải trang theo dõi

window.addEventListener("beforeunload", function() { 
    ga('send', 'event', 'some', 'other', 'data'); 
}); 

Bây giờ câu hỏi của tôi là, yêu cầu đến máy chủ GA sẽ được đồng bộ hoặc tôi có thể bằng cách nào đó buộc rằng hành vi với hitCallback bất động sản? Nếu điều đó là không thể, làm cách nào khác tôi có thể đạt được điều này? Tốt nhất là không cần phải đặt thời gian chờ hoặc thời gian chờ cố định cho người dùng!

Trả lời

5

Yêu cầu sẽ không đồng bộ, các cuộc gọi theo dõi GA sẽ không bao giờ.

Cách duy nhất để đảm bảo cuộc gọi hoàn thành là đảm bảo trang vẫn mở đủ lâu - cho sự kiện trên liên kết bạn thường làm điều này với thời gian chờ có khả năng kết hợp với hitCallback, như bạn đã đề cập.

Cách duy nhất để giữ cửa sổ mở khi người dùng đóng tab là trả lại giá trị từ trình xử lý trước khi tải của bạn, sẽ nhắc cảnh báo "Xác nhận điều hướng". Đó sẽ là một giải pháp thực sự tồi tệ chỉ để theo dõi một sự kiện GA, rõ ràng.

4

Có một cách để đảm bảo yêu cầu sẽ được gửi tới GA. Simo Ahava đã viết một bài đăng trên blog rất hay có tiêu đề -
"Leverage useBeacon And beforeunload In Google Analytics".

Sử dụng giải pháp tuyệt vời sendBeacon. Dưới đây là trích dẫn mà giải quyết các câu trả lời lựa chọn của câu hỏi này:

đại lý tài khoản thường sẽ bỏ qua XMLHttpRequests không đồng bộ được thực hiện tại một handler dỡ bỏ. Để giải quyết vấn đề này, phân tích và chẩn đoán mã thường sẽ tạo một XMLHttpRequest đồng bộ trong một bộ xử lý trước khi tải hoặc trước khi tải để gửi dữ liệu. XMLHttpRequest đồng bộ buộc Tác nhân người dùng trì hoãn việc dỡ tài liệu, và làm cho điều hướng tiếp theo có vẻ chậm hơn. Không có gì là trang tiếp theo có thể làm để tránh nhận thức này về hiệu suất tải trang kém hiệu suất .

Có các kỹ thuật khác được sử dụng để đảm bảo rằng dữ liệu được gửi. Một kỹ thuật như vậy là trì hoãn việc tải xuống để gửi dữ liệu bằng cách tạo phần tử Hình ảnh và đặt thuộc tính src của nó trong trình xử lý dỡ tải . Vì hầu hết các tác nhân người dùng sẽ trì hoãn việc dỡ tải để hoàn tất tải ảnh đang chờ xử lý, dữ liệu có thể được gửi trong khi dỡ tải. Một kỹ thuật khác là tạo vòng lặp không có trong vài giây trong vòng trình xử lý tải để trì hoãn việc tải và gửi dữ liệu đến máy chủ.

Không chỉ các kỹ thuật này thể hiện các mẫu mã kém, một số số chúng không đáng tin cậy và cũng dẫn đến nhận thức về hiệu suất tải thấp cho trang kế tiếp.

1

Bạn có thể đợi một lần truy cập được gửi đến Google Analytics trong trang onunload nhưng yêu cầu phải có vòng lặp bận. Trong trường hợp của tôi, điều này không làm trì hoãn việc điều hướng người dùng, vì trang này là một cửa sổ bật lên được dành riêng cho một ứng dụng web. Tôi muốn được quan tâm nhiều hơn về việc làm nội tuyến này với điều hướng trang web bình thường. Tuy nhiên, tôi đã phải mất 2 vòi hoa sen để có được sự bẩn thỉu sau khi cam kết mã với một vòng lặp bận rộn.

var MAX_WAIT_MS = 1000; 
var _waitForFinalHit = false; 

function recordFinalHit() { 
    _waitForFinalHit = true; 

    ga('send', 'event', 'some', 'other', 'data', { 
     'hitCallback': function() { 
      _waitForFinalHit = false; 
     } 
    }); 
} 

function waitForFinalHit() { 
    var waitStart = new Date().getTime(); 
    while (_waitForFinalHit 
     && (new Date().getTime() - waitStart < MAX_WAIT_MS)) { } 
} 

function myOnUnload() { 
    recordFinalHit(); 
    // Do your other final stuff here... 
    waitForFinalHit(); 
} 

window.onunload = myOnUnload; 
+1

Trừ khi tôi là nhầm lẫn, điều này sẽ luôn lặp bận rộn cho MAX_WAIT_MS, vì vòng lặp không bao giờ nhường quyền kiểm soát lại cho trình duyệt, do đó yêu cầu gọi lại không bao giờ có thể thực hiện, và _waitForFinalHit có thể không bao giờ được cập nhật. Tôi không biết về bất kỳ giải pháp nào. – tomconnors

Các vấn đề liên quan