스크롤없이 볼 수있는 컨텐츠에서 렌더링 차단 JavaScript 및 CSS 제거


30

Drupal 7 사이트를 만들고 있습니다. 이들은 내가 사용하는 모듈 중 일부입니다 : Adaptivetheme (테마), Views and Content Panes, 패널, 미니 패널, 모든 곳의 패널, 페이지 관리자, Superfish 메뉴, 추가, 선택 (드롭 다운).

내 사이트 성능을 개선하고 CSS 및 JS 파일을 처리하기 위해 Advagg 모듈을 사용하고 있습니다.

GooglePagespeed 테스트를 실행할 때 "수정해야 함"이라는 오류가 발생합니다.

스크롤없이 볼 수있는
컨텐츠 에서 렌더링 차단 JavaScript 및 CSS 제거 페이지에는 6 개의 차단 스크립트 리소스와 8 개의 차단 CSS 리소스가 있습니다. 이로 인해 페이지 렌더링이 지연됩니다.
다음 리소스가로드되기를 기다리지 않고 페이지의 폴드 컨텐츠를 렌더링 할 수 없습니다. 차단 리소스를 지연 또는 비동기 적으로로드하거나 해당 리소스의 중요 부분을 HTML에 직접 인라인하십시오.

Google이 제공하는 정보입니다.

Advagg 모듈 또는 Drupal 코어의 설정을 변경하고이 문제를 해결할 수있는 방법이 있습니까?

이 목표를 달성 할 수있는 다른 방법이 있습니까?

업데이트 -mikeytown2 답변 에 따라 변경 사항을 구현 한 후 Google의 Pagespeed 테스트에 다음 메시지가 표시됩니다.

스크롤없이 볼 수있는 콘텐츠에서 렌더링 차단 JavaScript 및 CSS 제거
페이지에는 6 개의 차단 스크립트 리소스와 4 개의 차단 CSS 리소스가 있습니다. 이로 인해 페이지 렌더링이 지연됩니다.
다음 리소스가로드되기를 기다리지 않고 페이지의 폴드 컨텐츠를 렌더링 할 수 없습니다. 차단 리소스를 지연 또는 비동기 적으로로드하거나 해당 리소스의 중요 부분을 HTML에 직접 인라인하십시오.


advagg에 대해서는 확실하지 않지만 핵심은 그렇지 않습니다. 이와 같은 설정은 없습니다. advagg를 위해 나는 그들을 보지 못했지만 어쨌든 그것을 사용하지 않았습니다. 아마도 지금 이와 같은 설정이있을 수 있습니다. 개인적으로 나는 문제 대기열에 지원 요청을 게시하고 이에 대해 묻고 관리자가 사용할 수 없다고 말하면 기능 요청으로 변경됩니다.
Mołot

질문이 너무 광범위합니다. 사이트는 CSS와 JS를 사용합니다. 인터넷의 다른 모든 사이트도 마찬가지입니다. CSS의 계단식 순서가 유지되는 한 모든 CSS를 하나의 파일로 집계 할 수없는 이유는 거의 없습니다. JS가 캡슐화되어 있으면 하나의 파일로 병합 할 수있는 이유가 없습니다 (극단적 인 예). 페이지에 필요한 CSS 및 JS 파일 / 리소스에 대한 세부 사항을 제공 할 수있는 경우 더 많은 정보를 얻을 수있을 것입니다.
tenken

@tenken 어떻게 너무 광범위합니까? 그는 CSS와 JS를 렌더 차단 방식으로 연결했으며 비 차단 방식으로 원합니다. 이러한 방법은 거의 설명되어 있습니다 ( : OP는 Google Pagespeed 권장 사항을 나타냄). 귀하의 의견은 OP 요청 문제와 관련이 없습니다.
Mołot

인라인 코드가 없거나 async이전 브라우저에서 지원 하지 않는 모든 연결된 CSS 및 js 파일은 차단됩니다 . 예를 들어, 기본 Drupal 집계에는 <link>모든 CSS에 대한 태그가 포함됩니다 . 사이트 CSS 또는 JS가 너무 복잡한 경우 항상이 문제가 발생합니다. 사이트를 올바르게 구축하면 파일을 안전하게 집계 할 수 있습니다. 파일 종속성에 대한 정보가 없으면 질문 세부 사항이 너무 광범위합니다. 모듈은 자신의 문제를 해결할 수 없습니다 . CSS와 JS의 작성 방법과 포함 순서 및 복잡성에 관한 것입니다. 그는 비 차단을 원한다고 말한 적이 없다.
tenken

@tenken 내 질문을 업데이트하고 모듈에 대한 자세한 정보를 제공했습니다. 사용하는 CSS 및 JS를 이해하는 데 도움이되기를 바랍니다.
EB84

답변:


42

README는 이 사용하여 현재 수행하는 방법에 대한 안내가 AdvAgg의 7.x의-2.31 + 버전 . 또한 고성능 그룹에서이 위키 페이지를 참조하십시오 . 대부분의 사이트는 https://developers.google.com/speed/pagespeed/insights/ 에서 완벽한 100/100 점수를 얻을 수 있습니다 . 아래 AdvAgg를 새로 설치하기 위해이를 달성하는 방법에 대한 지침.

변경 사항이 사이트를 손상시키지 않도록 모든 섹션 후에 사이트를 확인하십시오. AdvAgg 수정 자의 변경 사항은 일반적으로 가장 문제가 많지만 가장 큰 개선 사항을 제공합니다.

고급 CSS / JS 집계

로 이동 admin/config/development/performance/advagg

  • "권장 (최적화 된) 설정 사용"을 선택하십시오.
AdvAgg 압축 자바 스크립트

활성화되어 있지 않으면 AdvAgg Compress Javascript를 설치하고 admin/config/development/performance/advagg/js-compress

  • 가능한 경우 JSMin을 선택하십시오. 그렇지 않으면 JSMin +를 선택하십시오
  • 모든 항목 제거 (가장 작은 파일)
  • 이러한 파일을 처리하려면 배치 압축 링크를 클릭하십시오.
AdvAgg 비동기 글꼴 로더

활성화되지 않은 경우 AdvAgg Async Font Loader를 설치하고 admin/config/development/performance/advagg/font

  • 집계에 포함 된 로컬 파일 (버전 : XXX)을 선택하십시오. 이 옵션을 사용할 수없는 경우 설치 방법에 대한 옵션 아래의 지시 사항을 따르십시오.
  • "스타일이없는 텍스트 (FOUT)의 플래시가 한 번만 발생하도록 localStorage를 사용하십시오."
  • "스타일이없는 텍스트 (FOUT)의 플래시가 한 번만 발생하도록 쿠키를 설정하십시오."
AdvAgg 번 들러

활성화되지 않은 경우 AdvAgg Bundler를 설치하고 admin/config/development/performance/advagg/bundler

HTTP / 2.0 설정

  • "페이지 당 CSS 번들 수"에서 25를 선택하십시오.
  • "페이지 당 JS 번들 수"에서 25를 선택하십시오.
  • "그룹화 로직"에서 "파일 크기"를 선택하십시오.

HTTP / 1.1 설정 (기본값)

  • "페이지 당 CSS 번들 수"에서 2를 선택하십시오.
  • "페이지 당 JS 번들 수"에서 5를 선택하십시오.
  • "그룹화 로직"에서 "파일 크기"를 선택하십시오.

25 개 번들 대 2 및 5는 브라우저 캐싱과 관련이 있습니다. 더 많은 파일은 브라우저가 캐시에 해당 콤보를 가질 가능성이 높지만 더 많은 파일은 HTTP 1.1에서 더 많은 연결이 설정되어 열려 있음을 의미합니다. 이 번호는 새로운 연결을 기다리지 않으므로 CSS에 2를 사용하십시오. 대부분의 브라우저의 동시 연결 제한이 6이므로 JS는 5입니다.이 번들 수는 많은 테스트 후에 선택되었습니다. HTTP 2.0에는 하나의 스트리밍 연결이 있으며 여러 CSS 및 JS 파일에 대한 패널티는 거의 없습니다. 따라서 브라우저 캐시를 최적화하는 것이 최선의 선택입니다. 따라서 HTTP / 2.0을 제공 할 때 CSS와 JS에 25를 사용해야합니다.

AdvAgg 재배치

활성화되지 않은 경우 AdvAgg Relocate를 설치하고 admin/config/development/performance/advagg/relocate

  • "권장 (최적화 된) 설정 사용"을 선택하십시오.
AdvAgg 수정 자

활성화되지 않은 경우 AdvAgg 수정자를 설치하고 admin/config/development/performance/advagg/mod

  • "권장 (최적화 된) 설정 사용"을 선택하십시오.
중요한 CSS 파일 생성

https://www.sitelocity.com/critical-path-css-generator로 이동하여 중요한 CSS에 필요한만큼의 방문 페이지를 입력 하십시오 . 톱 10은 일반적으로 좋은 출발입니다. Google 웹 로그 분석이있는 경우 상단 방문 페이지를 찾는 방법 ( https://developers.google.com/analytics/devguides/reporting/core/v3/common-queries#top-landing-pages 또는 Piwik https) 을 보여줍니다 . //piwik.org/faq/how-to/faq_160/ . 어떤 페이지로 시작할지 모르는 경우 사이트 홈페이지를 수행하십시오. CSS를 생성하기 위해 이것을 https://chrome.google.com/webstore/detail/critical-style-snapshot/gkoeffcejdhhojognlonafnijfkcepob?hl=ko

아래의 파일 이름과 경로는 "bootstrap"테마에 ​​대한 것입니다. 그들은 모두 시작합니다 sites/all/themes/bootstrap/critical-css/; 테마에서 critical-css/디렉토리를 작성하십시오 . 다음 디렉토리는 사용자를 기반으로합니다. anonymous/, all/또는 authenticated/사용할 수 있습니다.

다음 디렉토리는 urls/또는 일 수 있습니다 type/. 보고 urls/; front는 프론트 페이지의 특별한 경우이며, 다른 모든 경로는 current_path ()를 디렉토리에 .css추가 하고 파일 이름을 끝에 추가합니다. https://api.drupal.org/api/drupal/includes%21path.inc/function/current_path/7.x를 참조 하십시오

type/이것을 보면 노드 유형에 대한 특별한 경우입니다. 기계 이름을 사용하여 .css끝에 추가 하십시오. 이 유형의 모든 노드는이 중요한 CSS 파일을 적용하고 인라인합니다. 아래는 이것이 어떻게 작동하는지 보여주는 몇 가지 예입니다.

"프론트"페이지의 유효한 파일 위치 예 : sites/all/themes/bootstrap/critical-css/anonymous/urls/front.css

"node / 1"current_path () 페이지의 유효한 파일 위치 예 : sites/all/themes/bootstrap/critical-css/anonymous/urls/node/1.css

"page"노드 유형에 유효한 파일 위치 예 : sites/all/themes/bootstrap/critical-css/anonymous/type/page.css

:이 CSS 파일 fourkitchens을 생성하는 자동화 된 방법의 일종을 원하는 경우에 그 설정하는 방법에 대한 좋은 기사가 https://fourword.fourkitchens.com/article/use-grunt-and-advagg-inline-critical-css을 -drupal-7- 테마


AdvAgg 사용법에 대한 훌륭한 개요입니다! 감사. 아마이 텍스트는 프로젝트 페이지를위한 링크 된 "documentation"페이지의 시작일 수 있습니다. :)
tenken


@ mikeytown2 큰 답변 주셔서 감사합니다. 모든 변경 사항을 구현하고 질문을 업데이트했습니다. 조금 높은 점수를 받았습니다-감사합니다!
EB84

출력을 보면 advagg/mod페이지의 JavaScript 순서 최적화에서 모든 상자를 선택 하지 않았거나 모든 JS를 바닥 글로 이동 하지 않은 것으로 보입니다 . 또한 일반적으로 권장 사항에 도움이되는 전체 소스 페이지를 볼 수 있다면 (귀하의 사이트에 링크하십시오).
mikeytown2

정보를 제공해 주셔서 감사합니다. 페이지에서 적은 css 파일을 원하면 advagg / bundler로 이동하여 CSS 값을 4에서 1로 변경하십시오. 그러면 점수가 높아지지만 위에서 언급 한 의견을 명심하십시오. 적응 형 테마는 drupal_add_html_head ()를 사용하여 브라우저 조건부 js에 추가하는 것처럼 보입니다. 무슨 일이 일어나고 있는지 확인해야합니다. 1 개 이상의 테마가 drupal.org/node/2217451 필요함을 의미 합니다. 또한 렌더 차단 CSS를 해결하기 위해이 문제를 만들었습니다. drupal.org/node/2223267
mikeytown2

2

사전 구축 된 드루팔 모듈을 사용하면 절대로 높은 점수를받지 못할 수 있습니다.이를 달성 할 수있는 유일한 방법은 Google Speed ​​Tool 에서 제안한 각 제안에 참석하고 신중하게 분석하여 각 개별적으로 해결하는 것입니다.

매우 활발한 뉴스 사이트 에서 95를 달성하기 위해 수행 한 몇 가지 사항 은이 기사를 작성할nytimes 보다 점수가 높았습니다 (현재는 그렇지 않습니다).

  • [blocking scripts] sharethis, facebook widgets, google plus 등과 같은 타사 스크립트의 실행이 지연되어 페이지가 완전히 렌더링 된 후에 만 ​​실행됩니다. 이를 위해서는 html.tpl.php 출력에 대한 간단한 문자열 대체가 필요하여 해당 스크립트를 잡아서 나중에 실행할 수 있도록 대기시켜야합니다.
  • [blocking scripts] html.tpl.php의 $ scripts 변수 (json_encode와 함께)를 자바 스크립트 변수에 저장하여 첫 페이지로드 후 실행되도록 대기시킵니다. 이것은 부자연 스럽지만 필요합니다. 일부 브라우저 관련 문제를 정리해야했습니다.
  • [blocking css] Keith Clark의 기법 과 유사 하지만 rel = "prefetch" 를 사용하여 구현했습니다 . 이것은 FOUC 를 해결할 필요성을 소개합니다 .
  • [최소화 및 압축] drupal 설치를 관리 할 수없는 혼란으로 만들지 않고 imagemagic, yui-compressor, pngoptim 등을 사용하여 이러한 규칙을 극복 할 수있는 배포 서버로 압축 및 축소를 외부화하십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.