这段Javascript效率低吗?

这段Javascript效率低吗?,javascript,Javascript,我只是想知道这段Javascript是否会降低我的网站速度: $(function(){ var realLink = location.href; $( "#nav a" ).each( function( intIndex ){ String.prototype.startsWith = function(str){ return (this.indexOf(str) === 0); } var pageLink = $(this).attr("href")

我只是想知道这段Javascript是否会降低我的网站速度:

$(function(){
 var realLink = location.href;
 $( "#nav a" ).each(
  function( intIndex ){
   String.prototype.startsWith = function(str){
    return (this.indexOf(str) === 0);
   }
   var pageLink = $(this).attr("href");

   if ( realLink.startsWith(pageLink) )
    $(this).parent().addClass("active");   
  }
 );
});
它只循环了5-7次,我没有太多的Javascript循环经验。

应该可以。如果nav元素不包含数千个链接,您应该可以


安装Firefox的Firebug,您可以运行配置文件。它将告诉您它在每个函数中花费了多少时间。我猜在这种情况下会以毫秒为单位。

您可以通过将代码更改为:

String.prototype.startsWith = function(str){
    return(this.indexOf(str) == 0);
}

$(function(){
    var realLink = location.href;

    $('#nav a').each(function(intIndex){
        var pageLink = $(this).attr("href");
        if(realLink.startsWith(pageLink))
            $(this).parent().addClass("active");
        });
});

它只是对startsWith的定义进行了分解,因此您不必为循环的每次迭代都定义它。

此代码段本身没有任何错误,只是您在循环中不断创建并为String.prototype.startsWith分配函数。当然,这是一项不必要的工作,至少应该:

$(function(){
 var realLink = location.href;
 String.prototype.startsWith = function(str){
   return (this.indexOf(str) === 0);
 };
 $( "#nav a" ).each(
  function( intIndex ){
   var pageLink = $(this).attr("href");
   if ( realLink.startsWith(pageLink) )
    $(this).parent().addClass("active");   
  }
 );
});

我也不认为有必要使用intIndex参数。函数中的任何地方都不使用它。

尝试使用来测量脚本的性能。

如果在Sizzle中使用^=操作符,那么jQuery在本例中的意思是基本上从这个值开始。试试这个:

$(function(){
   $( '#nav a:not( [href^="' + startsWith + '"] )' ).addClass( 'active' );
});

并将startsWith更改为您选择的变量。

为什么不在各种浏览器中尝试一下,自己看看呢?您想做什么?看看链接是否指向同一页上的某个值?这就回答了!我不太明白string.prototype到底在做什么,讽刺的是,我对jQuery之外的javascript一无所知