[ブートキャンプの課題]Day 03-ネットワークローミングとLRUキャッシュ


この文章はBoost Campの挑戦中に学んだことをまとめた.

1.Webスクロール

  • 使用ライブラリ
  • Axios:ブラウザおよびノード環境で使用するためのPromiseベースのHTTPクライアント、サイトのHTMLをインポートするためのライブラリ
  • .
  • Cheerio:Axiosの結果は、受信データから必要なデータを抽出するためのライブラリ
  • である.
    npm init -y
    npm install axios --save
    npm install cheerio --save
  • ソースコード
  • const axios = require("axios");
    const cheerio = require("cheerio");
    
    const getHtml = async (keyword) => {
        try {
          return await axios.get(keyword); // URL의 html을 가져옴
        } catch (error) {
          console.error(error);
        }
    };
    
    const parsing = async (keyword) => {
        const html = await getHtml(keyword); // html 변수에 html이 담겨있음
        const $ = cheerio.load(html.data);
        const $data = $(".total_wrap"); // class가 g인 태그들을 data에 담는다.
    
        let list = [];
        $data.each((index, elem) => {
            cnt = index+1;
    
            list.push({
                title: "결과"+ cnt + ".제목: "+$(elem).find("div.total_tit").text(),
                link: "결과"+ cnt + ".링크: "+$(elem).find(".thumb").attr('href'),
                content: "결과"+ cnt + ".미리보기: "+$(elem).find(".api_txt_lines.dsc_txt").text(),
            })
        });
        console.log(list);
    }
    
    parsing("https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=apple")
  • コンソールI/O
  •   const readline = require('readline');
      const rl = readline.createInterface({
          input: process.stdin,
          output: process.stdout
      });
    
      let input = [];
      rl.on('line', function(line) {
          input = line;
          // 비동기적인 함수를 사용하려면 이 사이에 사용해야한다.(입력을 대기함)
          rl.close(); // 삭제시 무한으로 입력을 받는다.
      }).on('close', function() {
          console.log(input)
          process.exit(); 
      })

    2.キャッシュの交換方法


    キャッシュを置換する方法は、オペレーティングシステムのカリキュラムで一般的なページ置換アルゴリズムと同じキャッシュ置換アルゴリズムを使用します.
    キャッシュ置換アルゴリズムは、キャッシュに空き領域がない場合、新しいコンテンツがメインメモリからキャッシュにコピーされると、既存のコンテンツをキャッシュから削除し、キャッシュから削除するブロックの内容を決定する必要があります.
    典型的なアルゴリズムはFIFO、OPT、LRU、LFUおよびMFUであるが、最も理想的なアルゴリズムはOPTアルゴリズムである.
    しかし、OPTアルゴリズムは、将来発生することを予測し、最長時間使用できないページを置き換えることができるため、実装不可能な方法である.
    したがって,OPTよりもLRUの方が多く,効果も少ない.

    LRU(Least Recently Used)

  • 最長未使用ページの交換方法