yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

Yahoo知恵袋のloadが遅すぎる

問題のページは

detail.chiebukuro.yahoo.co.jp

これだ。死ぬほど遅い。Chromeだとタブが死んでしまう。Firefoxだと重いscriptを止める機能があるので

止められるだけマシだが、我慢ならない。そもそもhttps://s.yimg.jp/images/search/slink/direct/pc/1.0.0/js/directlink.min.jsとはなんぞや。

https://s.yimg.jp/images/search/slink/direct/pc/1.0.0/js/directlink.min.js · GitHub

Webarchvesを辿って(といっても比較的新しいファイルらしく、先月からしか辿れなかった)Gistにまとめた。地味にgitの履歴改ざんのやり方が分からず苦戦した。

Firefoxで糞重いのをどうにか我慢して調べたところ

https://gist.github.com/yumetodo/15b51e1ebd8b86cd533e6c5087009ab2#file-directlink-js-L482-L496

        getMatchPosition: function(e, t) {
            var i, n = t.map(function(t) {
                for (var i = e.length;;) {
                    if (i = e.lastIndexOf(t, i - 1), -1 === i) break;
                    var n = /^[a-zA-Z0-9a-zA-Z0-9]/.test(t),
                        r = /[a-zA-Z0-9a-zA-Z0-9]$/.test(t),
                        o = /[a-zA-Z0-9a-zA-Z0-9][ \t ]*$/.test(e.substr(0, i)),
                        a = /^[ \t ]*[a-zA-Z0-9a-zA-Z0-9]/.test(e.substr(i + t.length));
                    if (!(n && o || r && a)) break
                }
                return [i, t]
            });
            for (i = 0; i < n.length; i++)
                if (-1 !== n[i][0]) return n[i]
}

どうもLinker.prototype.getMatchPositionが暴走しているらしい。勘弁してくれ。