这段Javascript效率低吗?
我只是想知道这段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")
$(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一无所知