Chúng tôi đang xây dựng một ứng dụng web không trival bằng cách sử dụng Backbone, RequireJS và Handlebars, và tốt, tôi chỉ tò mò. Tại thời điểm này, mỗi mô hình của chúng tôi sorta trông như thế này:Làm thế nào để đạt được tải chậm với RequireJS?
define(['Backbone', 'js/thing/a', 'js/thing/b', 'js/lib/bob'], function(a, b, bob) {
return Backbone.Router.extend({
// stuff here
});
});
nơi điều/A, điều/b cả hai đều có sự phụ thuộc của họ, ví dụ trên tay lái mẫu, vv Điều gì sẽ xảy ra bây giờ là ở chính của tôi .js, tất cả các bộ định tuyến 'cấp cao nhất' được tải và khởi tạo; mỗi bộ định tuyến cấp cao nhất có một tập hợp các phụ thuộc (các mô hình, các khung nhìn, vv) mà mỗi bộ có các phụ thuộc riêng của chúng (các khuôn mẫu, các trình trợ giúp, các utils, vv). Về cơ bản, một cấu trúc cây lớn.
Sự cố trong trường hợp này là toàn bộ cây này được giải quyết và được tải khi tải trang. Tôi không nhớ rằng mỗi sé, khi chúng tôi sẽ chạy nó thông qua trình tối ưu hóa cuối cùng và kết thúc với một tập tin lớn duy nhất (giảm RequireJS về cơ bản một khuôn khổ mô đun hóa). Tuy nhiên, tôi tò mò liệu bạn có thể tải các nội dung như lượt xem và mẫu 'theo yêu cầu' hay không.
Có là "CommonJS đơn giản gói" giải thích here, vì vậy tôi cố gắng rằng:
define(function(require) {
Backbone = require('Backbone');
return Backbone.Router.extend({
doStuff: function() {
var MyView = require('js/myView');
new MyView().render();
}
});
});
Tuy nhiên, nhìn vào thanh tra mạng của Chrome, có vẻ như RequireJS - bằng cách nào đó, ngay cả khi không kích hoạt các tuyến đường mà gây ra sự Trình xử lý doStuff - vẫn tải phụ thuộc myView
. Câu hỏi:
- Điều này thực sự có thể? Có ma thuật đen trong RequireJS tìm kiếm các cuộc gọi đến
require()
mà không thực sự kích hoạt tuyến đườngdoStuff
? - Đây có phải là cách lý thuyết chính xác về việc 'theo yêu cầu', tải các mô-đun và tài nguyên RequireJS không?
- Trình tối ưu hóa r.js vẫn hoạt động như được quảng cáo nếu bạn sử dụng ký pháp này?