2012-01-11 18 views
8

Ho il seguente codice dardo:Perché i file javascript generati dal dardo sono così enormi?

$ cat helloworld.dart 
main() => print('Hello world!'); 
$ 

Il codice JavaScript generato dal compilatore dardo per il codice di cui sopra è il seguente:

$ cat helloworld.dart.app.js 
function native_ListFactory__new(typeToken, length) { 
    return RTT.setTypeInfo(
     new Array(length), 
     Array.$lookupRTT(RTT.getTypeInfo(typeToken).typeArgs)); 
} 
function native_ListImplementation__indexOperator(index) { 
    return this[index]; 
} 
function native_ListImplementation__indexAssignOperator(index, value) { 
    this[index] = value; 
} 
function native_ListImplementation_get$length() { 
    return this.length; 
} 
function native_ListImplementation__setLength(length) { 
    this.length = length; 
} 
function native_ListImplementation__add(element) { 
    this.push(element); 
} 
function native_BoolImplementation_EQ(other) { 
    return typeof other == 'boolean' && this == other; 
} 
function native_BoolImplementation_toString() { 
    return this.toString(); 
} 

<snapped> 

var static$uninitialized = {}; 
var static$initializing = {}; 
function $inherits(child, parent) { 
    if (child.prototype.__proto__) { 
    child.prototype.__proto__ = parent.prototype; 
    } else { 
    function tmp() {}; 
    tmp.prototype = parent.prototype; 
    child.prototype = new tmp(); 
    child.prototype.constructor = child; 
    } 
} 
isolate$inits.push(function(){ 
    isolate$current.Duration$DartMILLISECONDS_PER_MINUTE$field = static$uninitialized; 
    isolate$current.Duration$DartMILLISECONDS_PER_HOUR$field = static$uninitialized; 
    isolate$current.Duration$DartMILLISECONDS_PER_DAY$field = static$uninitialized; 
    isolate$current.Duration$DartSECONDS_PER_HOUR$field = static$uninitialized; 
    isolate$current.Duration$DartSECONDS_PER_DAY$field = static$uninitialized; 
    isolate$current.Duration$DartMINUTES_PER_DAY$field = static$uninitialized; 
} 
); 
RunEntry(unnamedd9297f$main$member, this.arguments ? (this.arguments.slice ? [].concat(this.arguments.slice()) : this.arguments) : []); 
$ 

E la dimensione di helloworld.dart.app.js è 102k!

Quando correva in modalità ottimizzare, ha generato il seguente javascript - helloworld.dart.js che è di dimensioni 20k

$ cat helloworld.dart.js 
var e;function f(a,b){if(b>=0&&b<a.length)return b;h(i(b))};var j={},k={};function aa(a,b,c){if(b)a.g=function(){return b.call(c)}}function ba(a,b,c,d){function g(b,g,t,m){return a.call(c,d,b,g,t,m)}aa(g,b,c);return g}function l(a,b){if(a.prototype.__proto__)a.prototype.__proto__=b.prototype;else{var c=function(){};c.prototype=b.prototype;a.prototype=new c;a.prototype.constructor=a}}function ca(a,b){return typeof a=="number"&&typeof b=="number"?a+b:a.na(b)}function da(a){a/=4;return a<0?Math.ceil(a):Math.floor(a)} 
function o(a,b){if(a===void 0)return b===void 0;else if(typeof a==typeof b&&typeof a!="object")return a===b;return a.G(b)}function h(a){a&&typeof a=="object"&&Error.captureStackTrace&&Error.captureStackTrace(a);throw a;}function p(){var a=new q;a.f=s("ya",ea);a.va="";a.qa="";a.N=[];h(a)}var u={d:0}; 

<snapped> 

y.push(function(){x.fb=j;x.eb=j;x.gb=j});y.push(function(){x.Ta=j;x.Sa=j;x.Ra=j;x.Wa=j;x.Va=j;x.Ua=j});(function(a,b){if(!A){var c=new ya;oa=c;sa(c,function(){a(b)});Ea();x=c}})(function(){return qb()(1,u,"Hello world!")},this.arguments?this.arguments.slice?[].concat(this.arguments.slice()):this.arguments:[]); 
$ 

Perché il codice javascript che è stato generato da un compilatore dardo così enorme?

Che problema stanno cercando di risolvere generando file javascript così grandi?

laterale Nota: I file javascript erano così enorme, così ha gettato il seguente errore:

Oops! Your question couldn't be submitted because: body is limited to 30000 characters; you entered 140984

+1

Perché Javascript. – Aziz

+4

I compilatori più recenti hanno ridotto drasticamente quelle dimensioni. Un 'Hello World' ora ha 8 righe usando il compilatore Frog. – moraes

risposta

10

Se si desidera ottenere anche un JavaScript migliore, provare il compilatore Frog anziché DartC. La rana è scritta in Dart stessa.

http://turbomanage.wordpress.com/2011/12/09/dart-dev-mode-cometh/

Nota, questo blogpost sopra è un po 'obsolete. È intanto possibile utilizzare il dardo SDK per Frog: http://gsdview.appspot.com/dart-editor-archive-continuous/3058/

Questo post potrebbe anche essere di interesse per voi, Seth mostra come la rana generato JS assomiglia: http://blog.sethladd.com/2011/12/10-lessons-from-porting-javascript-to.html

Ecco come è possibile attivare Rana in Editor attuale: https://groups.google.com/a/dartlang.org/group/misc/msg/5dfe04c69ed0fed3

9

Why is the javascript code which was generated from a dart code by a dart compiler is so huge?

Perché include un runtime Dart.

What problem are they trying to solve by generating such huge javascript files?

Il problema di eseguire codice che non è JavaScript in un browser.

+3

Non include un runtime Dart.JavaScript generato in precedenza includeva molte librerie incorporate, ma i compilatori più recenti fanno del loro meglio per includere solo ciò che è necessario. Il 17k 'Hello World' dal lancio è ora a 8 linee, per esempio. – moraes

12

What problem are they trying to solve by generating such huge javascript files?

il problema del bilanciamento Dart essere ottimale nella maggior parte dei casi, piuttosto che questo programma esempio personale, specifico, artificiosa, inutile che nessuno avrebbe mai sé cercare di usare in un progetto di produzione.

+5

Non sono sicuro del motivo per cui è stato downvoted, è un'ottima risposta. – funkybro

-1

Non credo che questo punto tenga a Dart tanto quanto spesso viene fatto notare: la maggior parte della maggior parte delle applicazioni è costituita da risorse (database, immagini, file audio, ecc.) Che sono fissi dimensione. Per le applicazioni reali, quindi, le risme di JS prodotte non saranno, non credo, una parte tanto significativa del tutto quanto lo sono in un'applicazione "ciao mondo". Alla fine, si tratta di scegliere i propri strumenti: JS è stato originariamente progettato con un semplice controllo del comportamento della pagina (e non applicazioni web complesse o di grandi dimensioni). In questo senso, ha ancora il suo posto (ed è uno strumento perfetto come esiste, ad esempio, per far sì che un computer dica "Ciao mondo").

Problemi correlati