拡張機能jsm化について
汎用的な js code module ってあまり公開されてないのかなぁ。まとめようと思ってもそもそも Mozilla 謹製以外は殆ど検索しても出てこない。
2010-06-22 16:38:21@dynamitter http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/ ここにちょこっとありますお
2010-06-22 16:48:31いつも頼りの Piro たん!っと最初に見てみてたんですが、jsm 形式のものは http://bit.ly/aBEL4F くらいしか見つからなかったのですが、どうなんでしょう?
2010-06-22 16:50:53http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/prefs.js とかはEXPORTED_SYMBOLSを頭に書き足してツリー型タブ等でjs code moduleとして使ってる
2010-06-22 16:50:58JavaScriptコードモジュールが「えぇぇぇー」って感じなのは、複数のアドオンで同じライブラリを使っててもそれぞれのアドオンで別々に同じファイルを持ってなきゃいけないっていう点だ。だからあまり好きじゃない。
2010-06-22 16:53:40なので http://www.cozmixng.org/repos/piro/fx3-compatibility-lib/trunk/animationManager.js なんかはなるべく1つのインスタンスを同じライブラリを使う全アドオンで共用するように設計してる
2010-06-22 16:55:12リビジョンが違っても大丈夫なように、API的には後方互換を保つようにするという自分ルールも決めてる。
2010-06-22 16:55:49@piro_or うん。そこは激しく同意します。アドオン間で js code module を共有するための code module を書きたくなってきている今日この頃です。
2010-06-22 16:57:47@dynamitter という感じでどちらかというと自分は1つのwindowの中に読み込ませるのが好き派なので特には書いてないですけど、 http://bit.ly/d2vldz という風にすればJS Code Moduleとして使えるはずです。
2010-06-22 16:57:59あとtimer.jsmはJSDeferredをJS Code Moduleとして使うために作った物なので、ということはこれを使えばJSDeferredみたいなライブラリをそのままJS Code Moduleにできるという!
2010-06-22 16:59:18@piro_or 一方で、いちおうグローバル変数が切り離されてることや、性能上一度しか読み込まれないというのはやはり最終的に有意なんじゃないかと思うので、js module 推進派な今日この頃になってます。
2010-06-22 16:59:54@piro_or おおぉぉぉ。そのまますぐに Code Module にできる (browser.xul 側の window などのオブジェクトや XMLHTTPequest のようなクラスに依存しない) 独立性高くなってるのねー。すばらしいー。
2010-06-22 17:02:22@dynamitter jQueryのJS Code Module化で使ってたテクニックをそれ単体でモジュール化したらいいんじゃないでしょうか。jstimer.jsmみたいに「既存ライブラリを最小限の変更でそのまま使うためのライブラリ」は、あるとできる事が一気に広がる気がします。
2010-06-22 17:04:57@dynamitter そういえばwith(window)と書くよりはひょっとしたら(function() { ... }).call(window) の方がいいのかもという気がしました。「withは遅い」と以前@amachangさんがおっしゃってたので。
2010-06-22 17:12:27でもあれはwith(node.style){...}をvar style = node.style;みたいに一旦キャッシュする形に書き換えるという話とセットだったような気もする。
2010-06-22 17:13:30@piro_or えぇ、何かもうちょっと試行錯誤してみてそれなりに使えそうになったらまた適当に公開していろんなライブラリを XUL から使ってみる実験とかしてみたいと思ってます。
2010-06-22 17:16:13なんか、Jetpack の既存 WebDeveloper が参入しやすい流れとか、高速化のベストプラクティスとか、うまく KB 化、定型化することでこれまでどおりの拡張機能開発もまた再活性化できないかなぁと思ってて...
2010-06-22 17:17:55@piro_or with はスコープチェインを追加するから多少は遅くなるのは当然なんですが、周りの速度評価とかはまだ全然行ってません。取りあえずまだ、動く、いろんなアドオンと試して互換性問題を起こさないというのを検証してる段階なので。
2010-06-22 17:19:55一段落したら最新の JIT エンジンの元でも気にするほどの速度差が生じるのかとか、他に方法はないのかとかそういったところも検証したいとは思っていますが、取りあえず先延ばししまくりモードなのでだれか変わりにお願いモードです。(^^;
2010-06-22 17:21:11with 遅いというのはサイ本にかかれていることで非常に有名だけど、そんなの過去のエンジンの話だという噂もあれば、やっぱ比較すればそれなりに気になる重さだよとか、原理的にはどうせローカル変数にキャッシュすれば問題ないのではと思ったり、イマイチ判断しかねてます。
2010-06-22 17:23:27速度比較も殆どはループ内部で殆ど何もしてないようなもので、実際の中身のあるループで比較するなら実用レベルでの影響がホントに生じるのかピントこない。JIT されてもなお影響あるのかとかという疑問もあるし(例えば関数インライン化の高速化は JIT により無意味になってるとか)。
2010-06-22 17:26:39@piro_or ちなみに、Piro 先生、hiddenWindow にオブジェクト入れちゃうのって拡張機能的にはアリなんでしょうかね(互換性問題起きる可能性ある)? と、誰にも分からないことを効いてみる。
2010-06-22 17:29:32hiddenWidnow 上にモジュール管理オブジェクト読み込んでそこに欲しいモジュールが登録済みか問い合わせ、あれば再利用、なければ import とかいうにすると拡張機能間で同じモジュール使っても共有できるんじゃないかなとか漠然と思ってるところ...
2010-06-22 17:31:04拡張機能のための JS コードモジュールのまとめページ (の元) を独断と偏見で書き始めてみた。 http://bit.ly/9uioYJ オススメライブラリがあったら追記してね!
2010-06-22 17:32:59