Yêu cầu thg 10 3, 2017 8:28 SA 172 2 2
  • 172 2 2
0

(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

Chia sẻ
  • 172 2 2

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.

thg 10 4, 2017 7:17 SA

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 😃

Avatar Hà Nhung @hathinhung92
thg 10 6, 2017 8:39 SA

Thanks!

thg 10 13, 2017 7:52 SA

@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.

thg 10 13, 2017 7:59 SA

@chuongpdh

  • Đối với dữ liệu động thì mình nghĩ cách đó là hợp lý. Còn chết hay không thì phụ thuộc mình tối ưu query, cache, scale như thế nào.
  • Còn với dữ liệu tĩnh hoặc rất ít khi thay đổi (categories, locations) thì mình có lưu data ở dưới client cũng là 1 giải pháp để giảm tải cho server 😃
Avatar Hà Nhung @hathinhung92
thg 10 13, 2017 9:33 SA

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.

2 CÂU TRẢ LỜI


Đã trả lời thg 10 6, 2017 7:51 SA
Đã được chấp nhận
0

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.

Chia sẻ
Avatar Hà Nhung @hathinhung92
thg 10 6, 2017 8:38 SA

Thanks you.

Đã trả lời thg 10 4, 2017 2:35 SA
+1

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ến data), mỗi khi lấy thêm dữ liệu trả về từ server thì bạn push vào biến data 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.
Chia sẻ
Avatar Hà Nhung @hathinhung92
thg 10 6, 2017 8:38 SA

Thanks!

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí