Asked Jul 6th, 2023 10:29 a.m. 63 0 2
  • 63 0 2
+2

Response processing

Share
  • 63 0 2

Mọi người cho em hỏi, em đang có 1 vấn đề là update khoảng 10000row trong DB, em có sử dụng 1 api trên thằng koajs. Do thời gian thực hiện lâu nên ở client bị request timeout, chờ rất lâu mới có kết quả image.png em có trả ngay response lần đầu về là processing ngay khi vào router giống như hình, mặt dù đã gán giá trị trả về nhưng bên client vẫn không nhận Có bác nào cho em xin cách giải quyết vấn đề này với ạ

2 ANSWERS


Answered Jul 13th, 2023 5:11 p.m.
+1

Theo mình thì có 4 cách:

  • Setting kéo dài thời gian timeout của client (không khuyến khích)
  • Phía FE sử dụng long pulling để check xem lúc nào api trả về kết quả. (sau khi submit thì cứ cho user sử dụng bt, khi nào api update xong thì thông báo cho user)
  • thử chia nhỏ request ra làm nhiều request nhỏ, mỗi request khoảng 500-1000 sau đó sử dụng Promise all thử. Thêm nữa mình k biết trong body bạn đang có gì, nên xem xét lại thử trong body có record nào trùng nhau không (nếu trung thì loại bỏ).
  • Nếu chia nhỏ ở BE vẫn không cải thiện đc perfomance thì nên chia nhỏ ở FE (vẫn sử dụng promise all, số record mỗi lần call api cần tự tính toán). khi đó FE sẽ không còn bị timeout
Share
Answered Aug 3rd, 2023 2:57 a.m.
+1

Những tác vụ nặng thì thường nó chạy ngầm kiểu schedules hay message queue.

Share
Viblo
Let's register a Viblo Account to get more interesting posts.