2012-10-13 6 views
10

私はダーツであなたのアプリケーションがスナップショットのために10倍速く起動できることを読んだ。誰がそれが本当に何であり、どのように機能するのかを説明することはできますか?どのようなアプリケーションでスナップショットを使用していますか?dartのスナップショットの概念は何ですか?

答えて

9

ダーツのスナップショットは、ほぼ即時のアプリケーション起動を可能にする意味でSmalltalk imagesのようなものです。ただし、スナップショットはSmalltalkイメージとは異なり、プログラム状態を保存しません。

これは、本来的に遅く、デスクトップシステムよりもメモリによって制限されているため、モバイルデバイスが遅い場合に特に役立ちます。その理由と、バッテリの使用が不要なプログラムを閉じることを私たちに要求するという事実は、起動速度を重要なものにしています。

Dartは、Smalltalkのイメージシステムに似ているヒープスナップショット機能を使用して、この低速起動の問題に対処しています。アプリケーションのヒープはトラバースされ、すべてのオブジェクトは単純なファイルに書き込まれます。注:現時点では、Dartの配布には、Dart VMを起動し、アプリケーションのコードをロードし、mainを呼び出す直前にヒープのスナップショットを取得するツールが同梱されています。 Dart VMは、そのようなスナップショットファイルを使用してアプリケーションをすばやくロードできます。

スナップショット機能は、Dart Isolates(SnapshotWriterでシリアル化)間で送信されるオブジェクトグラフをシリアル化するためにも使用されます。

現在、私はスナップショットを開始したり、スナップショットを処理する方法について知らない。将来的には、Webサーバーからスナップショットファイルを提供し、ブラウザのDart VMによって即座に処理されるようにすることが可能になると期待しています。

スナップショット形式自体はクロスプラットフォームなので、32ビット、64ビットのマシンなどで動作します。フォーマットは、ポインタ修正のような余分な作業を最小限に抑えることに重点を置いてメモリに読み込むのが素早くできるように作られています。

ここsnapshot.ccのソースコードがあります:http://code.google.com/p/dart/source/browse/trunk/dart/runtime/vm/snapshot.cc

とテスト:http://code.google.com/p/dart/source/browse/trunk/dart/runtime/vm/snapshot_test.cc

それはない Aだからだから、10倍、アプリケーションの起動を高速化できる理由がありますJavaScriptのようなソースコードをそのまま送信し、後でゆっくりと処理します。

あなたはどこで使いたいですか?どこでも可能です。サーバー側では、基本的にはすでにあなたのために起こっています(本当に重要ではありません)。クライアント側では、はまだではありません。私が理解しているように、これらのスナップショットをブラウザに提供して即座に起動することは可能ですが、今のところ利用できないので、待つ必要があります。

+0

スナップショットを使用してdart2jsをロードすると、スタートアップの改善が10倍になることに注意してください。 –

+0

@SethLaddあなたは何を意味しているのですか?または、おそらく私の答えを編集する - これは結局wikiです:) –

+0

初期テストでは、スナップショットからdart2jsを開始すると、ソースコードからdart2jsを開始するよりも10倍高速です。まだ早いですが、データは有望です。 –

関連する問題