tl; dr
- Nếu bạn biết bạn sẽ không cần sử dụng dữ liệu
count
.
- Nếu bạn biết bạn sẽ sử dụng hoặc đã sử dụng dữ liệu sử dụng
length
.
- Nếu bạn không biết bạn đang làm gì, hãy sử dụng
size
...
đếm
Giải quyết gửi một Select count(*)...
truy vấn đến DB. Cách để đi nếu bạn không cần dữ liệu, nhưng chỉ cần đếm.
Ví dụ: số lượng tin nhắn mới, tổng số phần tử khi chỉ một trang sẽ được hiển thị, v.v.
chiều dài
Tải dữ liệu cần thiết, tức là truy vấn theo yêu cầu, và sau đó chỉ cần đếm nó. Cách để đi nếu bạn đang sử dụng dữ liệu.
Ví dụ: Tóm tắt về bảng được tải đầy đủ, tiêu đề của dữ liệu được hiển thị, v.v.
kích thước
Nó kiểm tra nếu dữ liệu đã được tải (tức là đã có trong đường ray) nếu vậy, sau đó chỉ cần đếm nó, nếu không nó sẽ đếm. (cộng với những cạm bẫy, đã được đề cập trong các mục khác).
def size
loaded? ? @records.length : count(:all)
end
Có vấn đề gì vậy?
Rằng bạn có thể nhấn DB hai lần nếu bạn không thực hiện theo đúng thứ tự (ví dụ: nếu bạn kết xuất số phần tử trong một bảng trên đầu bảng được kết xuất, sẽ có hiệu quả 2 cuộc gọi được gửi đến DB).
size
thích nghi với tình huống nào, thì cần gì ở đólength
vàcount
tất cả?