브라우저가 다른 성능 결과 인 Smashing Magazine을 생성하는 이유

브라우저가 다른 성능 결과 인 Smashing Magazine을 생성하는 이유

나는 Debugbear의 Matt Zeunert와 대화를 나누고 있었고, 그 과정에서 그는이 일을 부적절하게 언급했습니다. 단단한 모드 브라우저가 리소스를 가져오고 우선 순위를 정하는 방법을 설명 할 때. 나는 그가 무슨 말을하는지 알았지 만 궁극적으로 물어봐야했던 것처럼 고개를 끄덕였다. 도대체는 “꽉”모드는 무엇입니까?

내가 돌아온 것은 두 개의 유물이었다. 그중 하나는 Akamai 웹 공연 전문가 Robin Marx의 다음과 같은 비디오입니다.

다른 아티팩트는 2015 년 Patrick Meenan이 원래 게시 한 Google 문서이지만 최근 2023 년 11 월에 다소 업데이트되었습니다. Patrick의 블로그는 2014 년부터 비활성화되어 있으므로 검토 할 Google 문서에 대한 링크를 드러냅니다.

그것이 내가 가진 전부이며 웹에서 웹에서 찾을 수있는 것은 웹 작동 방식에 큰 영향을 미치는 Tight Mode라는이 제품에 대해 찾을 수있는 것입니다. Robin은 그의 프레젠테이션에서 정보가 부족하다는 것을 인정했으며, 그의 대화에서 1 인칭 연구의 양은 주목할 만하고 다른 브라우저가 다른 우선 순위를 가진 다른 자원을 어떻게 다른 자원을 가져 오는지 설명하고 설명하기 때문에 전화 할 가치가 있습니다. 주제에 대한 자료가 부족하다는 점을 감안할 때, 나는 Robin의 연구와 Patrick의 업데이트 된 기사에서 빼앗아 갈 수있는 것을 공유하기로 결정했습니다.

두 단계 중 첫 번째입니다

Patrick의 원래 출판 날짜가 2015 년에 떨어지고 있다는 사실은 우리 가이 시점에서 대략 10 년 된 것에 대해 이야기하고 있다는 사실에 놀라운 일이 아닙니다. 출판물에 대한 2023 업데이트는 이미 “웹 시절”에서는 이미 상당히 오래되었지만, 그것을 찾아 보려고 할 때는 여전히 타이트한 모드는 없습니다.

그렇다면 단단한 모드를 어떻게 정의합니까? 이것이 Patrick이 설명하는 방식입니다.

“크롬은 자원을 2 단계로로드합니다. “타이트 모드”는 초기 단계 및 제약 조건입니다 [sic] 신체가 문서에 부착 될 때까지 우선 순위가 낮은 리소스를로드합니다 (본질적으로 머리의 스크립트가 실행 된 후).”

– Patrick Meenan

그래서 우리는 Chrome이 네트워크에서 리소스를 가져 오기 위해 사용하는이 두 부분 프로세스를 가지고 있으며 첫 번째 부분은 “우선 순위가 낮은 리소스”가 아닌 모든 것에 초점을 맞추고 있습니다. 우리는 브라우저에 어떤 리소스를 알리는 방법이 있습니다 우리 스크롤에서 뷰포트에 입력 할 때 자원을 비동기로로드하는 페치 우선 순위 API 및 게으른로드 기술의 형태로 우선 순위가 낮다고 생각합니다. 그러나 Tight Mode에는 먼저로드 할 리소스를 결정하는 자체 방법이 있습니다.

크롬 타이트 모드 스크린 샷
그림 1 : Chrome은 자원을 두 단계로로드하며, 첫 번째는 “Tight Mode”라고합니다. (큰 미리보기)

단단한 모드는 리소스를 구별하여 높은 우선 순위와 중간 우선 순위로 표시된 모든 것을 취합니다. 다른 모든 것은 제약을 받고 외부에 남겨져 있으며, 신체가 문서에 단단히 붙어있을 때까지 보면 차단 스크립트가 실행되었음을 알 수 있습니다. 그 시점에서 두 번째 로딩 단계에서 우선 순위가 낮은 자원이 문에서 허용됩니다.

그것에 큰 경고가 있지만 우리는 거기에 갈 것입니다. 주목해야 할 중요한 점은 …

크롬과 사파리는 단단한 모드를 시행합니다

예, Chrome과 Safari는 백그라운드에서 작동하는 단단한 모드의 작동 형태를 가지고 있습니다. 마지막 이미지는 Chrome의 단단한 모드를 보여줍니다. Safari의 다음을보고 두 가지를 비교해 봅시다.

Safari의 단단한 모드와 Chrome의 단단한 모드를 비교하는 스크린 샷.
그림 2 : Safari의 단단한 모드와 Chrome의 단단한 모드 비교. Chrome은 우선 순위가 높은 5 개의 이미지가 타이트한 모드에서 빠져 나올 수 있도록 허용합니다. (큰 미리보기)

그것을 봐! Safari는 Chrome과 마찬가지로 초기 Fetch에서 우선 순위가 높은 리소스를 차별하지만 두 브라우저간에 상당히 다른 로딩 동작을 얻습니다. Safari가 Chrome이 허용하는 중간 우선 순위로 표시된 처음 5 개의 PNG 이미지를 제외하는 방식에 주목하십시오. 다시 말해, Safari는 정확히 동일한 HTML로 작업하더라도 모든 우선 순위가 높은 품목을로드 할 때까지 모든 우선 순위 및 저 우선 순위 자원이 줄을 서서 기다립니다. Chrome이 마지막 이미지에서 볼 수 있듯이 Chrome은 타이트한 모드에서 우선 순위가 높은 리소스를 제외한 마지막 이미지에서 볼 수 있듯이 Safari의 행동이 가장 의미가 있다고 말할 수 있습니다. 우리가 갈 수있는 약간의 톰 풀리가 분명히 있습니다.

이 모든 것에서 Firefox는 어디에 있습니까? 페이지에서 리소스의 우선 순위를 평가할 때는 추가 강화 조치가 필요하지 않습니다. 우리는 이것을 자원을 가져오고로드하기위한 “고전적인”폭포 접근법이라고 생각할 수 있습니다.

크롬, 사파리 및 파이어 폭스 타이트 모드 비교
그림 3 : Chrome과 Safari는 단단한 모드를 구현했으며 Firefox는 간단한 폭포를 유지합니다. (큰 미리보기)

크롬과 사파리는 단단한 모드를 다르게 트리거합니다

로빈은 그의 대화에서 하루처럼 이것을 분명히합니다. Chrome과 Safari는 모두 단단한 모드 지지자이지만 다음과 같이 설명 할 수있는 다른 상황에서 트리거됩니다.

크롬 원정 여행
단단한 모드가 트리거되었습니다 JS를 차단하는 동안 is busy. While blocking JS or CSS anywhere is busy.

Notice that Chrome only looks at the document when prioritizing resources, and only when it involves JavaScript. Safari, meanwhile, also looks at JavaScript, but CSS as well, and anywhere those things might be located in the document — regardless of whether it’s in the or . That helps explain why Chrome excludes images marked as High priority in Figure 2 from its Tight Mode implementation — it only cares about JavaScript in this context.

So, even if Chrome encounters a script file with fetchpriority="high" 문서 본문에서 파일은 “높은”우선 순위로 간주되지 않으며 나머지 항목 후에로드됩니다. 한편 사파리는 영광입니다 fetchpriority 문서의 어느 곳에서나. 이것은 Chrome이 테이블에 두 개의 스크립트를 남겨 두는 이유를 설명하는 데 도움이되므로 그림 2에서 Safari는 단단한 모드에서로드하는 것처럼 보입니다.

사파리가 그 과정에서 이상한 일을하지 않는다고 말하는 것은 아닙니다. 다음 마크 업이 주어지면 :


  
  


당신은 놓쳤을 수도 있습니다