Chào mọi người, mình đang làm 1 app bằng Flask và React JS. Mình đang gặp vấn đề là request mất quá nhiều thời gian để phản hồi (gần 1 phút lận). Reponse này 20.4MB. Khó khăn là mình không được dùng phân trang nữa nên lên đây xin được nhờ mọi người chỉ giáo.
Mình xin chân thành cảm ơn.
Update:
Q: Tại sao có trường hợp ngớ ngẩn này ?
A: Do ban đầu mình không nghĩ là có quá nhiều dữ liệu như vậy nên design đã ‘tạch’. Tới giờ khi deploy lên product thì mình mới thấy mình sai từ đầu. Đây là bài học đắt giá của mình phân tích quá kém.
Q: Cái quái gì mà tận 20MB, rồi có khi nào lớn hơn không vậy ?
A: Nôm na là như tụi mình đang làm 1 app giống như quản lý nhà sách chẳng hạn. Người dùng họ muốn là hiển thị dạng cây, mà thốn cái là họ muốn show lên hết như thế này.
|-Nhà xuất bản
|--Loại sách
|----Tác giả
|------Sách
Vâng, vấn đề chính là ở đây, hiện tại có hơn 100 nhà xuất bản, mỗi nhà xuất bản có nhiều loại sách, mà mỗi loại sách thì có nhiều tác giả và tương sự mỗi ông tác giả ôm cả đống sách. Đầu tiên mình làm là khi nhấp vô nhà xuất bản nào đó, nó sẽ call API để load các loại sách đó và tương tự với các level khác. ̶N̶̶h̶̶ư̶̶n̶̶g̶ ̶k̶̶h̶̶á̶̶c̶̶h̶ ̶h̶̶à̶̶n̶̶g̶ ̶c̶̶h̶̶ả̶ ̶h̶̶i̶̶ể̶̶u̶ ̶s̶̶a̶̶o̶ ̶h̶̶ọ̶ ̶k̶̶h̶̶ô̶̶n̶̶g̶ ̶c̶̶h̶̶ị̶̶u̶ ̶h̶̶ọ̶ ̶m̶̶u̶̶ố̶̶n̶ ̶s̶̶h̶̶o̶̶w̶ ̶l̶̶ê̶̶n̶ ̶h̶̶ế̶̶t̶ ̶m̶̶ớ̶̶i̶ ̶c̶̶h̶̶ị̶̶u̶ Do mỗi lần click vô nó call API load rõ lâu, người dùng không thích như vậy.
Mình nói là mình “đã tối ưu hóa json hết cỡ” là vì mình đã bỏ toàn bộ các trường không cần thiết rồi nhưng nó vẫn bự. Hiện tại thì ứng dụng chạy cũng ổn rồi, nhưng mà bị cái thời gian load trang này thốn quá, đầu tiên nó load cả mấy phút, ngồi cố lắm mới được như thế này, nhưng vẫn chưa được ngon lắm. Hiện tại mình đang muốn khách hàng có cái dùng trước, vẫn còn 1 chút thời gian nên mình muốn tối ưu hóa thêm phần này.
Q: Rồi thế sao không phân trang đi cho khỏe, chi mà cực vậy ?
A: Căn bản là mình không có được trực tiếp làm database, chỉ được dùng API của bên nào đó thiết kế trước thôi để hành sự thôi, mà mỗi lần nó query cũng tốn khá khá thời gian. Ví dụ khách hàng họ muốn thêm cái cuốn sách nào đó, dùng API gọi xem đã có cuốn sách đó chưa nó cũng tốn khá nhiều thời gian nên khách hàng không thích lắm, họ muốn “kích là chạy”, nên mình đang dùng giải pháp là load lên hết rồi store vào trong redux, cần dùng gì lôi ra dùng nên không có phân trang được. Mình đang tính tới việc là dùng 1 database phụ trợ như sql lite, cho nó load thông tin vô sql lite rồi mình thao tác trên đó nhưng thời gian còn lại hơi ít chưa kịp triển khai cho đợt này.
Q: App vớ app vẩn, thiết kế vậy thì nghỉ chơi.
A: Yeah, mình nghe câu này nhiều rồi, nhưng lỡ rồi biết làm sao đây.