GMスクリプトを作った上での個人的メモ
- XPath便利。超便利。
- 複雑な条件も1行で書けちゃう。
- クラスに"hoge"が指定されたa要素を子要素として持たないh3要素の先頭の子要素a
- こんなのが//h3[not(a[@class="hoge"])]/a[not(preceding-sibling::*)]と書ける。
- DOMだと何行になるだろうか。
- クラスに"hoge"が指定されたa要素を子要素として持たないh3要素の先頭の子要素a
- XPathの戻り値の型には要注意。
- ORDERED_NODE_ITERATOR_TYPE は、DOMツリーに変更があると無効になる。
- result.iteratoNext()で取得。nullになったら終わり。
- ORDERED_NODE_SNAPSHOT_TYPE は、変更があっても反映されないが、そのまま使える。
- result.snapshotItem(i)で取得。
- 取得した要素へのアクセス方法を間違えるとエラーが出る。
- ORDERED_NODE_ITERATOR_TYPE は、DOMツリーに変更があると無効になる。
- 最初は'//h3/a'なんて書いてた。
- 1ページ目はうまくいくけど、2ページ目以降、既にブックマーク数をつけたリンクと、ブックマーク数のリンクそれぞれに更にブックマーク数をつけようとしたので、ページ数が増えるにつれ、指数関数的に処理量が増大して\(^o^)/
- 複雑な条件も1行で書けちゃう。
- 動作の速さを求めてみた。
- ランキングはリンクの数が100個を越えるから、遅いとイライラ。
- array.forEach(function(elem) {...})は、遅い
毎回関数を生成してるんだから遅いのは当たり前か。- 毎回関数を生成してるわけじゃないな。生成した関数を呼び出している。
- あれ?それだと遅くなる原因にはならないような…。
- cloneNode(true)を使ってみた。
- いちいちcreateElementして属性とか設定するよりは速い気がする。
- Autopagerize.addFilterではなく、addDocumentFilterを使った。
- ページ描画前に要素をDOMツリーをいじれるから。
- DOMツリーの変更→再描画を100回繰り返すより速いかも。
- ページ描画前に要素をDOMツリーをいじれるから。
- いろいろやってみたけど、ちゃんとしたベンチマークをしてないから効果の程はよくわからん。
- というか、ページ上部の広告Flashが一番重いかも。
- base要素があるページだと、2ページ目以降のリンクがおかしくなる。
- base要素が無いものとして解釈されたhref属性を与えられる。
- とりあえず今回は場当たり的に対処してみた。
- 根本的な対処はAutopagerizeの対応待ち?