2012-05-07 29 views
14

Các yêu cầu của dự án là kỳ quặc cho điều này, nhưng tôi đang tìm kiếm một số thông tin chi tiết ...Xử lý một mảng lớn (12K + hàng) trong JavaScript

Tôi có tệp CSV với khoảng 12.000 hàng dữ liệu, khoảng 12-15 cột. Tôi đang chuyển đổi nó thành một mảng JSON và tải nó qua JSONP (phải chạy phía máy khách). Phải mất nhiều giây để thực hiện bất kỳ loại truy vấn nào trên tập dữ liệu để trả về một tập dữ liệu nhỏ hơn, được lọc. Tôi hiện đang sử dụng JLINQ để lọc, nhưng về bản chất tôi chỉ lặp qua mảng và trả về một tập nhỏ hơn dựa trên các điều kiện.

Webdb hoặc indexeddb có cho phép tôi thực hiện việc lọc này nhanh hơn đáng kể không? Bất kỳ hướng dẫn/bài viết nào ở đó mà bạn biết về điều đó giải quyết vấn đề cụ thể này?

+0

Để cung cấp cho bạn bất kỳ chi tiết cụ thể hữu ích nào, chúng tôi sẽ phải xem định dạng JSON bạn có dữ liệu và truy vấn/bộ lọc nào bạn đang cố gắng chạy. Kết hợp giữa định dạng dữ liệu (hoặc chỉ mục) và hoạt động lọc/truy vấn mong muốn là những gì mang lại cho bạn tốc độ. – jfriend00

+0

Tôi không phải là familer với webdb, nhưng sql phía máy khách có thể giúp đỡ. Cuối cùng, mặc dù, bạn đang ở lòng thương xót của động cơ của trình duyệt. –

Trả lời

11

http://square.github.com/crossfilter/

Crossfilter là một Thư viện JavaScript để khám phá các bộ dữ liệu đa biến lớn trong trình duyệt. Crossfilter hỗ trợ cực kỳ nhanh (< 30ms) tương tác với tầm phối hợp, ngay cả với các tập dữ liệu chứa một triệu hoặc hồ sơ thêm ...

+1

Đây là một thư viện tuyệt vời mà tôi vừa tìm thấy, và rõ ràng là câu trả lời đúng cho vấn đề của OP. –

3

Điều này nhắc tôi về một bài viết mà John Resig đã viết về tra cứu từ điển (từ điển thực, không phải là cấu trúc lập trình).

http://ejohn.org/blog/dictionary-lookups-in-javascript/

Ông bắt đầu với việc triển khai phía máy chủ, và sau đó hoạt động trên một giải pháp phía khách hàng. Nó sẽ cho bạn một số ý tưởng cho cách để cải thiện những gì bạn đang làm ngay bây giờ:

  • Caching
  • Local Storage
  • cân nhắc Memory
+0

Không chính xác táo-to-táo, nhưng tôi hy vọng nó sẽ cung cấp cho bạn một số ý tưởng. –

3

Nếu bạn cần tải toàn bộ một đối tượng dữ liệu vào bộ nhớ trước khi bạn áp dụng một số thay đổi trên đó , Tôi sẽ để IndexedDB và WebSQL ra khỏi hỗn hợp khi họ thường thêm vào sự phức tạp và giảm hiệu suất của ứng dụng.

Đối với loại lọc này, một thư viện như Crossfilter sẽ đi một chặng đường dài.

Trường hợp IndexedDB và WebSQL có thể đi vào hoạt động về lọc là khi bạn không cần tải hoặc không muốn tải toàn bộ tập dữ liệu vào bộ nhớ. Các cơ sở dữ liệu này được sử dụng tốt nhất cho khả năng của họ để lập chỉ mục các hàng (WebSQL) và các thuộc tính (IndexedDB).

Với trong cơ sở dữ liệu trình duyệt, bạn có thể truyền dữ liệu vào cơ sở dữ liệu một bản ghi tại một thời điểm và sau đó di chuyển qua từng bản ghi, một bản ghi tại một thời điểm. Lợi ích ở đây để lọc là điều này có nghĩa là bạn có thể để dữ liệu của mình trên "đĩa" (.leveldb trong cơ sở dữ liệu của Chrome và .sqlite cho FF) và lọc ra các bản ghi không cần thiết dưới dạng bước lọc hoặc bộ lọc trước.

Các vấn đề liên quan