2012-10-13 9 views
10

Ho letto che con la freccetta la tua applicazione può avviarsi fino a 10 volte più velocemente a causa delle istantanee. Qualcuno può spiegare cos'è e come funziona? In che tipo di applicazione utilizzerei le istantanee?Qual è il concetto di istantanea nel dardo?

risposta

9

Le snapshot di Dart sono come Smalltalk images nel senso che consentono l'avvio quasi istantaneo dell'applicazione. Tuttavia, a differenza delle immagini Smalltalk, le istantanee non memorizzano lo stato del programma.

Questo è particolarmente utile nei dispositivi mobili più lenti perché sono intrinsecamente più lenti e anche limitati dalla memoria molto più di un sistema desktop. Questa ragione e il fatto che l'utilizzo della batteria ci imponga di chiudere programmi non necessari rende la velocità di avvio importante.

Dart affronta questo problema di avvio lento con la funzione snapshot heap, simile al sistema di immagini Smalltalk. L'heap di un'applicazione viene attraversato e tutti gli oggetti vengono scritti in un file semplice. Nota: al momento, la distribuzione di Dart viene fornita con uno strumento che attiva una Dart VM, carica il codice di un'applicazione e, appena prima di chiamare main, prende uno snapshot dell'heap. La Dart VM può usare un tale file di istantanea per caricare rapidamente un'applicazione.

La funzione di snapshot viene anche utilizzata per serializzare i grafici oggetto che vengono inviati tra Dart Isolates (serializzati con SnapshotWriter).

Attualmente non conosco alcun metodo per avviare un'istantanea o gestirli. In futuro, mi aspetto che sia possibile pubblicare un file di istantanea dal server Web e che venga elaborato istantaneamente dal browser Dart VM.

Il formato di istantanea stesso è multipiattaforma, ovvero funziona tra macchine a 32 bit, a 64 bit e così via. Il formato è stato creato in modo che sia veloce da leggere in memoria, con particolare attenzione a ridurre al minimo il lavoro extra come le correzioni del puntatore.

Ecco il codice sorgente per snapshot.cc: http://code.google.com/p/dart/source/browse/trunk/dart/runtime/vm/snapshot.cc

e delle prove: http://code.google.com/p/dart/source/browse/trunk/dart/runtime/vm/snapshot_test.cc

Quindi il motivo per cui può accelerare un avvio dell'applicazione di un fattore 10 è perché è non un un mucchio di codice sorgente come JavaScript che viene inviato così com'è e lentamente elaborato in seguito.

E dove vorresti utilizzarlo? Ovunque possiate. Dal lato server, in pratica sta già accadendo per te (e non importa davvero). ma sul lato client, questo non è possibile eppure. A quanto ho capito, sarà possibile servire queste istantanee al browser per l'avvio immediato, ma è necessario attendere perché non è disponibile al momento.

+0

Si noti che è stato riscontrato un miglioramento all'avvio di 10 volte quando si utilizzano le istantanee per caricare dart2js. –

+0

@SethLadd puoi elaborare cosa intendi? O forse modifica la mia risposta - dopotutto questa è una wiki :) –

+0

I test iniziali mostrano che l'avvio di dart2js da un'istantanea è 10 volte più veloce dell'avvio di dart2js dal codice sorgente. È ancora presto, ma i dati sembrano promettenti. –

Problemi correlati