すべてのFlexのプログラマーの質問:どのような大規模なXMLデータファイルを読み込むために、 DataGridのかの4つの方法を用いて表示し、マシン上でのパフォーマンス...ソース: http://philflash.inway の最速の方法です。 com / dgperf / index.htmlを
| 方法 ( 1 )ノット、 XMLConnector図とDatabindingと古典 | XMLConnectorの回路図とDataBindingと方法2の属性は、 | 方法3属性、パース、 XMLとDataprovider | 方法4属性、パース、 XMLと商品 | |
| Flash Playerを7 | 12 388ミシシッピ | 11 963ミリ秒 | 2 930ミシシッピ | 442ミリ秒 |
| Flash Player 8が | 9 365ミシシッピ | 7 569ミシシッピ | 1 858ミシシッピ | 314ミリ秒 |
問題の詳細
多くのユーザーのパフォーマンスについてのFlex 4の方法でファイルを読み込むために文句をXML.Voici分類:
方法1
のデータを表現するために、我々のノードを使用します。 クライアントとして表現される以下の通り: <client><nom>Deschamps</nom><prenom>Amandine</prenom><ville>Caluire-Et-Cuire</ville><age>43</age><ca>2173.7</ca></client>フラッシュ>については、 ( 1図を使用してファイルを読むこと)は、指定されたデータセットとは、 DataGridのデータを表示するためのモデルにはXMLConnectorを使用します。 にバインドするためには、 3 éléments.C 'メソッドは、 " "多くのチュートリアルで発見されているデータリンククラシック( DataBinding )を使用します。
なぜ、この方法をゆっくりとは何ですか?
315キロバイトは、 XMLファイルのサイズがあります。 XMLConnector時にスキーマを使用して、フラッシュファイルにアクセスするためのdonnées.LeのXPathを使用して、 XPathのが遅くなる:これは、長い大きい。 は12.5秒になる。
方法2
この方法のアイデアの属性ノード(代わりに)を使用するようにして表現されるお客様への影響を参照してくださいperformances.Unは以下の通りです: <client nom="Deschamps" prenom="Amandine" ville="Caluire-Et-Cuire" age="43" ca="2173.7"/>フラッシュ<client nom="Deschamps" prenom="Amandine" ville="Caluire-Et-Cuire" age="43" ca="2173.7"/>については、方法1のように: (そのスキーマをインポートする)ファイルを読む際に、指定されたデータセットとしてXMLConnector同じ方法を使用モデルとは、データグリッドのデータが表示されます。 にバインドするためには、 3要素のデータリンク( DataBinding )を使用します。
なぜ、この方法を方法1よりも高速ですか?
は、 XPathの" "の属性は、ノード( )にアクセスするには速いです。 メモには、 XMLをもっと" 315キロバイトの代わりに小さい" ( 164 KB )のです。 12秒約マン...
方法3
のデータを表現するために、このメソッドの使用attributs.LアイデアXMLConnectorのレイアウトを使用する(これは、 XPathの)を使用してではなく、パーサーを手動XML.Pourこの、私たちは" " XMLを素早く読む: nextSiblingではwhile ループを使用します。 数字をエンコードするためには、 番号を使用する(およびparseFloatは遅いです) parseIntされていません。 databindingこれ以上ありませんXMLConnectorとデータセットの間にされています。 にバインドするためのXML構文解析の結果は、 DataSetのDataprovider使用しています。
なぜ、この方法を方法2よりも高速ですか?
これを手動でXML解析を実行します。 それはもはや(と) XMLConnectorのスキーマを使用していないして、 XPathを使用します。戦としては、エンコーダの属性をする必要があります。 ほとんどのXMLデータでは、文字列や数値されています。 のエンコーディングが非常に速い。 テスト3秒間続きます。
方法4
方法3では、非常に迅速には、 XMLを読む知っている。 この方法のアイデアかどうか( ) Dataprovider 3のメソッドを使用して、データリンクを向上させることができる場合は、 DataSetのドキュメントを見て、その DataSetにデータを関連付ける2つの方法:この方法がありますDataproviderとメソッドの項目が、何が多すぎることではないの詳細は、 アイテムやDataprovider ?のFlash MX 2004のドキュメントは、 Flash 8 LiveDocsかの違いです。 このため、データセットのソースを見てください:スキーマがある場合ですフラッシュ8 :マクロメディア\フラッシュ8 \アン\最初の実行\クラス\ MXの\ データ \ コンポーネント \データセット。 Asen実際、メソッドDataprovider型変換を実行する(メソッドinternalAddItem ) 。 項目法変換(なし/チェックタイプ)の直接リンクになります。すでに変換したが、それは法の項目を使用します。 (方法3では、型変換)が必要ではありませんでした。このコードは以下の通り:
client_con.addEventListener("result", Delegate.create(this, doParseData));//function doParseData():Void {var dataXML:XML = client_con.results;var resultArray:Array = [];var mainNode = dataXML.firstChild;var aNode:XMLNode = mainNode.firstChild;while (aNode) {var obj = new Object();for (var attribute:String in aNode.attributes) {if (attribute == “age” || attribute == “ca”) {obj[attribute] = Number(aNode.attributes[attribute]);} else {obj[attribute] = aNode.attributes[attribute];}}resultArray.push(obj);aNode = aNode.nextSibling;}// — use items (and not dataProvider)client_ds.items = resultArray;}) : [ ] ;client_con.addEventListener("result", Delegate.create(this, doParseData));//function doParseData():Void {var dataXML:XML = client_con.results;var resultArray:Array = [];var mainNode = dataXML.firstChild;var aNode:XMLNode = mainNode.firstChild;while (aNode) {var obj = new Object();for (var attribute:String in aNode.attributes) {if (attribute == “age” || attribute == “ca”) {obj[attribute] = Number(aNode.attributes[attribute]);} else {obj[attribute] = aNode.attributes[attribute];}}resultArray.push(obj);aNode = aNode.nextSibling;}// — use items (and not dataProvider)client_ds.items = resultArray;}=client_con.addEventListener("result", Delegate.create(this, doParseData));//function doParseData():Void {var dataXML:XML = client_con.results;var resultArray:Array = [];var mainNode = dataXML.firstChild;var aNode:XMLNode = mainNode.firstChild;while (aNode) {var obj = new Object();for (var attribute:String in aNode.attributes) {if (attribute == “age” || attribute == “ca”) {obj[attribute] = Number(aNode.attributes[attribute]);} else {obj[attribute] = aNode.attributes[attribute];}}resultArray.push(obj);aNode = aNode.nextSibling;}// — use items (and not dataProvider)client_ds.items = resultArray;}]client_con.addEventListener("result", Delegate.create(this, doParseData));//function doParseData():Void {var dataXML:XML = client_con.results;var resultArray:Array = [];var mainNode = dataXML.firstChild;var aNode:XMLNode = mainNode.firstChild;while (aNode) {var obj = new Object();for (var attribute:String in aNode.attributes) {if (attribute == “age” || attribute == “ca”) {obj[attribute] = Number(aNode.attributes[attribute]);} else {obj[attribute] = aNode.attributes[attribute];}}resultArray.push(obj);aNode = aNode.nextSibling;}// — use items (and not dataProvider)client_ds.items = resultArray;}Dataproviderclient_con.addEventListener("result", Delegate.create(this, doParseData));//function doParseData():Void {var dataXML:XML = client_con.results;var resultArray:Array = [];var mainNode = dataXML.firstChild;var aNode:XMLNode = mainNode.firstChild;while (aNode) {var obj = new Object();for (var attribute:String in aNode.attributes) {if (attribute == “age” || attribute == “ca”) {obj[attribute] = Number(aNode.attributes[attribute]);} else {obj[attribute] = aNode.attributes[attribute];}}resultArray.push(obj);aNode = aNode.nextSibling;}// — use items (and not dataProvider)client_ds.items = resultArray;}
ここに12.5秒から0.5秒に満たない2 000 録音ファイルを読むことを移動するための方法です!
Flexの場合には初めてになるinfo.frは、 RSSフィードを購読することができます。 ご訪問していただきありがとうございます。




















2008年6月14日 13 時間04分で
ハワイ
私はそれが良い方法ですが、参照する代わりにflexのプロジェクトに入れている。 モイ帝n'yパス到着!