茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    jQuery的Each比JS原生for循環(huán)性能慢很多的原因
    來源:易賢網 閱讀:1024 次 日期:2016-07-26 14:34:13
    溫馨提示:易賢網小編為您整理了“jQuery的Each比JS原生for循環(huán)性能慢很多的原因”,方便廣大網友查閱!

    這篇文章主要介紹了jQuery的Each比JS原生for循環(huán)性能慢很多的原因的相關資料,需要的朋友可以參考下

    其實查看jQuery的源代碼,發(fā)現(xiàn)each的代碼很簡單,但為什么性能和原生的for循環(huán)相差幾十倍呢?

    jQuery的each的核心代碼

    for (; i < length; i++) {

    value = callback.call(obj[i], i, obj[i]);

    if (value === false) {

    break;

    }

    }

    看著很簡單,但為什么會慢很多呢?

    編寫測試代碼如下:

    var length=300000;

    function GetArr() {

    var t = [];

    for (var i = 0; i < length; i++) {

    t[i] = i;

    }

    return t;

    }

    function each1(obj, callback) {

    var i = 0;

    var length = obj.length

    for (; i < length; i++) {

    value = callback(i, obj[i]);

    /* if ( value === false ) {去掉了判斷

    break;

    }*/

    }

    }

    function each2(obj, callback) {

    var i = 0;

    var length = obj.length

    for (; i < length; i++) {

    value = callback(i, obj[i]);/*去掉了call*/

    if (value === false) {

    break;

    }

    }

    }

    function each3(obj, callback) {

    var i = 0;

    var length = obj.length

    for (; i < length; i++) {

    value = callback.call(obj[i], i, obj[i]);/*自己寫的call*/

    if (value === false) {

    break;

    }

    }

    }

    function Test1() {

    var t = GetArr();

    var date1 = new Date().getTime();

    var lengtharr = t.length;

    var total = 0;

    each1(t, function (i, n) {

    total += n;

    });

    var date12 = new Date().getTime();

    console.log("1Test" + ((date12 - date1)));

    }

    function Test2() {

    var t = GetArr();

    var date1 = new Date().getTime();

    var total = 0;

    each2(t, function (i, n) {

    total += n;

    });

    var date12 = new Date().getTime();

    console.log("2Test" + ((date12 - date1)));

    }

    function Test3() {

    var t = GetArr();

    var date1 = new Date().getTime();

    var total = 0;

    each3(t, function (i, n) {

    total += n;

    });

    var date12 = new Date().getTime();

    console.log("3Test" + ((date12 - date1)));

    }

    function Test4() {

    var t = GetArr();

    var date1 = new Date().getTime();

    var total = 0;

    $.each(t, function (i, n) {

    total += n;

    });

    var date12 = new Date().getTime();

    console.log("4Test" + ((date12 - date1)));

    }

    運行測試,發(fā)現(xiàn),第一個和第二個相差不是很大,這說明由于break這個判斷導致的性能差異很少,但第二個和第三個,第四個偏差就就不止一倍了,而第二個和第三個唯一的區(qū)別就是調用了call,看來call會導致性能損失,因為call會切換上下文,當然jQuery的each慢還有其他原因,它還在循環(huán)中調用了其他的方法,call只是一個原因罷了。

    因此可以說call,和apply都是js中比較消耗性能的方法,在性能要求嚴格時,建議少用。

    下面在通過一段代碼看下jquery的each和js原生for循環(huán)性能對比

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head runat="server">

    <title>for與each性能比較</title>

    <script src="../Cks/jquery-1.7.1.min.js" type="text/javascript"></script>

    <script type="text/javascript" language="javascript">

    function getSelectLength() {

    var time1 = new Date().getTime();

    var len = $("#select_test").find("option").length;

    var selectObj = $("#select_test");

    for (var i = 0; i < len; i++) {

    if (selectObj.get(0).options[i].text == "111111") {

    selectObj.get(0).options[i].selected = true;

    break;

    }

    }

    var time2 = new Date().getTime();

    alert("for循環(huán)執(zhí)行時間:" + (time2 - time1));

    time1 = new Date().getTime();

    $("#select_test").find("option").each(function () {

    if ($(this).text() == "111111") {

    $(this)[0].selected = true;

    }

    });

    time2 = new Date().getTime();

    alert("each循環(huán)執(zhí)行時間:" + (time2 - time1));

    }

    </script>

    </head>

    <body>

    <form id="form1" runat="server">

    <div><select id="select_test">

    <option value='1'>111111</option>

    <option value='2'>222222</option>

    <option value='3'>333333</option>

    <option value='4'>444444</option>

    <option value='5'>5</option>

    <option value='6'>6</option>

    <option value='7'>7</option>

    <option value='8'>8</option>

    <option value='9'>9</option>

    <option value='10'>10</option>

    <option value='11'>11</option>

    <option value='12'>12</option>

    <option value='13'>13</option>

    <option value='14'>14</option>

    <option value='15'>15</option>

    <option value='16'>16</option>

    <option value='17'>17</option>

    <option value='18'>18</option>

    <option value='19'>19</option>

    <option value='20'>20</option>

    </select><input type="button" value="開始比較" onclick="getSelectLength();" /></div>

    <div>

    </form>

    </body>

    </html>

    輸入出入:

    for循環(huán)執(zhí)行時間:1

    each循環(huán)執(zhí)行時間:3

    兩次結果直接說明了問題。

    以上所述是小編給大家介紹的jQuery的Each比JS原生for循環(huán)性能慢很多的原因,希望對大家有所幫助

    更多信息請查看網絡編程

    2026上岸·考公考編培訓報班

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網