Chọn một trình tải Asynch JavaScript [đã đóng]


9

Tôi đã xem xét các trình tải tài nguyên không đồng bộ khác nhau và tôi không chắc nên sử dụng cái nào. Ở nơi tôi làm việc, chúng tôi có các nỗ lực nhóm khác nhau mà các mô-đun lớp có thể sử dụng các phiên bản khác nhau của jQuery (v.v.). Như vậy, phụ thuộc lồng nhau cũng có thể khác nhau. Tôi không có quyền kiểm soát này, vì vậy điều này có nghĩa là tôi cần tải động các tài nguyên có thể sử dụng các phiên bản thay thế của cùng một thư viện.

Như vậy, đây là những yêu cầu của tôi:

  1. Tải các tệp tài nguyên JavaScript và CSS không đồng bộ.
  2. Quản lý thứ tự phụ thuộc và phụ thuộc lồng nhau giữa các phiên bản.
  3. Phát hiện nếu một tài nguyên đã được tải.
  4. Phải cho phép tải tên miền chéo (CDN)
  5. (tùy chọn) Cho phép chúng tôi dỡ tài nguyên.

Tôi đã nhìn vào:

Tôi có thể tự giả mạo các yêu cầu này bằng cách tải các phiên bản vào các biến được đặt tên chính xác và sử dụng một mảng để theo dõi những gì đã được tải ... nhưng (hy vọng) ai đó đã phát minh ra điều này.

Vì vậy, câu hỏi của tôi là:

  • Những cái nào bạn sử dụng? Và tại sao?
  • Có những người khác mà tôi đáp ứng đầy đủ yêu cầu của tôi?
  • Mà bạn thấy hùng hồn nhất và dễ làm việc nhất? Và tại sao?

CẬP NHẬT:
Đối với những người quan tâm, tôi đã thử tất cả các thư viện AMD ở trên (và hơn thế nữa). Cuối cùng, tôi đã đi với RequireJS . Nó chỉ sạch hơn và dễ dàng hơn ... và tôi rất vui khi được sử dụng nó.


Đối với JavaScript, tôi không nghĩ # 5 thậm chí có thể. Về mặt lý thuyết có thể có khả năng cho CSS, nhưng tôi không chắc có trình duyệt nào hỗ trợ điều đó không.
Mike Baranczak

@Mike Cảm ơn bạn đã bình luận! Nếu trình tải asynch nạp theo dõi & tài nguyên dân số bằng cách sử dụng các biến đối tượng ... thì hoàn toàn có thể.
Tù nhân ZERO

Đúng, nhưng hàm tạo MỚI sẽ nhân đôi đối tượng, vì vậy nếu bạn tạo một cái mới của một cái gì đó bạn đã gọi, nó sẽ vẫn tồn tại ở đó. Tại sao bạn lại dỡ nó xuống?
Ẩn danh

@ user1525 Cảm ơn bạn đã bình luận! Dỡ tài nguyên tiết kiệm bộ nhớ. Tôi sẽ chỉnh sửa câu hỏi của tôi ở trên với một số suy nghĩ về nhận xét của bạn (trong vài phút). Cảm ơn một lần nữa!
Tù nhân ZERO

jQuery đã có một getScriptchức năng để tiêm script.
zzzzBov

Câu trả lời:


7

Tôi đã sử dụng RequireJS cho các dự án nghiêm túc và tôi thích nó, nhưng nó không thực sự có nghĩa là một trình tải không đồng bộ. Nó thực sự có nghĩa là một hệ thống mô-đun. Tải không đồng bộ được cung cấp để phục vụ cho mục tiêu đó. Nó có thể được đẩy để đáp ứng bất kỳ yêu cầu nào của bạn, nhưng các dịch vụ tải của nó được thiết kế để tải các mô-đun, không phải các tệp tùy ý.

Tải các tệp tài nguyên JavaScript và CSS không đồng bộ : Requirejs tải bất kỳ mô-đun nào bạn yêu cầu bằng cách sử dụng tính năng tiêm thẻ script, do đó không đồng bộ.

Quản lý thứ tự phụ thuộc và phụ thuộc lồng nhau giữa các phiên bản : Đây là nơi RequireJS tỏa sáng. Các mô-đun có thể khai báo các phụ thuộc trên các mô-đun khác và thứ tự tải sẽ được ngoại suy từ khai báo phụ thuộc đó. Ngoài ra còn có một plugin thứ tự, có thể buộc thứ tự phụ thuộc.

Phát hiện nếu tài nguyên đã được tải : Requirejs sẽ chỉ tải một mô-đun một lần.

Phải cho phép tải tên miền chéo (CDN) : Điều này là có thể, nhưng yêu cầu một số cấu hình; Bạn có thể đặt một URL cụ thể cho bất kỳ mô-đun nào và điều đó sẽ ghi đè vị trí mặc định, do đó bạn có thể đặt URL đó thành CDN.

RequireJS sẽ phục vụ tốt nhất nếu bạn viết các mô-đun bằng định dạng của nó và ít hiệu quả nhất nếu bạn đang sử dụng nó để tải javascript thô.

Nó cũng cung cấp một quy trình xây dựng sẽ hợp nhất các mô-đun của bạn lại với nhau thành một tệp duy nhất để sản xuất.


3

Về lý thuyết, bạn có thể chỉ cần giữ một danh sách các tập lệnh đã được tải và tạo một hàm tải các tập lệnh chưa được tải.

http://jsfiddle.net/BDG/Dhdu7/2/


2
Hoặc sử dụng Curl / RequireJS họ có tính năng này và nhiều tính năng hơn. Và bạn không cần phải tự duy trì nó;)
Raynos

Bạn đã quên đề cập đến cấu trúc rõ ràng và không liên quan bao gồm.
Ẩn danh

2

Nếu bạn đang xem RequireJS và muốn phụ thuộc vào các tệp CSS, bạn có thể kiểm tra plugin CSSP RequireJS :

CSS với Padding. Dự án này thực hiện một plugin cho dự án RequireJS cho phép các mô-đun liệt kê các tệp CSS dưới dạng phụ thuộc. Điều này cho phép RequireJS đợi cho đến khi các quy tắc kiểu cụ thể được biết là có hiệu lực trước khi phát hành mô-đun JavaScript để được đánh giá. Điều này sẽ hữu ích nếu, ví dụ, nếu mô-đun JavaScript của bạn yêu cầu một số quy tắc CSS nhất định, được xác định trong một tệp riêng biệt, được áp dụng cho DOM trước khi có thể khởi tạo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.