- 2009-10-01 (木) 9:07
- category: ActionScript | flash

海外製のライブラリは日本語の情報が少なくて、英語のASDocやwikiを見たりしますよね。でも英語って読むのが難しいですよね…。
僕なんかね、キィーーッ!!ってなりますね。ぜんぜん読めないから。みなさんもキィーーッ!!ってなってますよね。でもBulkLoaderに関しては安心してください。もう、傷つく事に怯えなくていいんです。
BulkLoaderプロジェクトのDebeloperGuideってところにおトク情報がありました
BulkLoaderに同梱されているサンプルはほとんど説明がないのですが、GoogleCodeのプロジェクトのwikiに結構な情報がありました。
http://code.google.com/p/bulk-loader/wiki/DeveloperGuide
このうち、おトク情報を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の設定にひと手間かける分、ratioLoadedやbytesLoadedよりもわりと正確な値を取得できます。
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種類あります。
- LazyXMLLoader
- 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を眺めるだけの記事でしたー。
特に何も茶々を入れなかったので、期待してくれてたみんなからは大ブーイングだね!むしろ大ブーイングの方が嬉しい!「今回みたいに普通に書いてよ。しょうもないこと書かんでいいから」とか思われたくないんです!
い、イヤー!心の声が聞こえるー!!それ以上言わないで!!やめてー!!ロマンティックとめてー!!もう、傷つく事に怯えたくないー!キィーーッ!!
- Newer: デザイナ上がりの2年目Flasherが読んだ本21冊の感想をだいたい3行くらい書きました。4行になった感想もあります。
- Older: 複数ロードのプログレスを一本化できる「マルチプログレスマネージャー」で幸運パワーを掴め!
Comments:0
Trackbacks:2
- Trackback URL for this entry
- http://katapad.com/wp/2009/10/01/6_tips_of_bulkloader/trackback/
- Listed below are links to weblogs that reference
- BulkLoaderで「もう悩まない!」ための6つのtipsをまずは14日間で売上No.1!! from Katapad Design
- 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. [...]