Узел js 'readline' - Неэффективные компактные метки вблизи предела кучи Не удалось выделить - PullRequest
1 голос
/ 01 июля 2019

Это то, что я делаю в коде

По сути, делаю очистку веб-страниц

Я читаю текстовый файл с 3500 ссылками, затем я читаю каждую ссылку, фильтрую нужную ивыполнение запроса, чтобы получить код состояния, ссылку и заголовок страницы (используя cheerio). Я замедлил процесс с помощью асинхронной структуры итератора для чтения построчно, а также с помощью axios и async await.Все работает до тех пор, пока, как 900-я ссылка, я получаю эту Нестабильную ОШИБКУ ФАТАЛЬНОЙ 'ОШИБКА ФАТАЛЬНОЙ: неэффективные компактные метки рядом с пределом кучи Выделение не удалось - куче JavaScript не хватает памяти' enter image description here

Понятия не имею, что здесь происходит, этот веб-сервер выгоняет меня (не похоже) или мой код написан плохо, и движок v8 его не обрабатывает? (более вероятно)

Вот мой код, если кто-то хочет попробовать работать с большим количеством ссылок, я использовал https://hackertarget.com/extract-links/, чтобы получить ссылки, а затем поместил его в текстовый файл.

var request = require('request');
var cheerio = require('cheerio');
var URL = require('url-parse');
var axios = require('axios');
const fs = require('fs');
const readline = require('readline');
const timeout = require('./timeout')

var main = [];
async function processLineByLine() {
  const rl = readline.createInterface({
    input: fs.createReadStream('C:/Users/T440/Documents/crawl/links.txt'),
    crlfDelay: Infinity
  });

  for await (const line of rl) {
    if (line.startsWith('https://www.example.com')) {
      var encodeLink = encodeURI(line);
    
      const response =  await axios.get(encodeLink).catch((err)=>{
        var Status_ErrorsCatchaxios = {
            "status Code": err.response.status ?error.response.status:"No status code available",
            "Page title:": $('title').text()?$('title').text():'No title avaialble',
            "Original Link": encodeLink?encodeLink:"No Original Link Available",
            "errorCode":err
          }
          main.push(Status_ErrorsCatchaxios)
      })
      try {
        const body = response.data;
        if (response.status === 200) {
          // Parse the document body
          var $ = cheerio.load(body);
          var Status_200 = {
            "status Code": response.status,
            "Page title:": $('title').text(),
            "Original Link": encodeLink,
          }
          main.push(Status_200)
        }
  
        if (response.status === 302 || response.status === 404 || response.status === 500) {
          // Parse the document body
          var Status_Errors = {
            "status Code": response.status,
            "Page title:": $('title').text(),
            "Original Link": encodeLink,
          }
          main.push(Status_Errors)
        }
            fs.writeFile("C:/Users/T440/Documents/crawl/output.json", JSON.stringify(main), (err) => {
            if (err) console.log(err);
            console.log("Successfully Written to File.");
          });
      } catch (error) {

          var Status_ErrorsCatch = {
          "status Code": response.status ?error.response.status:"No status code available",
          "Page title:": $('title').text()?$('title').text():'No title avaialble',
          "Original Link": encodeLink?encodeLink:"No Original Link Available",
        }
        main.push(Status_ErrorsCatch)
      }      
        
    }
  }
}
processLineByLine()
...