如何让我的javascript更快,更异步地运行

时间:2018-04-09 18:51:39

标签: javascript

我正在尝试制作一个扩展程序,在页面加载时为页面添加一些HTML。简而言之,它获取表格中的链接列表,加载这些链接,并抓取特定字符串并将其添加到我加载的原始页面。

以下是代码:由于网页的编码方式,我无法获得唯一ID,因为它们不存在所以忽略该部分。

var xhr = new XMLHttpRequest();
  for (i = 0; i < length; i++) {
    url = rows[i].getElementsByTagName("td")[0].getElementsByTagName('a')[0].getAttribute('href');
    insert = rows[i].insertCell(-1);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            //var Data = JSON.parse(xhr.responseText);
            var htmlString = xhr.responseText
              , parser = new DOMParser()
              , doc = parser.parseFromString(htmlString,"text/html")
              , test = doc.getElementById('page-wrapper').children[1]
              , ip_address = doc.getElementsByClassName('col-md-5')[0].children[5].children[0].children[0].children[10].innerHTML;
            insert.innerHTML = ip_address;
          }

    };
      xhr.open("GET",url,false);
      xhr.send();
    }

当我调用该函数时,它工作正常,但是加载需要很长时间,并且所有加载都在最后加载而不是在for循环的每次迭代完成时更新。我想减少加载所需的时间,但需要大量的时间,并且最后可能会立即更新耳塞。我试过搜索asycn javascript,但我试过的一些代码对我帮助不大。任何援助将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用现代Javascript:

rows.forEach(row => {
  fetch(row.querySelector('td:first-of-type a:first-of-type').getAttribute('href'))
  .then(res => res.json())
  .then(data => {
    // do manipulations with DOM
  })
  .catch(console.log)
})