亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

有效提高JavaScript執行效率的幾點知識

2019-11-20 13:16:04
字體:
來源:轉載
供稿:網友

為了提供新鮮、別致的用戶體驗,很多網站都會使用 JavaScript 來改善設計、驗證表單、檢查瀏覽器,以及Ajax請求,cookie操作等等,實現無刷新動態效果 。但是,要將大量內容在瀏覽器呈現,如果處理不好,網站性能將會急劇下降。所以我們有必要了解下,如何提高JavaScript的執行效率。

JavaScript 函數

在JavaScript 中,函數在使用前會預編譯。盡管有些時候下可以使用字符串代替函數,但是每次執行這段JavaScript 代碼時都會重新解析,影響性能。

1、eval例子

復制代碼 代碼如下:

eval('output=(input * input)');
// 建議改成:
eval(new function() { output=(input * input)});

2、setTimeout例子

復制代碼 代碼如下:

setTimeout("alert(1)", 1000);
// 建議改成:
setTimeout(function(){alert(1)}, 1000);

使用函數代替字符串作參數確保新方法中的代碼能被 JavaScript 編譯器優化。

JavaScript作用域

JavaScript作用域鏈中的每個作用域都包含幾個變量。理解作用域鏈很重要,這樣才能利用它。

復制代碼 代碼如下:

var localVar = "global"; //全局變量

function test() {

  var localVar = "local"; //局部變量

  //局部變量
  alert(localVar);

  //全局變量
  alert(this.localVar);

  //查找document在局部變量找不到,就查找全局變量
  var pageName = document.getElementById("pageName");
}

使用局部變量比使用全局變量快得多,因為在作用域鏈中越遠,解析越慢。下圖顯示了作用域鏈結構:

如果代碼中有 with 或 try-catch 語句,作用域鏈會更復雜,如下圖:

JavaScript字符串

JavaScript中一個非常影響性能的函數是字符串連接,一般情況都是使用 + 號來實現拼接字符串。但是早期瀏覽器沒有對這樣的連接方式做優化,導致在連續創建和銷毀字符串嚴重降低JavaScript執行效率。

復制代碼 代碼如下:

var txt = "hello" + " " + "world";

建議改成:

復制代碼 代碼如下:

var o = [];
o.push("hello");
o.push(" ");
o.push("world");
var txt = o.join();

我們再簡單封裝一下:

復制代碼 代碼如下:

function StringBuffer(str) {
    var arr = [];
    arr.push(str || "");
    this.append = function(str) {
        arr.push(str);
        return this;
    };
    this.toString = function() {
        return arr.join("");
    };
};

然后這樣子調用:

復制代碼 代碼如下:

var txt = new StringBuffer();
txt.append("Hello");
txt.append(" ");
txt.append("World");
alert(txt.toString());

JavaScript DOM操作

HTML Document Object Model (DOM) 定義了訪問和操作 HTML 文檔的標準方法。它將 HTML 文檔表示成節點樹,其中包含元素、屬性和文本內容。通過使用 HTML DOM,JavaScript 能訪問 HTML 文檔中所有節點并操作它們。

DOM重繪

每次修改到頁面的DOM對象,都涉及到DOM重繪,瀏覽器都會重新渲染頁面。所以降低DOM對象的修改次數,可以有效地提高JavaScript 的性能。

復制代碼 代碼如下:

for (var i = 0; i < 1000; i++ ) {
  var elmt = document.createElement('p');
  elmt.innerHTML = i;
  document.body.appendChild(elmt);
}

建議改成:

復制代碼 代碼如下:

var html = [];
for (var i = 0; i < 1000; i++) {
  html.push('<p>' + i + '</p>');
}
document.body.innerHTML = html.join('');

DOM訪問

通過DOM可以訪問到HTML文檔中的每個節點。每次調用getElementById()、getElementsByTagName()等方法,都會重新查找并訪問節點。所以將查找到的DOM節點緩存一下,也可以提高JavaScript 的性能。

復制代碼 代碼如下:

document.getElementById("p2").style.color = "blue";
document.getElementById("p2").style.fontFamily = "Arial";
document.getElementById("p2").style.fontSize = "larger";

建議改成:

復制代碼 代碼如下:

var elmt = document.getElementById("p2");
elmt.style.color = "blue";
elmt.style.fontFamily = "Arial";
elmt.style.fontSize = "larger";

DOM遍歷

DOM遍歷子元素通常都是按索引循環讀取下一個子元素,在早期瀏覽器下這種讀取方式執行效率很低,利用nextSibling方式可以提高js遍歷DOM的效率。

復制代碼 代碼如下:

var html = [];
var x = document.getElementsByTagName("p");//所有節點
for (var i = 0; i < x.length; i++)  {
  //todo
}

建議改成:

復制代碼 代碼如下:

var html = [];
var x = document.getElementById("div");//上級節點
var node = x.firstChild;
while(node != null){
  //todo
  node = node.nextSibling;
}

JavaScript 內存釋放

在web應用中,隨著DOM對象數量的增加,內存消耗會越來越大。所以應當及時釋放對象的引用,讓瀏覽器能夠回收這些內存。

釋放DOM占用的內存

復制代碼 代碼如下:

document.getElementById("test").innerHTML = "";

將DOM元素的innerHTML設置為空字符串,可以釋放其子元素占用的內存。

釋放javascript對象

復制代碼 代碼如下:

//對象:
obj = null
//對象屬性:
delete obj.property
//數組元素:
arr.splice(0,3);//刪除前3個元素

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国内揄拍国内精品对白| 亚州欧美日韩中文视频| 国产精品一二三视频| 亚洲天堂成人在线| 亚洲国产精品网站| 国语自产在线不卡| 18性欧美xxxⅹ性满足| 亚洲欧美在线磁力| 精品视频9999| 欧美精品在线视频观看| 亚洲一级片在线看| 精品视频久久久久久久| 亚洲视频在线看| 91精品久久久久久久久久另类| 粉嫩av一区二区三区免费野| 国产精品极品美女在线观看免费| 欧美日韩国产中文字幕| 欧美日韩精品在线播放| 国产精品对白刺激| 青草青草久热精品视频在线观看| 人体精品一二三区| 亚洲一区二区中文字幕| 国产精品久久久久免费a∨大胸| 久久五月情影视| 国产精品久久久久久搜索| 亚洲成年人在线播放| 亚洲精品网站在线播放gif| 欧美另类xxx| 麻豆成人在线看| 欧美成人免费一级人片100| 欧美激情伊人电影| 欧美另类极品videosbest最新版本| 精品在线观看国产| 色噜噜狠狠色综合网图区| 综合激情国产一区| 欧美成人激情图片网| 91sao在线观看国产| 久久精品91久久久久久再现| 国产一区二区三区久久精品| 亚洲视频日韩精品| 久久久精品在线| 亚洲精品之草原avav久久| 日韩高清免费在线| 日韩精品有码在线观看| 精品一区二区三区四区在线| 精品视频久久久久久久| 久久99久久亚洲国产| 久久精品国产久精国产思思| 欧美日韩激情视频| 中文字幕在线日韩| 国产日本欧美在线观看| 精品国产一区二区三区久久狼黑人| 日韩美女福利视频| 亚洲天堂av在线免费| 日韩精品欧美国产精品忘忧草| 欧美一级片在线播放| 欧美大片第1页| 中文字幕自拍vr一区二区三区| 色在人av网站天堂精品| 奇米一区二区三区四区久久| 日韩精品免费观看| 亚洲免费影视第一页| 97色在线视频观看| xxx一区二区| 欧美亚洲免费电影| 国产精品青草久久久久福利99| 亚洲国产日韩欧美在线99| 国产精品成人免费电影| 日韩中文字幕在线看| 97人洗澡人人免费公开视频碰碰碰| 精品国产91久久久久久| 日韩在线观看精品| 最近2019中文字幕mv免费看| 亚洲国产高清福利视频| 亚洲少妇激情视频| 伊人久久久久久久久久久久久| 成人午夜一级二级三级| 国产精品久久久久久久久免费| **欧美日韩vr在线| 国产精品人人做人人爽| 欧美激情亚洲综合一区| 亚洲国产中文字幕在线观看| 亚洲香蕉在线观看| 欧美一性一乱一交一视频| 在线电影av不卡网址| 成人中文字幕+乱码+中文字幕| 久久久久久国产精品久久| 国产一级揄自揄精品视频| 国产欧美精品一区二区| 久久精品国产久精国产思思| 国产精品男人的天堂| 日韩免费精品视频| 亚洲国模精品一区| 久久视频在线观看免费| 久久精品亚洲热| 国产精品视频免费在线| 欧美第一页在线| 亚洲精品中文字幕女同| 国产精品99久久久久久白浆小说| 丝袜情趣国产精品| 国产精品三级美女白浆呻吟| 国产免费一区视频观看免费| 日韩av免费在线| 日韩精品有码在线观看| 欧美成人激情视频免费观看| 91精品国产综合久久香蕉最新版| 久久精品视频va| 国产精品久久久久久久久久免费| 久久香蕉国产线看观看网| 亚洲人午夜精品免费| 久久久精品国产亚洲| 色偷偷91综合久久噜噜| 国内揄拍国内精品| 国产综合久久久久| 国产日韩视频在线观看| 国产有码在线一区二区视频| 欧美精品激情blacked18| 国产精品九九久久久久久久| 国产精品久久久av久久久| 欧美大秀在线观看| 午夜免费久久久久| 一道本无吗dⅴd在线播放一区| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品手机播放| 亚洲男人天堂九九视频| 久久精品福利视频| 久久久久久久久久国产| 日韩国产高清视频在线| 亚洲午夜女主播在线直播| 国色天香2019中文字幕在线观看| 91精品国产91久久久久久最新| 欧美又大又粗又长| 成人久久一区二区| 夜色77av精品影院| 欧美黄色片免费观看| 日韩视频第一页| 欧美中文字幕在线| 色噜噜亚洲精品中文字幕| 97久久超碰福利国产精品…| 日韩的一区二区| 在线激情影院一区| 成人黄色在线观看| 久久综合亚洲社区| 国内精品在线一区| 国产欧美一区二区三区在线| 欧美日韩色婷婷| 综合国产在线观看| 亚洲伊人成综合成人网| 久久久女女女女999久久| 91av中文字幕| 国产成人精品av在线| 亚洲男人天天操| 色婷婷**av毛片一区| 国产欧美日韩高清| 亚洲男人的天堂在线播放| 一个人看的www欧美| 亚洲网在线观看| 中文字幕av一区二区三区谷原希美| 欧美大尺度激情区在线播放| 亚洲偷熟乱区亚洲香蕉av| 欧美亚洲在线播放| 日韩av片免费在线观看| 国产亚洲成精品久久| 国产精品视频网站|