47 điểm bởi xguru 2022-02-28 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Đôi khi có những trường hợp bạn muốn ghi log khi người dùng chuyển sang trang khác hoặc gửi biểu mẫu
  • Việc đặt fetch trong sự kiện click không đảm bảo rằng yêu cầu chắc chắn sẽ được gửi đi
  • Vì vậy có thể thử gọi Fetch rồi sau đó chuyển trang bằng window.location, nhưng cách này cũng không được đảm bảo
    • Vì XHR là bất đồng bộ và không chặn
  • Có thể xử lý bằng cách await Promise của fetch, nhưng cách này cũng có nhược điểm
    • Tốc độ xử lý chậm hơn nên trải nghiệm người dùng kém đi
    • Không ổn định như mong đợi. Không thể xử lý các trường hợp như đóng tab trình duyệt
  • Trình duyệt có nhiều tùy chọn để giữ lại yêu cầu HTTP
    • Nếu dùng cờ keepalive trong Fetch thì ngay cả khi trang bị ngắt, yêu cầu đó vẫn được duy trì
    • Một hàm đơn giản hơn như Navigator.sendBeacon()
    • Các trình duyệt cũng hỗ trợ thuộc tính ping trên thẻ a (nhược điểm là chỉ dùng được cho liên kết, và FF không hỗ trợ mặc định)
  • Vậy nên dùng gì?
    • Nếu có thể thì dùng fetch() + keepalive
      • 80% trình duyệt hỗ trợ
      • Có thể gửi header tùy chỉnh
      • Cũng dùng được với yêu cầu GET
      • Hỗ trợ cả các trình duyệt cũ
    • sendBeacon() phù hợp khi
      • 96% trình duyệt hỗ trợ
      • Không cần quá nhiều tùy biến
      • Thích một API gọn gàng và thanh lịch
      • Không muốn cạnh tranh với các yêu cầu ưu tiên khác của trình duyệt

Chưa có bình luận nào.

Chưa có bình luận nào.