웹 최적화 개념 - 필요한 유일한 가이드(진행 중)

9856 단어
"웹 성능을 완전히 최적화하는 방법은 무엇입니까? 이 기사를 읽고 나면 이해할 수 있을 것입니다."



목차



1. What is and how to use CDN
  • 1.1 What is CDN exactly?
  • 1.2 What's the benefits of CDN

  • 2. Why do we need Lazy Load
    3. Reflow and Repaint

    기타 콘텐츠









    1. CDN이란 무엇이며 CDN을 적용하는 방법

    1.1 What is CDN exactly?

    CDN (Content Delivery Network) refers to a computer network system connected to each other through the closest server. So that content such as music, pictures, videos, applications and other static resources can be send to users more reliable and efficiently. CDN provides high-performance, scalability and low-cost network content to users.

    1.2 What's the benefits of CDN 5 10 6 4

    In terms of performance, the role of introducing CDN is to:

    • Users receive content from the nearest server, with lower latency , faster content loading speed.

    • Part of the resource request is allocated to the CDN, reducing the load on the server

    In terms of network security, CDN helps defend against DDoS, MITM and other network attacks.




    Intersection Observer API는 대상 요소와 상위 요소 또는 최상위 문서의 뷰포트와의 교차점에서 변경 사항을 비동기식으로 관찰하는 방법을 제공합니다.

    Intersection Observer API를 사용하면 다음 상황 중 하나가 발생할 때 호출되는 콜백을 구성할 수 있습니다.

    대상 요소는 장치의 뷰포트 또는 지정된 요소와 교차합니다. 지정된 요소를 Intersection Observer API의 목적을 위해 루트 요소 또는 루트라고 합니다.
    관찰자에게 처음으로 대상 요소를 관찰하라는 요청을 받을 때입니다.

    2. Lazy Load가 필요한 이유

    Lazy loading is also called on-demand loading. It refers to the lazy loading of image data in long page website.

    In a relatively long web page, if many pictures all loaded at the same time but the user can only see the part of the picture in the viewport, it wastes a lot of performance.

    The above problems can be solved. Before scrolling the screen, pictures outside the visualization area will not be loaded, it will only be loaded when it shows up in the viewport. This makes the page load faster and reduces the load on the server.

    How do we achieve lazy load

    In HTML5, image tag has an attribute call data-src to temporarily store resource path as we would not want it to be load immediately. After that we will keep monitoring the relative postion between the image and viewport. Once it appears in the viewport, we will switch the data in data-src to src .

    There are two ways to monitoring the relative postion between the image and viewport.

    1. Calculate the height manually

    • window.innerHeight
      The read-only innerHeight property of the Window interface returns the interior height of the window in pixels.

    • document.body.scrollTop
      The Element.scrollTop property gets or sets the number of pixels that an element's content is scrolled vertically.

    • imgs.offsetTop
      The HTMLElement.offsetTop read-only property returns the distance of the outer border of the current element relative to the inner border of the top of the offsetParent node.

    if img.offsetTop < window.innerHeight + document.body.scrollTop , it indicates that the image has entered viewport

    <div class="container">
         <img src="loading.gif"  data-src="pic.png">
         <img src="loading.gif"  data-src="pic.png">
         <img src="loading.gif"  data-src="pic.png">
    </div>
    <script>
    var imgs = document.querySelectorAll('img');
    function lazyLoad(){
            var scrollTop = document.body.scrollTop;
            var winHeight= window.innerHeight;
            for(var i=0;i < imgs.length;i++){
                if(imgs[i].offsetTop < scrollTop + winHeight ){
                    imgs[i].src = imgs[i].getAttribute('data-src');
                }
            }
        }
      window.onscroll = lazyLoad();
    </script>
    

    2. Intersection Observer API

    Read more about implementation about Intersection Observer API

    - 다시 칠하기
    이름에서 알 수 있듯이 repaint는 요소의 가시성에 영향을 주지만 레이아웃에는 영향을 미치지 않는 요소의 스킨이 변경됨에 따라 화면에 요소를 다시 그리는 것입니다.

    예시.
  • 요소의 가시성을 변경합니다.
  • 요소의 윤곽을 변경합니다.
  • 배경 변경.

  • 다시 그리기를 시작합니다.
    Opera에 따르면 다시 그리기는 브라우저가 다른 모든 dom 노드의 가시성을 확인/확인하도록 하기 때문에 비용이 많이 드는 작업입니다.

    - 리플로우
    리플로우는 문서의 일부 또는 전체를 다시 렌더링할 목적으로 문서에 있는 요소의 위치와 형상을 다시 계산하는 것을 의미합니다. 리플로우는 브라우저에서 사용자 차단 작업이기 때문에 개발자가 리플로우 시간을 개선하는 방법을 이해하고 다양한 문서 속성(DOM 깊이, CSS 규칙 효율성, 다양한 유형의 스타일 변경)이 리플로우에 미치는 영향을 이해하는 데 유용합니다. 시각. 때때로 문서의 단일 요소를 리플로우하려면 상위 요소와 그 뒤에 오는 모든 요소를 ​​리플로우해야 할 수 있습니다.

    다시 그리기 및 리플로우는 비용이 많이 들 수 있고 사용자 경험을 손상시킬 수 있으며 UI를 느리게 보이게 할 수 있습니다.

    리플로를 줄이고 다시 칠하는 방법은 무엇입니까?
  • DOM을 조작할 때 하위 수준 DOM 노드에서 작업을 시도합니다.
  • 변경 사항이 다른 요소에 영향을 미치지 않도록 문서 흐름에서 요소를 유지하려면 절대 또는 고정을 사용하십시오.
  • DOM의 빈번한 조작을 피하기 위해 documentFragment을 만들고 여기에 모든 DOM 작업을 적용한 다음 마지막으로 문서로 업데이트할 수 있습니다. 왜 React를 사용하지 않습니까?

  • 애니메이션을 최적화하는 방법?

    위에서 언급한 것과 동일합니다. 변경 사항이 다른 요소에 영향을 미치지 않도록 문서 흐름에서 요소를 유지하려면 절대 또는 고정을 사용합니다.

    좋은 웹페이지 즐겨찾기