Home > | , , > BulkLoaderで「もう悩まない!」ための6つのtipsをまずは14日間で売上No.1!!

BulkLoaderで「もう悩まない!」ための6つのtipsをまずは14日間で売上No.1!!

  • 2009-10-01 (木) 9:07
  • ���̃G���g���[���͂Ăȃu�b�N�}�[�N�ɒlj�

海外製のライブラリは日本語の情報が少なくて、英語のASDocやwikiを見たりしますよね。でも英語って読むのが難しいですよね…。

僕なんかね、キィーーッ!!ってなりますね。ぜんぜん読めないから。みなさんもキィーーッ!!ってなってますよね。でもBulkLoaderに関しては安心してください。もう、傷つく事に怯えなくていいんです。

BulkLoaderプロジェクトのDebeloperGuideってところにおトク情報がありました

BulkLoaderに同梱されているサンプルはほとんど説明がないのですが、GoogleCodeのプロジェクトのwikiに結構な情報がありました。

http://code.google.com/p/bulk-loader/wiki/DeveloperGuide

このうち、おトク情報を6つピックアップすることにしました。
以下目次がわりのページ内リンクです。

  1. weightプロパティで各Itemのパーセントの重み付けをして、精度のいいパーセントを取得する
  2. BulkLoaderのインスタンスはプールされている
  3. stringSubstitutionsでパスの切り替えなどができる
  4. 設定を外部ファイル化して勝手にロードしてくれるLazyBulkLoader
  5. add()するときのプロパティ一覧
  6. 一つでもエラーがあると止まってしまうから、エラーハンドリングしとこう

1. weightプロパティで各Itemのパーセントの重み付けをして、精度のいいパーセントを取得する

この間「超便利なローダーBulkLoaderの落とし穴にハマってきました」という記事を書きました。その中で、パーセント取得がちょっと難しいなーという話をしました。

よくよく調べてみると、もうひとつ打つ手がありました。

BulkLoaderのドキュメント・見出し「By weight」のところ
http://code.google.com/p/bulk-loader/wiki/ReportingLoadingProgress

ここをかいつまんで説明しますね。
あと、これから「Item」と呼ぶものは「ロードするもの」っていう意味で使います。

weightってこんな感じで動いてる

  • ロードするItemが10個あって
  • それぞれのItemにweightが設定されていない

というケースでは、各Itemに割り当てられるパーセントは1/10、つまり10%ずつです。

このうち1つのItemがFLVなどで他のファイルより重いときにweightを設定します。この重いItemをweight=11と設定しましょう。あと、Itemのデフォルトのweightは1ということを覚えておいてください。

_bulkloader.add("hoge.flv", { type: BulkLoader.TYPE_VIDEO, weight: 11 } );

すると、

Item 割り当てられるパーセント
weightを11にしたItem 11/20
他のItem 1/20

こんな感じであがります。元の分母はItem数なので10。それに、増えた重みを足して10+10で分母が20になります。たぶん!これで、FLVのパーセントが55%分を占めるようになり、期待している値に近づきました。

このweightが設定されたパーセントを取得するにはweightPercentを使用します。

weightPercentでもうすこし正確なパーセント表示

BulkProgressEvent.weightPercentにweightを考慮したパーセントが入っています。

(item._bytesLoaded / item._bytesTotal) * item.weight;

いたってシンプルですね。こういった形で加算されていくので、かなり実際と近いパーセントが取得できそうです。

weightの設定にひと手間かける分、ratioLoadedbytesLoadedよりもわりと正確な値を取得できます。

2.BulkLoaderのインスタンスはプールされている

BulkLoaderのインスタンスはBulkLoaderクラスの静的なプロパティに保存されていて、いつでも再利用できるようになっています。

BulkLoaderクラスのstaticメソッドには取得・破棄の2種類があります。

//インスタンスの取得
BulkLoader.getLoader(name);

破棄メソッドについては、すべてのBulkLoaderインスタンスを削除するものしか用意されていないようです。

BulkLoader.removeAllLoaders();

再利用しないのであれば、removeするのがいいでしょう。

3.stringSubstitutionsでパスの切り替えなどができる

ロードしたいパスに変数ぽいものを仕込んで柔軟性を上げることができます。

_bulkLoader.stringSubstitutions = {
	"base_path": "http://example.com/test/"
}
_bulkLoader.add("{base_path}test.jpg");
// これが→http://example.com/test/test.jpg に変換されます。

テスト用パスと、本番用のパスを変えるときに便利そうですね。

4.設定を外部ファイル化して勝手にロードしてくれるLazyBulkLoader

ロードしたいItemとその設定を書いたxml・jsonを書くだけで、自動でロードしてくれるクラスがLazyBulkLoaderです。以下の2種類あります。

  1. LazyXMLLoader
  2. LazyJSONLoader

xml・json内部で設定できることはasで書けることとほぼ同じだと思われます。以下のxmlを見るとよくわかります。

BulkloaderのLazyサンプルに同梱されているサンプルxml

使い方はBulkLoaderのサンプルに含まれている
/examples/serialized-loaders/SerializedTestMain.as
に書いてあります。

使い方は簡単です。

lazy  = new LazyXMLLoader("http://www.emptywhite.com/bulkloader-assets/lazyloader.xml", "theLazyLoader")
lazy.addEventListener(LazyBulkLoader.LAZY_COMPLETE, onLazyInfoLoaded); //設定xmlを読み込んだときのハンドラ。特に何かするときだけ使う
lazy.addEventListener(Event.COMPLETE, onAllLoaded); //すべてのItemがロードされたら(いつもの)
lazy.addEventListener(ProgressEvent.PROGRESS, onAllProgress); //ロードのプログレス(いつもの)

AS側でやることがほとんどなくなるように見えますね。ロードしたあとのパースにしわ寄せがきますが、うまく使いこなせば楽になるかもしれません。

5.add()するときのプロパティ一覧

ASDocではわかりにくいので超意訳してみました。

プロパティ Classのconst データ型 説明
preventCache PREVENT_CACHING Boolean urlにランダム文字列を付与して、キャッシュを防ぐかどうか
id ID String getXML()などで取得するためのID。とくに指定しないとurlがIDになる
priority PRIORITY int 読み込みの優先順位。intが大きい順に読み込む。
maxTries MAX_TRIES int ロード失敗したときに何回リトライしにいくか。デフォは3
weight WEIGHT int weightPercentを使うときのパーセントの重み
headers HEADERS Array 追加のリクエストヘッダ
context CONTEXT LoaderContext or SoundLoaderContext 追加のContext
pausedAtStart PAUSED_AT_START Boolean VideoItemのみ。nestreamがロードした直後からVideoを再生するかどうか 

6. 一つでもエラーがあると止まってしまうから、エラーハンドリングしとこう

IO_ERRORやセキュリティエラーが発生したら、そのItemは失敗とみなされ放置されます。放置されると「すべてのItemがロードされました」というイベントCOMPLETEが呼ばれなくなります。

以下のようにエラーハンドリングすると、まあ、なんかできるでしょう!

_bulkLoader.addEventListener(ErrorEvent.ERROR, errorHandler)
private function errorHandler(e:ErrorEvent):void
{
 	//失敗したファイルをremoveする
	_bulkLoader.removeFailedItems();
 	//まだファイルのロードが残ってたら
	if (_bulkLoader.isRunning)
	{
		//コンプリートイベント待つなどする
	}
	else
	{
		//失敗したやつ以外は終了したので、終了処理に移る
		bulkLoadComplete(null);
	}

}

MultiProgressManagerのBulkLoaderのモデルも対応させました

ついでに、SparkにコミットしたMultiProgressManagerのBulkLoaderのモデルもweightPecentに対応させました。だいぶまともな動作になりそうです。

ハイ!ということでね!

今回はBulkLoaderを眺めるだけの記事でしたー。

特に何も茶々を入れなかったので、期待してくれてたみんなからは大ブーイングだね!むしろ大ブーイングの方が嬉しい!「今回みたいに普通に書いてよ。しょうもないこと書かんでいいから」とか思われたくないんです!

い、イヤー!心の声が聞こえるー!!それ以上言わないで!!やめてー!!ロマンティックとめてー!!もう、傷つく事に怯えたくないー!キィーーッ!!

Trackbacks (Close):4

pingback from AndB ( log ) — 091224_AS3 + Flickr api test 09-12-24 (木) 8:39

[…] _BulkLoaderでサムネイルをまとめて読み込んでから表示 __weightオプション使って精度の良いロード状況(パーセント)を取得 __contextオプション使ってcrossdomain問題解決 […]

pingback from ライブラリ « qwed_blog 10-03-10 (水) 20:34

[…] 参考http://katapad.com/wp/2009/10/01/6_tips_of_bulkloader/ This page is wiki editable click here to edit this page. […]

pingback from BulkLoader | Studies 11-05-24 (火) 17:06

[…] BulkLoaderで「もう悩まない!」ための6つのtipsをまずは14日間で売上No.1!! http://katapad.com/wp/2009/10/01/6_tips_of_bulkloader/ […]

pingback from WordPressプラグインを作ってみた。 | 水玉製作所 11-09-20 (火) 21:42

[…] ファイル名、id名の順番ではないことに注意してください。 書式はBulkLoaderのlazyloader.xmlを参考にしました。 […]

Home > | , , > BulkLoaderで「もう悩まない!」ための6つのtipsをまずは14日間で売上No.1!!


Search
Feeds
Meta

Return to page top