setTimout(function,100)会影响性能吗?

时间:2016-08-27 10:52:10

标签: javascript jquery html css

我有一个功能,可以检查网址是否每100毫秒包含任何导航href ,如果有,则会添加某些元素活动

代码:

    var checkActive = function(){
        var path = window.location.pathname,
            path = decodeURI(path),
            path = path.replace(/[\/]/, "");

        if ( window.location.pathname.indexOf(path) > -1 ) {
        $('.navigation .nav li a[href*="' + path + '"]').parent().addClass('active');
        $('.navigation .nav li a:not([href*="'+path+'"])').parent().removeClass('active');
    }

    (function loopingFunction() {
        checkActive();
        setTimeout(loopingFunction, 100);
    })();

此检查每100毫秒会影响其他用户使用较弱PC的用户的性能吗?

Ps:我使用此方法,因为我使用 pushState,statechange和.load() 来更新我的内容,因此页面本身不会刷新

1 个答案:

答案 0 :(得分:1)

不太可能造成任何麻烦。这是每秒10次的小检查。但是,只需使用location.hash并将该(未解析的)值与您使用的最后一个值进行比较,就可以减少工作量:

var lastHash = String(location);
var checkActive = function(){
    if (lastHash === String(location)) {
        return;
    }
    // ...do work...
};

但是,您只需要在过时的浏览器上使用它。在任何模糊的现代浏览器上,您可以使用hashchange事件代替,您可以轻松检测它是否受支持:

if (typeof window.onhashchange !== "undefined") {
    // Vaguely modern, use the hashchange event
} else {
    // Obsolete, use a workaround
}

(对不起,你不仅仅是做哈希片段。)