Frage

Ich habe den folgenden Dart -Code:

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

Der vom Dart -Compiler für den obige Code generierte JavaScript -Code lautet wie folgt:

$ 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) : []);
$

Und die Größe von helloworld.dart.app.js ist 102k!

Im Optimiermodus wurde das folgende JavaScript - generiert - helloworld.dart.js das ist von Größe 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:[]);
$

Warum ist der JavaScript -Code, der von einem Dart -Compiler so riesig generiert wurde?

Welches Problem versuchen sie zu lösen, indem sie so riesige JavaScript -Dateien generieren?

Randnotiz: Die JavaScript -Dateien waren so groß, also warf der folgende Fehler:

Hoppla! Ihre Frage konnte nicht eingereicht werden, weil: Körper auf 30000 Zeichen begrenzt ist. Sie haben 140984 eingegeben

War es hilfreich?

Lösung

Wenn Sie noch einen besseren JavaScript erhalten möchten, versuchen Sie es mit dem Frosch -Compiler anstelle von DARTC. Frosch ist in Dart selbst geschrieben.

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

Beachten Sie, dass dieser Blogpost oben etwas veraltet ist. Sie können mittlerweile den Dart SDK für Frog verwenden:http://gsdview.appspot.com/dart-editor-archive-continuous/3058/

Dieser Beitrag könnte auch für Sie von Interesse sein, Seth zeigt, wie der Frosch -JS erzeugt wird:http://blog.sethladd.com/2011/12/10-lessons-from-porting-javascript-to.html

So können Sie Frog im aktuellen Editor aktivieren:https://groups.google.com/a/dartlang.org/group/misc/msg/5dfe04c69ed0fed3

Andere Tipps

Welches Problem versuchen sie zu lösen, indem sie so riesige JavaScript -Dateien generieren?

Das Problem des Ausgleichs von Dart als optimal in den meisten Fällen und nicht nur dieses eine persönliche, spezifische, erfundene und nutzlose Beispielprogramm, das niemand ernsthaft versuchen würde, in einem Produktionsprojekt zu verwenden.

Warum ist der JavaScript -Code, der von einem Dart -Compiler aus einem Dart -Code generiert wurde, so groß?

Weil es eine Dart -Laufzeit enthält.

Welches Problem versuchen sie zu lösen, indem sie so riesige JavaScript -Dateien generieren?

Das Problem des Ausführens von Code, der nicht JavaScript in einem Browser ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top