브라우저 입력 URL 페이지 표시 및 최적화

4450 단어

url: 브라우저를 입력하면 캐시를 검사하고 로컬-공유기-전망 dns를 분석하여 서버 ip를 가리킵니다.

  • 캐시 요청 캐시 컨트롤 1.max-age=0, if-none-match만 협상 etag의hash2.캐시가 없습니다
  • 캐시 응답 캐시 컨트롤 1.max-age=0, no-cache, etag만 if-none-match 협상hash2.no-store는 프라이버시를 캐시하지 않습니다
  • DNS 캐시 1.브라우저 캐시의 dns 2.이 컴퓨터host 파일의 맵 3.라우터의 매핑 4.네트워크 서비스 업체의 매핑(로컬 DNS 서버까지) 5.root 도메인 이름 서버 6.최상위 도메인 이름 - 기본 도메인 이름 서버 - 결과 캐시는 로컬 DNS 서버에 있습니다

  • .https HSTS 정책으로 기본 접근 http 리디렉션:response headers:Strict-Transport-Security:max-age=3153600 모든 요청을 https로 리디렉션합니다. 첫 번째 접근은 설정이 공망에 등록될 수 있는지 모릅니다

    원격 서버 요청: TLS 연결 2차 RTT, TCP 3차 악수 RTT,nginx 전송 대응하는 자원에 서버 캐시 검사

  • TLS RTT 2회 최적화, 브라우저 캐시 대칭 키 1.클라이언트 발송 k1 및 암호화 방안 목록 2.서버 발송 k2, 인증서, 공개 키, 확정된 암호화 방안 3.client 인증 인증서, 공개 키 암호화 k3 발송 4.서버 키 해제 k3 5.클라이언트 서버는 k1 k2 k3 대칭 암호화 통신을 사용합니다
  • ssl_session_tickets on;
    ssl_session_ticket_key current.key;
    ssl_session_ticket_key previous.key;
    
  • TCP 3차 악수 RTT 최적화
  • request header:connection: keep-alive
  • TCP 연결을 다시 사용합니다

  • 파이프라인화 http 1.1
  • keep-alive를 바탕으로
  • 한 번 발송을 요청합니다
  • 응답은 순서대로 막힐 수 있습니다

  • 관선화와 다중 복용의 차이
  • 파이프라인화는 keep-alive를 바탕으로 TCP를 3회 복용하여 악수한다
  • 한 번에 여러 개의 요청을 보내도 순서가 변하지 않습니다
  • 다중 복용은 http2 여러 개의 요청 응답을 병행합니다


  • 서버 연결 끊기는 네 번의 손 흔들기

  • 클라이언트가 연결 끊기를 요청합니다
  • 서비스 측에서 차단 요청을 확인합니다
  • 서버 발송 완료 남은 데이터close
  • 클라이언트 close 회답

  • 브라우저 검사 상태 코드, 304 협상 캐시, 301302 리디렉션

  • 304req:if-none-match,res:etag협상hash
  • 301 영구 리디렉션 브라우저 캐시
  • 302 임시 리디렉션 브라우저는 캐시되지 않습니다

  • 반환 컨텐트 해석, 다시 정렬

  • 페이지 생성 과정
  • html는dom트리로 해석됩니다
  • css는 cssom으로 해석됩니다
  • dom 트리와 cssom을 결합하여render tree를 생성합니다
  • 레이아웃flow를 진행하면 렌더링 트리의 노드를 합성합니다
  • 화면에 페인트를 그립니다
  • 문서 해석 과정의 이벤트 트리거 1 해석 시작 html 문서 트리거readystatechange:load2 DOMContentLoaded 이벤트, 원시 html 해석은 스타일 자원 불러오는 것을 포함하지 않으며,readystatechange:interactive 3load 이벤트를 트리거합니다. 자원 불러오는 것이 끝난 후에는readystatechange:complete를 트리거합니다
  • defer async 자원의 script는 막히지 않습니다. 일반 script 다운로드가 막힌 다음에 막힌 defer는 html 해석을 먼저 다운로드한 후에 실행합니다. 막힌 것이 없습니다. async가 다운로드된 후에 바로 실행합니다. 막힌 실행 단계입니다
  • 재배치 1.dom의 삭제 검사 2.브라우저 창의 변화 스크롤 3.사용자의 입력 4.dom의 모양 크기 애니메이션 5.다시 배열하면 반드시 다시 그리기 6.영향 범위가 넓기 때문에 고정dom 용기의 크기는 다른dom에 영향을 주지 않는 것이 가장 좋다
  • 다시 그리기 1.dom의 색 배경 2.domborder 스타일은 원각 함몰 3.매번 다시 그리기 전에 requestAnimationFrame 을 실행합니다

  • 재배치 최적화

  • 대상dom 부모 용기의 고정 크기, 재배열은 다른dom에 영향을 주지 않습니다
  • //   p   dom   h5   h4,  p  
    
      

    h4

    Name:BDing

    h5
  • 읽기와 쓰기 조작 분리
  • //  ,  ,  4 
    div.style.left = '10px';
    div.style.top = '10px';
    div.style.width = '20px';
    div.style.height = '20px';
    console.log(div.offsetLeft);
    console.log(div.offsetTop);
    console.log(div.offsetWidth);
    console.log(div.offsetHeight);
    
  • 스타일 집중 변경
  • //   className   cssText  
    el.className += " otherclass"
    el.style.cssText += "; left: " + left + "px; top: " + top + "px;";
    
  • 캐시 레이아웃 정보
  • // bad      
    div.style.left = div.offsetLeft + 1 + 'px';
    div.style.top = div.offsetTop + 1 + 'px';
    // good    
    var curLeft = div.offsetLeft;
    var curTop = div.offsetTop;
    div.style.left = curLeft + 1 + 'px';
    div.style.top = curTop + 1 + 'px';
    
  • dom 오프라인 변경
  • dom.display = 'none'
    //  dom 
    dom.display = 'block'
    ----
    const fragment = document.createDocumentFragment();
    // DocumentFragment   dom
    list.appendChild(fragment);
    ----
      dom,  dom
    var p = document.getElementById("para1"),
    var p_prime = p.cloneNode(true);
    
  • 절대 포지셔닝 고정 포지셔닝 포지셔닝 포지셔닝 속성은 absolute 또는fixeddom 재배열 소모가 적습니다
  • 애니메이션 이동 최적화 1px 증가 3px 감소 재배열 시작 GPU 조작
  • react 스케줄링 최적화 스케줄링 모듈 원리 - requestIdleCallback 실현
  • 다시 그린 프레임은 16.67이고 성능은 33.33이다
  • rAF는 현재 프레임의 시작 시간과 다음 프레임의 시작 시간을 계산합니다
  • react 업데이트 작업을addEventLisnter 대기열에 밀어넣습니다
  • 프레임당 업데이트 순서: 대기열 react 작업 -> UI 렌더링 애니메이션 -> idle 리셋
  • 매번 순환 대기열은 react 작업 만료 시간에 따라 만료 여부를 판단하기 시작하고, 만료되면 react 업데이트를 실행하고, UI 작업을 실행합니다


  • 참고

    좋은 웹페이지 즐겨찾기