適当にブラウザを列挙してみた。
IE の低さは異常。
コワイ、ネコ、コワイ
自由気ままに行動して愛らしいネコですが、かわいらしく思えるネコの行動の中には飼い主を殺そうとしている事を表わす行動があるそうです。普通に考えるとツメを出し、キバをむき出しにしている姿を想像してしまいますが、実は普通では気付かないような行動こそ殺そうとしているサインのようです。
身に覚えがありすぎる!
コワイヨー
getter 付きのオブジェクトの生成が重い
ただのオブジェクトに比べて、50倍くらい時間がかかる。
Vimperator でテスト。
テストコード
let time = function (name, func) { let [a, r, b] = [new Date(), func(), new Date()]; log(name + ": " + ((b.getTime() - a.getTime()) / 1000) + "msec"); return r; } time('object - getter', function () { let ary = []; for (let i = 0; i < 70000; i++) { ary.push({ url: 'neko', title: 'sippo', get icon() function() bookmarks.getFavicon(this.url) }); } }); time('object - property', function () { let ary = []; for (let i = 0; i < 70000; i++) { ary.push({ url: 'neko', title: 'sippo', icon: function() bookmarks.getFavicon(this.url) }); } }); time('array', function () { let ary = []; for (let i = 0; i < 70000; i++) { ary.push(['neko', 'sippo', function() bookmarks.getFavicon(this.url)]); } });
出力
vimperator: array: 0.079msec vimperator: object - property: 0.056msec vimperator: object - getter: 3.078msec
ファイル変更を監視して自動で :so する
:autoso[urce] i_love_vimperator.js
のようにすると、"i_love_vimperator.js" を監視するようになる。
そして、ファイルに変更があったときに スクリプト が実行される。
監視の中止は "!" 付きコマンドで行う。
:aso! i_love_vimperator.js
"!" のときは、監視中のファイルパスで補完できる。
大量の履歴で重くなる問題が解消?
2.0pre。
Struct オブジェクトの利用をやめたようで、問題はなくなったようだ。
http://hg.intevation.org/mirrors/mozdev.org/vimperator-cvs/rev/7a6ffe3d788b
と、思ったけれどまだちょっと重いみたいだ。
サイドバーを消したい!
ツリー型タブとMultiSidebarを併用しているんだが、たまに両サイド共に消したいときがある。
そこで下のをてけとーに書いてみたんだけれど、(window.content === null) になってしまう。
当然 Vimperator さんが発狂。
困る。
let sidebars = ['sidebar-2-box', 'sidebar-2-splitter']; let changeElementDisplay = function (elem, show) { elem.hidden = !show; }; let hidden = false; commands.addUserCommand( ['hidesidebar', 'hs[b]', 'hidesb'], 'Hide sidebars', function () { sidebars.forEach(function (id) { changeElementDisplay(window.document.getElementById(id), hidden); }); //changeElementDisplay(gBrowser.mTabContainer.parentNode, hidden); changeElementDisplay(gBrowser.mTabContainer.parentNode.nextSibling, hidden); hidden = !hidden; }, {}, 'Hide sidebars' ); commands.addUserCommand( ['sidebarwidth', 'sbw'], 'set sidebar width', function (arg) { sidebars.forEach(function (id) { let elem = window.document.getElementById(id); elem.width = arg.string ? parseInt(arg.string, 10) : 220; }); } );