17

dart を使用すると、スナップショットによりアプリケーションを最大 10 倍高速に起動できることを読みました。それが実際に何であり、どのように機能するかを誰かが説明できますか? どのようなアプリケーションでスナップショットを使用しますか?

4

1 に答える 1

16

Dart のスナップショットは、ほぼ瞬時にアプリケーションを起動できるという意味でSmalltalk イメージに似ています。ただし、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

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

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

于 2012-10-13T21:54:00.273 に答える