2007年 12月 26日

拡張機能

userChrome.js に対して拡張機能にまとめるメリットがいまいちわかってない……

  • 複数ファイル使ったりとかの場合はむしろ必須
  • 設定が Tools -> Add-ons からアクセスできる (という仕組みが用意されている)
  • Mozilla Add-ons に登録できる


デメリット

  • userChrome.js にくらべて作るのがめんどくさい
    • 一回 Rakefile 書けばすみそうだけど
  • 気軽に書きかえられない
    • 書きかえてすぐコミット、とかができない
      • インストールしたあとにチェックアウトディレクトリへ symlink しなおせばいいだろうけど、それもめんどくさい (これは自分はいいけど、他の人がコミットしずらくなる)
  • ↑とかぶるけど設定画面ちゃんと作らないと使えない


あと拡張機能の content とかを content.jar とかに圧縮してるけど、あれのメリットがよくわからない。書きかえにくくなって嫌だ……chrome.manifest も書きかえないといけないし……

Fx3b2 フルズームの座標ずれ

なんか小数点以下の扱いに問題ありそう (縮小時だけ)

ejs.js はやくなった

コンパイル時間はともかく、実行時間が replace による簡単な置換の2倍程度まではやくなった。

COUNT = 500;

var t = "aaaa<%=s.foo%>bbbbb<%=s.bar%>ccc";
var e = EJS(t);
var f = EJS(t, {useWith:true});
var m = {foo:"test", bar:"foobar"};
var b = [
	function compile () {
		EJS(t);
	},
	function processing () {
		e.run(m);
	},
	function processing_with_with () {
		f.run(m);
	},
	function replace () {
		t.replace(/<%=s\.(\w+)%>/, function (_,a) {
			return m[a];
		});
	}
];


for (var i = 0; i < b.length; i++) {
	var fun = b[i];
	print(fun.name);
	var res = 0;
	for (var j = 0; j < COUNT; j++) {
		var now = (new Date).getTime();
		fun();
		res += (new Date).getTime() - now;
	}
	print(res + "ms / " + (res/COUNT) + "ms");
};
Spidermonkey
compile
283ms / 0.566ms
processing
25ms / 0.05ms
processing_with_with
37ms / 0.074ms
replace
12ms / 0.024ms

Rhino
compile
5094ms / 10.188ms
processing
500ms / 1ms
processing_with_with
670ms / 1.34ms
replace
279ms / 0.558ms

ejs.js の高速化より Spidermonkey と Rhino の速度差のほうに驚いた

replace の正規表現に g がついてないから、実際は replace はもうすこし遅いですね