簡體   English   中英

我可以優化這些功能嗎?

[英]Can I optimize these functions?

我有下面列出的 3 個函數(它們被最小化,因此可能難以閱讀) - i0、t0 和 is。

is() 和 t0() 都使用這一行從 DOM 中提取數據

  var c=document.forms[a].elements;

在 i0() 中從 DOM 中提取數據,然后將其傳遞給 is() 和 t0() 會更好嗎?

這樣我只會從 DOM 中提取數據一次,但是我需要一個額外的變量來存儲它,然后將它傳遞給兩個函數。

i0():

function i0()
  {
  if(t0())
    {
    var a=is('f0');
    s0('bi0.php',a,s2);
    }
  }

t0:

function t0()
  {
  var a=document.forms['f0'].elements;
  a1="Please enter your credentials";
  a2="That email is not registered";
  a3="Incorrect credentials - Reset your password?";
  if(c0(a,a1,'fb1')&&c2(a[1],a2,'fb1')&&c3(a[2],a3,'fb1'))
    {
    return 1;
    }
  else
    {
    return 0;
    }
  }

是():

function is(a)
  {
  var b='';
  var c=document.forms[a].elements;
  for(i=0;i<c.length;i++)
    {
    if(c[i].name)
      {
      if(c[i].type=='checkbox'&&c[i].checked==false)
        {
        b+=c[i].name+"=NULL&";
        }
      else
        {
        b+=c[i].name+"="+c[i].value+"&";
        }
      }
    }
    b=b.slice(0,-1);
  return b;
  }
function i0(a){
    t0() && (a=is('f0'), s0('bi0.php', a, s2)); // just so I can use the comma like this
}

// or

function i0(){
    t0() && s0('bio.php', is('f0'), s2);
}

function t0(){
    var a = document.forms['f0'].elements,
       a1 = "Please enter your credentials",
       a2 = "That email is not registered",
       a3 = "Incorrect credentials - Reset your password?";

    return +( c0(a,a1,'fb1') && c2(a[1],a2,'fb1') && c3(a[2],a3,'fb1') );
}

function is(a){
    var b = '',
        c = document.forms[a].elements;

    for( var i=0, l=c.length; i<l; i++ ){
        c[i].name
            ? c[i].type == 'checkbox' && !c[i].checked && b += c[i].name + '=NULL&'
            : b += c[i].name + '=' + c[i].value + '&';
    }
    return ( b = b.slice(0, -1) );
}

要回答您的實際問題,是的,在document.forms['f0'].elements上執行單個 select 會使某些瀏覽器的速度快一些,但我懷疑這是一種微優化,只會在舊瀏覽器中更快(IE6)由於哈希查找。

您可以像這樣更改您的 for 循環以使其更快,盡管進行了輕微的優化(與 0 的比較比與其他數字相比更快):

for(i = c.length;i > 0;--i)
{
if(c[i].name)
  {
  if(c[i].type=='checkbox'&&c[i].checked==false)
    {
    b+=c[i].name+"=NULL&";
    }
  else
    {
    b+=c[i].name+"="+c[i].value+"&";
    }
  }
}

我假設您正在談論及時優化。

漫長的道路:一切都可以優化。 捷徑:這種代碼中的任何優化都將非常低

無論如何,function is() 與 JQuery序列化調用非常相似,並且已經過優化。 你考慮過使用它嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM