2013-05-04 3 views
6

Gibt es eine Möglichkeit zu irgendeiner Art von Code-Aufspaltung in Dart? Ich möchte das Laden von selten verwendetem Code verzögern, um den ursprünglichen Code-Download zu beschleunigen. In Javascript würde ich ein neues <script> Tag injizieren, in GWT würde ich einfach GWT.runAsync() anrufen. Gibt es in Dart etwas Ähnliches?Code-Aufspaltung in Dart

Nach this link, <script> Injection funktioniert nicht ("Jede HTML-Seite kann maximal ein Dart-Skript-Tag haben", "Wir unterstützen kein dynamisches Einfügen eines Tags, das Dart-Code lädt."). Ich fand auch this fixed issue behauptet: "Die erste [Anwendungsfall] ist verzögertes Laden, um massive Downloads zu vermeiden, wenn Code erst später benötigt wird, oder vielleicht nur in einigen Situationen benötigt wird. Wir haben jetzt einen Mechanismus dafür." Leider konnte ich nichts finden, um dies zu implementieren. Weiß jemand etwas darüber?

Antwort

7

-Update September 2014:this has been fixed!

Dart unterstützt nun leicht verzögertes Laden mit spezieller import... deferred Syntax. Zum Beispiel:

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

Hier an official tutorial über verzögertes Laden verwenden.


ich Angst habe, was Sie versuchen nicht möglich zu tun, ist nach wie vor (vorausgesetzt, Sie sind nicht dart2js verwenden, das ist).

Siehe this issue.

Wie Kasper in Kommentar 3 gesagt hat, wurde bisher eine Deployment-Funktion besprochen, die Sie mit dart2dart erhalten. Die Beteiligung der VMs an der Unterstützung dieses Vorgangs endet damit, dass der von dart2dart generierte Code durch einen Bibliotheksaufruf langsam auf die Ladequellen zugreifen kann. Diese Bibliotheks-API muss jedoch noch angegeben werden.

Wenn Sie sind mit dart2js dies getan werden kann. Here is a blog post on how to do this.

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

die dann rufen Sie lassen lazy.load().then((_) { ...

+0

ich dart2js verwende. Aber habe ich das richtig verstanden: Im Moment kann es nur einen Splitpunkt geben? "[...] dart2js sendet höchstens eine andere JavaScript-Datei" – MarioP

+0

Es ist sehr neu und alle arbeiten noch. Es tut mir leid, aber ich weiß es nicht. –

+0

Okay, zumindest weiß ich jetzt, wonach ich suchen soll. Vielen Dank. – MarioP