2012-10-16 44 views
13

Tôi đang xây dựng một công cụ biểu đồ đơn giản. Khi người dùng chọn nguồn dữ liệu và loại biểu đồ, cả dữ liệu và tập lệnh cho biểu đồ cụ thể (.js) sẽ được tải và sau đó mã sẽ hiển thị biểu đồ.Thực hiện nhẹ các lời hứa

Hiện nay tôi sử dụng trình tự sau đây:

  1. tải kịch bản biểu đồ
  2. tải dữ liệu
  3. Render bảng xếp hạng

Để cải thiện hiệu suất, tôi muốn thực hiện lời hứa và tải tập lệnh và dữ liệu song song. Một thư viện như jQuery là quá lớn đối với nhu cầu của tôi (điểm của câu hỏi không phải là để tranh luận về điều này), có những giải pháp nhẹ hơn không? Có thể là thư viện 1-2 kb hoặc hướng dẫn? Một lần nữa, đây là một triển khai rất cơ bản chỉ với hai hành động song song.

[Cập nhật] Tôi đã bỏ phiếu cho tất cả các câu trả lời vì tất cả chúng đều trông tuyệt vời. Tôi sẽ báo cáo lại sau khi tôi thử nghiệm thêm.

+0

Bạn có muốn biết chỉ và cụ thể về lời hứa không? Hay bạn muốn biết bất kỳ phương pháp nào hơn là có thể cải thiện tính song song? Nếu sau này xin vui lòng làm rõ các từ ngữ. – hippietrail

Trả lời

4

Tôi xây dựng một cái gì đó như thế này một thời gian trở lại mà tôi gọi là "khi-sau đó". Tôi muốn một cái gì đó mà sẽ nói, "Tải tất cả những điều này, sau đó làm một cái gì đó khi họ đang thực hiện".

https://github.com/geuis/when-then

Tôi đã lấy cảm hứng từ ý tưởng hứa hẹn, nhưng muốn một chút gì đó đơn giản hơn cho các nhiệm vụ đơn giản.

+0

thx. Tôi đã kiểm tra mã của bạn nhưng không thấy cách kiểm tra thời điểm một tập lệnh tải xong trên trang (xem bước 1 trong trình tự của tôi). – Christophe

+0

Bạn không cần phải kiểm tra khi sử dụng khi đó. Về cơ bản, thiết lập của nó nên tất cả những gì bạn phải làm là khi (function1, function2, function3) .then (function() {// func1-3 được thực hiện ở đây}); Xem các ví dụ trên trang. =) – Geuis

+0

Xin lỗi, tôi vẫn không hiểu. Tôi cần tải các chức năng, không phải để thực thi chúng. Ví dụ: khi (jQuery được nạp và data.json được nạp) thì (chạy mã phụ thuộc vào jQuery và sử dụng data.json). – Christophe

0

Hãy thử async.

Có phương pháp để thực hiện các phép toán song song và theo chuỗi. Ban đầu nó được thiết kế để chạy trong nút, nhưng bây giờ cũng hoạt động trong trình duyệt.

CHỈNH SỬA THÊM: Họ không có phiên bản được rút gọn, vì vậy enchilada đầy đủ là ~ 42kb.

+2

Async không thực hiện lời hứa nào cả. Nó sử dụng một mô hình không liên quan được gọi là "tiếp tục đi qua". – hippietrail

+1

Đúng, tuy nhiên, async không cho phép thực hiện "song song" các chức năng, đó là những gì OP muốn (hứa hẹn chỉ là một cách để đạt được điều này). – Alan

+1

@hippietrail mea culpa, tôi thực sự có nghĩa là tải đồng thời. Tương lai/trì hoãn/hứa hẹn là mô hình phổ biến nhất và tôi thậm chí không nghĩ rằng có thể có những cách khác. – Christophe

3

Kiểm tra Deferred nó có mô đun xây dựng và bạn có thể quyết định chỉ lấy lõi và không được lớn hơn 1kb.

Browser install instructions giải thích làm thế nào để tạo nhóm như vậy trong vài bước đơn giản

13

tôi đề nghị sử dụng một thực hiện các Promises/A specification, mà đang trở thành cách làm tiêu chuẩn của những lời hứa trong JavaScript. Lời hứa hoạt động tốt hơn khi mọi người sử dụng cùng một hương vị, vì vậy, mọi người đều quan tâm đến việc sử dụng các triển khai tương thích.

Q có lẽ là triển khai phổ biến nhất và đầy đủ tính năng (nó cũng sẽ thích ứng với jQuery và các lời hứa không tương thích khác), trong khi whenrsvp được cho là có trọng lượng nhẹ hơn.

+2

Điều này có ý nghĩa, nhưng tôi thấy đặc tả quá mơ hồ để thực sự hữu ích. Ví dụ, cho dù jQuery tuân theo nó là không rõ ràng. Ngoài ra, nó không thực sự cho biết cách đối tượng trả về (trạng thái và kết quả) được cấu trúc, vì vậy trong thực tế bạn thấy các hương vị khác nhau. – Christophe

+1

Bây giờ chúng ta có một dự thảo tiêu chuẩn, và rõ ràng nó được dựa trên các đặc điểm hứa hẹn/A +. – Christophe

0

Tôi đã tạo một thư viện lời hứa rất nhẹ. Nó không phải là một tuân thủ, nhưng tôi không muốn một cái gì đó 2.000 dòng dài.

Đó là một nhánh của lời hứa, nhưng tôi đã thực hiện một số bổ sung tốt đẹp.

Đây là liên kết đến repo. https://github.com/taylorhakes/promise-light

7

Muốn ném vào 2 ¢ của tôi vì đã có sự phát triển tại đây.Promises have arrived natively in JavaScript và sẽ được triển khai cho FF 30 và Chrome 33 (theo this table).

Mặc dù hầu như không đáng nhắc đến ở một nơi thường bị tràn ngập "nhưng nó có hỗ trợ IE6 không?", Có một vùng đệm được nén gọn và nén 2kb here đó là "bản remapping API cơ bản là rsvp.js".

Vì jQuery hứa hẹn aren't really promises và tôi đồng ý với this guy rằng cú pháp lời hứa không nhất quán giữa các thư viện, quan điểm của tôi là lời hứa gốc đã được thực hiện ngay cả khi trình duyệt của người dùng của bạn có thể chưa hỗ trợ chúng.


Edit: Sau khi sử dụng Promises trong bối cảnh góc và Firefox addon-SDK, cả hai đều là rất giống với Q, tôi thích rằng cú pháp và đã đọc rằng nó vẫn là nhanh hơn so với việc thực hiện bản xứ.

1

Nếu bạn muốn nó thực sự nhẹ, Bạn nên thử sb-promise, Đó là theo giấy phép MIT. Nó chỉ là một vài kbs và là API tương thích với Promises bản địa.

function myFunction(){ 
    return new Promise(function(resolve,reject){ 
    resolve({some:"data"}); 
    } 
} 
myFunction().then(function(result){ 
    console.log(result); // {some:"data"} 
}); 
Các vấn đề liên quan