Google PageSpeed와 싸우고 나서 배운 세 가지
9551 단어 pagespeedgooglecssjavascript
내가 배우는 것은 다음과 같습니다.
1. 이미지 최적화
이미지는 수정하기 가장 쉽고 로딩 속도의 주요 요소입니다. TinyJPG과 같은 이미지 압축을 사용하여 이미지를 압축하고 페이지 크기를 최소화하며 이미지를 점진적으로 설정하는 것이 중요합니다.
이미지를 프로그레시브 이미지로 만들려면 컴퓨터에 Imagemagick이 있는 경우 다음을 시도할 수 있습니다.
for i in ./*.jpg; do convert -strip -interlace Plane $i $i; done
또한 화면 밖에 있는 불필요한 이미지를 불러오는 것을 방지하기 위해 Lazy load를 사용할 필요가 있다.
2. CSS/JS 로딩 최적화
CSS
Pagespeed에는 "Optimize CSS Delivery"이라는 규칙이 있습니다. 즉, 첫 번째 렌더링에 포함되지 않는 모든 것(즉, 화면 밖)은 렌더링 속도를 차단합니다.
화면 외부 CSS의 로드를 지연하려면 snippet by Google을 사용하여 body 태그의 끝에 배치할 수 있습니다.
<noscript id="deferred-styles">
<link rel="stylesheet" type="text/css" href="<your-css-file>.css"/>
</noscript>
<script>
var loadDeferredStyles = function() {
var addStylesNode = document.getElementById("deferred-styles");
var replacement = document.createElement("div");
replacement.innerHTML = addStylesNode.textContent;
document.body.appendChild(replacement)
addStylesNode.parentElement.removeChild(addStylesNode);
};
var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
if (raf) raf(function() { window.setTimeout(loadDeferredStyles, 0); });
else window.addEventListener('load', loadDeferredStyles);
</script>
또한 중요한 CSS(즉, 뷰포트에)를 인라인 및 내부에 배치해야 합니다
<head>
. 예를 들어:<head>
<style>
.blue{color:blue;}
</style>
</head>
자바스크립트
JS의 경우 다음과 같이
defer
, async
스크립트를 웹 페이지에 비동기식으로 삽입하려고 시도할 수 있습니다.const script = document.createElement('script');
script.src = "//example.com/widget.js";
document.getElementsByTagName('head')[0].appendChild(script);
화면 밖 기능의 경우 속성을 "지연"으로 설정하고 본문 끝에 배치할 수 있습니다. 즉, 전체 페이지가 렌더링된 후에 로드됩니다. 예를 들어:
<!--preload js for important func-->
<link rel="preload" href="script.js" as="script">
<!--load after rendered-->
<script src="script.js" defer></script>
<!--will load asynchronously-->
<script src="script.js" async></script>
gulp용 gulp-inline-source 또는 webpack용 critters과 같이 인라인 CSS를 자동으로 추가하는 데 도움이 되는 몇 가지 도구가 있습니다.
3. 코드 분할
스크립트가 중요하지 않고 화면의 기능(예: 고정 메뉴)에 해를 끼치는 경우 몇 개의 파일로 분할하고 필요할 때 로드할 수 있습니다. webpack 또는 React의 경우 webpack 에서 "코드 분할"기능을 사용할 수 있습니다.
React의 경우 new lazy 또는 react-loadable 을 사용하는 것이 훨씬 더 쉽습니다.
페이지 내 불필요한 코드를 삭제하거나 다듬어 사용자에게 최소화된 버전을 제공하는 것을 잊지 마세요!
결과
그 페이지는 마침내 모바일에서 거의 80개를 얻었고 데스크톱 버전에서는 거의 완벽했습니다. 모바일의 점수는 확실히 개선의 여지가 있기 때문에 완벽하지는 않습니다.
이것에 대해 어떤 생각이 있습니까? 귀하의 통찰력을 알려 주셔서 감사합니다! :)
Reference
이 문제에 관하여(Google PageSpeed와 싸우고 나서 배운 세 가지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/snowleo208/three-things-i-learn-after-fighting-with-google-pagespeed-3jk9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)