01/10/2018, 14:25

Ý tưởng cải thiện performance chức năng save khi chỉnh sửa nhiều dòng

Như giao diện bên dưới. Em muốn lúc nhấn nút save chỉ save những dòng mà có chỉnh sửa(thay đổi checkbox)
Hiện tại em đang làm là nhấn save là sẽ lưu toàn bộ dữ liệu. Performance khá kém nếu có nhiều dữ liệu.
Bác nào có ý tưởng gợi ý giúp - làm sao chỉ save những dòng có chỉnh sửa( chỉ cần ý tưởng).

HK boy viết 16:39 ngày 01/10/2018

Lưu lại trạng thái của tất cả các checkbox của từng dòng. Tạo 1 biến phụ chứa trạng thái trước khi ấn nút save, mỗi lần thay đổi gì thì ta tiến hành thay đổi trên biến phụ đó. Nếu có sự thay đổi nào so với trạng thái cũ thì save lại dòng đó.

local_state = ... // trạng thái trước khi thay đổi
tmp = local_state // biến phụ
change(tmp) // đưa tất cả những thay đổi vào biến tmp
check()

Có 2 cách lưu trạng thái:

  • Sử dụng mảng: độ phức tạp khi kiểm tra là O(độ dài mảng), tốn rất nhiều thời gian kiểm tra.
  • Sử dụng bitmask: với sự tiện lợi (bit = 1 tức là checkbox được chọn, = 0 tức là checkbox trống), mỗi lần có sự thay đổi nào cũng chỉ cần 1 lệnh đơn giản, kiểm tra sự khác nhau cũng cực kì đơn giản, độ phức tạp chỉ là O(1).
NhatTa viết 16:28 ngày 01/10/2018

để kiểm tra sự thay đổi em phải tạo sự kiện check thay đổi cho mỗi checkbox luôn à bác. Hiện đang lưu mỗi dòng 1 id riêng dạng tăng dần.

HK boy viết 16:36 ngày 01/10/2018

để kiểm tra sự thay đổi em phải tạo sự kiện check thay đổi cho mỗi checkbox luôn à bác

Yes. Yes. Yes. Yes. Yes.

NhatTa viết 16:41 ngày 01/10/2018

Em thử thấy phát hiện ra một điểm là muốn so sánh thay đổi dữ liệu thay đổi so với ban đầu. vậy mình phải lưu hết dữ liệu ban đầu ra mảng lại à bác.poor. @@

HK boy viết 16:29 ngày 01/10/2018

Mình đã nói rồi, không cần dùng mảng, có thể dùng bitmask bằng cách tạo 1 số nguyên (state) rồi thay đổi trên đó mà =))

Tao Không Ngu. viết 16:39 ngày 01/10/2018

Hi NhatTa.

  1. Bạn cần xác định performance kém ở đâu thì mới có giải pháp được.
    Theo mình thì vấn đề không nằm ở đọc ghi file. VD thông tin cho 1 user : Tên 29 ký tự + quyền 1 ký tự vậy là 30 byte. có 1000 người + thêm header v.v.v… thì bạn có 1 file 30 kb nhỏ hơn kích thước cái ảnh bạn up lên. Trong trường hợp bạn có 10000 người thì bạn chia nó ra 10 file mỗi file 1000 người và lúc đó vấn đề là giao diện của bạn có load được 10000 người hay không thôi.

P/S Thường thì dùng CSDL hoặc giải pháp cache, buffer. Nhưng tốt nhất là test trước xem nghẽn ở đâu rồi nói chuyện tiếp.

NhatTa viết 16:35 ngày 01/10/2018

mình dùng mongodb. ví dụ có 1000 dòng. loop 1000 lần lưu toàn bộ mỗi dòng xuống db.

Tính ra xử lý khá nhiều lúc save bên server.

Nếu mình chỉ edit có 1 2 dòng mà lưu toàn bộ thì không ổn

viết 16:28 ngày 01/10/2018

vậy xử lý ở client bằng js ấy, lúc lấy dữ liệu permission theo trang về thì trả về 1 cái list, lúc save thì so sánh bảng hiện tại với cái list ban đầu, rồi chỉ submit những user nào bị chỉnh sửa thôi. Mỗi trang chỉ lấy khoảng 10-20 user là được.

hoặc làm cái UI khác, chỉ search đúng tên thì mới set permission được, khỏi cần trả về list các user làm gì cho khổ

Tao Không Ngu. viết 16:31 ngày 01/10/2018

Hi NhatTa.
Vậy thì dùng bitmask là hợp lý rồi.

en.wikipedia.org

File system permissions

Most file systems have methods to assign permissions or access rights to specific users and groups of users. These permissions control the ability of the users to view, change, navigate, and execute the contents of the file system. Two types of permissions are very widely used: traditional Unix permissions date back many decades to the earliest days of Unix. They are universally available on all Unix and Linux derived platforms. Access Control Lists (ACLs) are more recent in origin and are uni...

NhatTa viết 16:39 ngày 01/10/2018

Cảm ơn các bác đã giúp đỡ nhiệt tình. =))

Bài liên quan
0