(angularjs) - Làm sao để gán source (số lượng bản ghi lớn) cho auto-complete ngay khi load control không bị time out và tìm kiếm dữ liệu nhanh
Mình đang sử dụng tags-input kết hợp với auto-complete để load và search dữ liệu. Hiện tại mình đang load toàn bộ dữ liệu từ serve gán cho auto-complete (khoảng 100 000 bản ghi) load lên khá lâu mất tầm 5s. Mình muốn load tầm 10 bản ghi và sau khi search thì sử dụng phương pháp load more. Ai đã từng làm thì hỗ trợ mình với. Thanks.
2 CÂU TRẢ LỜI
Nếu dữ liệu của bạn ít thay đổi, bạn có thể cache dữ liệu đó lại, lần sau có thể chỉ mất 1 2s hoặc thấp hơn để load 10k bản ghi. Nhưng cũng tùy theo trường hợp, các ứng dụng như bán hàng thì mình sẽ load lên hết như vậy, còn các ứng dụng văn phòng khác thì dùng ajax search theo key người dùng nhập. Chúc bạn tìm được một giải pháp hữu hiệu nhất.
Thanks you.
Mình chưa làm bằng AngualarJS nên mình chỉ đưa ra cách giải quyết theo suy nghĩ hạn hẹp của mình thôi. Để giải quyết vấn đề của bạn thì theo mình nghĩ bạn cần xử lý cả ở Server và Client.
- Tại Server, bạn giới hạn dữ liệu trả về theo số lượng và theo page. Khi Client gửi request lên thì cần gửi lên page cần lấy dữ liệu, số bản ghi trả về có thể bạn đặt cứng hoặc truyền vào request tùy theo bạn.
- Tại Client thì bạn cần một biến
data
để lưu các kết trên server trả về (bạn render kết quả theo biếndata
), mỗi khi lấy thêm dữ liệu trả về từ server thì bạn push vào biếndata
hiện tại. Và để xử lý vấn đề khi nào lấy thêm dữ liệu thì có tạm thời mình chỉ nghĩ được 2 phương án đơn giản:- Bạn đặt một button ở cuối danh sách kết quả, khi nào người dùng nhấn vào đó thì bạn sẽ gửi request lấy dữ liệu ở trang tiếp theo và push kết quả trả về vào biến
data
. - Hoặc bạn có thể dùng sự kiện khi người dùng scroll đến cuối danh sách thì tự động gửi request lấy dữ liệu ở trang tiếp theo và push vào biến
data
. Khi gửi request lấy dữ liệu thì bạn nên sử dụng các hiệu ứng loading để tạo độ thân thiện.
- Bạn đặt một button ở cuối danh sách kết quả, khi nào người dùng nhấn vào đó thì bạn sẽ gửi request lấy dữ liệu ở trang tiếp theo và push kết quả trả về vào biến
Thanks!
Mình nghĩ bên server nên giới hạn kết quả trả về dựa trên keyword của tags-input gửi lên chứ không phải lấy hết dữ liệu về rồi mới xử lý ở client
Thanks!
@KmasterYC Nếu như có hàng trăm hoặc hàng ngàn cùng input như vậy có phải chết server ko. Cách này không ổn.
@chuongpdh
Nếu không lấy hết dữ liệu về client mà nhiều user cùng request liên tục lên server có thể sẽ bị chết.