2013-05-04 17 views
6

Có cách nào để tách một số loại mã trong Dart không? Tôi muốn trì hoãn việc tải một số mã hiếm khi được sử dụng để đẩy nhanh quá trình tải xuống mã ban đầu. Trong Javascript, tôi sẽ tiêm một thẻ <script> mới, trong GWT, tôi chỉ cần gọi GWT.runAsync(). Có điều gì đó tương tự trong Dart không?Tách mã bằng Dart

Theo this link, <script> tiêm sẽ không hoạt động ("Mỗi trang HTML có thể có nhiều nhất một thẻ tập lệnh Dart", "Chúng tôi không hỗ trợ tự động chèn thẻ tải mã Dart".). Tôi cũng tìm thấy this fixed issue tuyên bố: "Trường hợp ban đầu [trường hợp sử dụng] được hoãn tải, để tránh tải xuống lớn khi chỉ cần một số mã sau hoặc có thể chỉ cần trong một số trường hợp. Chúng tôi hiện có cơ chế cho việc này". Thật không may, tôi không thể tìm thấy bất cứ điều gì về cách thực hiện điều này. Có ai biết gì về điều này?

Trả lời

7

Cập nhật tháng 9 năm 2014:this has been fixed!

Dart nay dễ dàng hỗ trợ tải chậm với import... deferred cú pháp đặc biệt. Ví dụ:

import analytics.dart deferred as analytics 
void main(){ 
    analytics.loadLibrary.then((_) { // future 
     // code ready 
     enableAnalyticsControl() 
    }); 
} 

Đây là an official tutorial về cách sử dụng tải chậm.


Tôi sợ những gì bạn đang cố gắng làm vẫn không thể (giả sử bạn không sử dụng dart2js).

Xem this issue.

Như Kasper đã nói trong phần bình luận 3, cho đến nay điều này đã được thảo luận về tính năng triển khai mà bạn sẽ nhận được với dart2dart. Các máy ảo liên quan đến việc hỗ trợ kết thúc này bằng việc cho phép truy cập mã dart2dart được tạo ra để tải các nguồn lazily qua một cuộc gọi thư viện. API thư viện này vẫn cần được chỉ định.

Nếu bạn sử dụng dart2js việc này có thể được thực hiện. Here is a blog post on how to do this.

const lazy = const DeferredLibrary('reverser', uri: './part.js'); 

Mà sau đó sẽ cho phép bạn gọi lazy.load().then((_) { ...

+0

Tôi đang sử dụng dart2js. Nhưng tôi có hiểu điều đó đúng không: Tại thời điểm này, chỉ có thể có một điểm phân tách? "[...] dart2js phát ra tối đa một tệp JavaScript khác" – MarioP

+0

Nó rất mới và vẫn đang hoạt động. Tôi xin lỗi nhưng tôi không biết. –

+0

Được rồi, ít nhất bây giờ tôi biết những gì cần tìm. Cảm ơn nhiều. – MarioP