Webパフォーマンスガチ勢が本当に使っている技術

Webパフォーマンスガチ勢が本当に使っている技術

  • PagespeedInsights100点を獲得する
  • デブサミの話 ​

    概要

    自己紹介

  • プライムストラテジー中村けん牛さん
  • クサナギというCENTOSベースのシステム開発
  • KUSANAGISutakの開発
  • 高速化だけでなく自動化もやっているサービス ​

    論より証拠

    デモンストレーション

  • デブサミサイトを高速にします
  • Onimaruを利用
  • URLをみると見た目はデブサミだけど、違う
  • 見た目は同じだけどAzure上にサイト再現している
  • 本ちゃんのデブサミChromeのDevToolでfinishまで20秒かかっていたが、高速化すると2秒になった
  • 本番をPagespeedInsightにかけた
  • 最適化したサイトもPagespeedInsightsにかけた
  • 本番は14点で、最適化したほうは100点だった ​

    内容ざっくりみた

  • DesableCacheを使う。ブラウザキャッシュ使わない
  • ソースコード比較して、変わっていることを確認 ​

    高速化の話

    高速化背景

  • Googleが早くしろってうるさい
  • Googleはモバイルファーストインデックスとスピードアップデートをめざす
  • Googleの広告収入があがるから早くしろって言ってくる ​

    モバイルファーストと5G時代高速化

  • バックエンドとレンダリングの高速化がより大きな差を生む時代
  • 速度にとってコア数は関係ない。結局直列に処理されるから ​

    高速化の目的

  • UXの最大化、PV、CVR、回遊率、滞在時間の工場 ​

    Web高速化のしくみ

  • ネットワーク、バックエンド、レンダリングを対象とする ​

    レンダリング

  • ファーストビュー、インタラクティブ、セカンドビューにわける
  • PagespeedInsightの配点はファーストビュー、インタラクティブが7割 ​

    バックエンド高速化

    構成

  • WordPressを想定
  • バックエンド高速化の基本はキャッシュ戦略が大事
  • キャッシュ戦略は、CPUを動かさない、ネットワークストレージにアクセスしない、高速な処理系を採用
  • キャッシュ利用の切り口として2つある
  • キャッシュを使った時に最新のアウトプットを保証するもの(キャッシュする)ー>A
  • 過去の情報を再利用するもの(キャッシュしない個人情報だから)ー>B
  • 直せつアプリケーションを修正するものとしないものー>C
  • NginXを使うならLUAを使えば早くなるー>D ​

    インスタンスの速度改善

  • CPUのコア数より周波数の高い処理系の方がスピードがでる(<-あたりまえ) ​

    OS

  • デゥクスキャッシュを活用する
  • バッファキャッシュを活用する ​

    nginx

  • 使い所注意なのは、個人情報をキャッシュしないこと
  • Open file cacheを設定ー>ファイルクローズをせずに、置いとくことでオーバヘッドを減らす
  • Luaによるアプリケーションの高速化ー>Nginxの処理をフックできる
  • Luaを使ったらNginxをサーバアプリフレームとして使える
  • JITコンパイラの方が早いー>LUAJITおすすめ
  • PCREもPCREJITを使った方が早い
  • PHP5より7を使った方が2.5倍
  • OPCacheを導入ー>コード変わればクリアされるから安心
  • APCu->インメモリのキャッシュ
  • PHPのPCREに関してもJITを使う方が良い ​

    MySQL

  • QueryCacheの導入
  • 参照クエリの実行結果をメモリキャッシュ
  • innodb_buffer_pool_sizeを絶対設定
  • innodbはOSのディスクキャッシュを使わないので、バッファキャッシュサイズ設定したほうがよい
  • 使われていないSQLクエリキャッシュ削除ー>やりかたはググる

    WordPressの改善

  • I/Oにももとづく最適化処理
  • I/Oが同じならば、O/R Mapper使わずに、直接SQL実行して高速化 ​

    ネットワーク高速化(フロントエンド)

    ネットワーク帯域の確保

  • クライアントが5Gでもバックが100Mbpsだったりする ​

    画像リソース

  • 同一画像フォーマットの最適化
  • JPEとPNGでも WebPを使う
  • LazyLoadingをつかう
  • Chromeカバレッジをみて何パーセント使っているかみる
  • テキストはgzip/blotliに圧縮 ​

    レンダリング高速化

  • レンダリングプロセスは通常のサイトは全部一度に実行する
  • ファーストビューに必要なリソースのみ最短で実行
  • それによってインタラクティブになるまでの時間を快適にする(ユーザ操作を受け付け可能状態)
  • 最後にセカンダリビューに実行する ​

    JS/Webフォントの遅延

  • 具体例はGoogleMAPはフッターにあるなら、フッターに行くまで描画する必要はないなど ​

    高速化の自動化

    以下ツールで自動化

  • Gulpで画像圧縮自動化
  • inotiywait -> https://qiita.com/hana_shin/items/9e03ad7a40b4fd7afb67