AMP 페이지 Experience Guide를 통한 AMP 고속

AMP Fest는 AMP의 속도 개선 검사 도구를 공개했기 때문에 즉시 사용해 보았다
https://blog.amp.dev/2020/10/13/meet-amps-page-experience-guide/

AMP Page Experience Guide


https://amp.dev/ja/page-experience/
사용 방법은 URL을 입력하고 해석 단추를 누르는 것이다

이번에는 달루심의 프레임리스트 AMP 페이지에서 해봤어요.
https://enjoy-sfv-more.com/amp/frames/dhalsim

Core Web Vitals


Firebase Function Express로 렌더링했기 때문인지 읽기 속도가 상당히 느립니다.

제안된 개선 방안


분석이 끝난 후에 속도 개선 방안이 나타날 것이다

AMP Optimzer 사용


AMP Optimzer 권장 사항
https://amp.dev/ja/documentation/guides-and-tutorials/optimize-and-measure/amp-optimizer-guide/

AMP 실행 시간 사전 로드


AMP 관련 JS 사전 로드 시나리오 제시
<link as="script" href="https://cdn.ampproject.org/v0.js" rel="preload">

모든 자원 읽기 허용


모바일 친선 테스트 도구로 확인한 구글의 광고를 읽을 수 없는 개선 방안
https://search.google.com/test/mobile-friendly?url=https%3A%2F%2Fenjoy-sfv-more.com%2Famp%2Fframes%2Fdhalsim

침입형 상호작용 방지


AMP-AD에 광고를 넣었기 때문에 문제가 있는지 수동으로 확인할 수 있다

개진


AMP 실행 시간 사전 로드


자신의 사이트에서 많은 것을 읽었기 때문에 모두 대응했다
<link as="script" href="https://cdn.ampproject.org/v0.js" rel="preload">
<link as="script" href="https://cdn.ampproject.org/v0/amp-lightbox-0.1.js" rel="preload">
<link as="script" href="https://cdn.ampproject.org/v0/amp-analytics-0.1.js" rel="preload">
<link as="script" href="https://cdn.ampproject.org/v0/amp-list-0.1.js" rel="preload">
<link as="script" href="https://cdn.ampproject.org/v0/amp-bind-0.1.js" rel="preload">
<link as="script" href="https://cdn.ampproject.org/v0/amp-selector-0.1.js" rel="preload">
<link as="script" href="https://cdn.ampproject.org/v0/amp-mustache-0.2.js" rel="preload">
<link as="script" href="https://cdn.ampproject.org/v0/amp-ad-0.1.js" rel="preload">

대응 후 상호작용(TBT)이 개선되어 양호해졌다

AMP Optimzer 사용


AMP Optimzer 대응
대응 방법은 여러 가지가 있지만, 프레임워크 테이블의 AMP 페이지는 Firebase Function Express로 표현되어 있기 때문에 AMP 공식 강좌를 보면서 가져오기
https://amp.dev/ja/documentation/guides-and-tutorials/optimize-and-measure/amp-optimizer-guide/node-amp-optimizer/
설치하다.
npm install @ampproject/toolbox-optimizer
render 함수의 호출 실행optimather
const AmpOptimizer = require("@ampproject/toolbox-optimizer");
const ampOptimizer = AmpOptimizer.create();

app.get("/amp/frames/:characterEnName", (req, res) => {
  const character = characters.getCharacterByEnName(req.params.characterEnName);
  if (character) {
    res.status(200).render(
      "amp/frame",
      {
        characterId: character.id
      },
      async (err, html) => {
        const optimizedHtml = await ampOptimizer.transformHtml(html);
        res.send(optimizedHtml);
      }
    );
  } else {
    res.status(404);
  }
});

대응 후 왠지 모르게 CLS의 점수가 올라갔어요.🤔
AMP Optimzer의 대응이 있을 경우 "JavaScript Module 버전의 AMP 런타임 사용"이 새로운 대응 전략으로 제시될 수 있으므로 대응해 보았습니다.
https://www.npmjs.com/package/@ampproject/toolbox-optimizer#experimentesm
const ampOptimizer = AmpOptimizer.create({
  experimentEsm: true
});

대응 후 TBT의 속도가 높아졌지만 주의사항에 적힌 바와 같이 AMP 페이지가 무효가 되어 취소되었습니다😇

테스트 도구도 오류가 발생할 수 있습니다
https://search.google.com/test/amp

총결산


결과는 preloadAMP Optimizer 두 개만 대응
AMP 캐시가 유효하지만 AMP 페이지의 읽기 속도도 개선되었기 때문에 Eleventy 등 SSG로 개선하고 싶습니다

좋은 웹페이지 즐겨찾기