サイトのパフォーマンスが悪いとgoogle先生に低い評価をうけます
記事の内容がいくら良くても、評価されなければ
検索結果の順位が低くなってしまいます
なんとかして改善して行きたいと思い購入しました
- 作者: 久保田光則
- 出版社/メーカー: 技術評論社
- 発売日: 2017/05/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
本の紹介
323ページ、2864円です。技術書なら普通の値段ですね
目次
1. ウェブパフォーマンスとは何か
2. ブラウザのレンダリングの仕組み
3. チューニングの基礎
4. リソース読み込みのチューニング
5. JavaScript実行のチューニング
6. レイアウトツリー構築のチューニング
7. レンダリング結果の描画のチューニング
8. 高度なチューニング
9. 認知的チューニング
Appendix. SVGのパフォーマンス特性
著者について
久保田光則さんです
福岡でAspective LLC(http://aspective.io )という会社をやっている。福岡市在住。UI/UXデザイナー,ソフトウェアエンジニア。ウェブフロントエンド,ハイブリッドアプリに造詣が深い。優れたデザインとエンジニアリングを両立したソフトウェアプロダクト開発の実現を目指し日々頑張る。著書に『HTML5ハイブリッドアプリ開発[実践]入門(技術評論社,共著)』がある。
ブログ
blog.anatoo.jp
著者のオススメの人
・Webサイトを高速化してPV増などに結び付けたい人
・Webアプリケーションを高速化してユーザーの満足度を上げたい人
・Webフロントエンドのチューニングを基礎から知りたい人
自分のオススメの人
・フロントエンドエンジニア
・インフラエンジニア(apacheの設定とか記載してあった為)
まとめ
・知識がメインの本なので手を動かして確認する必要があないので電車でも読めます
・フロントエンジニアおよび一部の内容はWebデザイナーの人にも
知ってほしいないようでした
・データベースはエンジンの仕組みを知らないとチューニングができない。
それと同じでWEBページもブラウザの仕組みを知らないとチューニングできない
仕組みをしってベストプラクティスを知る
これぞ、技術の王道ですな
・英語ですがgoogleのエンジニアがWebパフォーマンスについて
講義してくれている無料の動画があります
本を読んでこの動画を読むとさらに理解が深まります
www.udacity.com
メモ
masalibが気になった事をメモしています
第1章・ウェブパフォーマンスとは何か
なんでフロントエンドパフォーマンスチューニングできないのか?
レタリングについて知らないから
引用
WEB開発者はHTMLやCSSをかくだけで意図する見た目の
WEBページをユーザーに見せられる一方、実際のレタリングの中でどのような
処理が行われているのか知らない
底部分が開発者がパフォーマンスチューニングを行う時の問題になる
レタリングとか意識した事がねぇwww
第2章 ブラウザのレンダリングの仕組み
レンダリング
1・Loading(リソース読み込み)
2・Scripting(JS実行)
3・Rendering(スタイル)
4・Paintin(描画)
というのでわかれている
Loading(リソース読み込み)について
HTMLが読み込まれてそれに紐付いたCSSやjavascriptをがLoadingされる事だけでいいと思う
まさかネットワーク・プロトコルの話がでてきて
IPとは何かとかまで記載されていた
TLSのハンドシェイクの処理はいいと思うけどプログラマーのレベルを超えてている
この部分でDOMツーリーの構築をおこなう
またHTML内にあるjavascriptを同期実行をおこなう
この時のjavascirptの実行時にはDOMツリーの構築がブロック(一時停止)される
cssの読み込み
link要素を使った外部ファイルの読み込みとstyle要素を使ったhtmlに埋め込まれたcssを取得する
読み込まれたcssはレタリングエンジンによってCSSOMになる
Scripting(JS実行)とは
javascriprのコンパイルして実行する部分
Chromeなどは、JIT(Just in Time)
実行時にその場でコンパイルする。コンパイル時のオーバーヘッドが大きい
Rendering(スタイル)
style計算とlayoutに分かれます
style計算はDOMツリーに対してどのようなcssプロパティーが当たるの計算する
DOM要素 × cssルール =>マッチング処理数
(単純計算の場合)
DOMツリーとcssomツリーを結合してlayouttreeを作成する
cssの詳細度を試せるサイト
http://specificity.keegan.st
若干わかりにくいが自分が書いたcssの要素をコピペして確認していく
Paintin(描画)
この段階でユーザーが見る形になる
上記でつくったlayouttreeをグラフィックエンジンに渡す
このエンジンはプラットフォームによって異なる
第3章 チューニングの基礎
無意味なチューニングは害だよ
だから計測する
chromeのデベロッパーモードでチェックしていく
パフォーマンス指標 RAILという物がある
RAIL モデルでパフォーマンスを計測する | Web | Google Developers
▪️レスポンス
入力レイテンシ(タップからペイントまで)は 100 ミリ秒未満
ユーザーがボタンをタップする(例: ナビゲーションを開く)。
▪️アニメーション
各フレームの処理(JS からペイントまで)は 16 ミリ秒未満
ユーザーがページをスクロールし、指をドラッグする(例: メニューを開くため)、アニメーションを見る。ドラッグ中は、指の位置に応じてアプリでレスポンスをする(プルして更新、カルーセルのスワイプなど)。このメトリクスはドラッグの開始時点ではなく、継続中にのみ適用されます。
▪️アイドル
メインスレッドの JS 処理ブロックは 50 ミリ秒以内
ユーザーがページを操作していなくても、次のユーザー入力を十分処理できるようメインスレッドを利用可能な状態にする。
▪️読み込み
ページを使用する準備が整うまで 1,000 ミリ秒以内
ユーザーがページを読み込み、クリティカル パス コンテンツを表示する。
これを目指す!!
第4章 リソース読み込みのチューニング
若干インフラよりの内容だった
ドメインシャーディング
通常の読み込み
http://xxxx.com/image1.gif http://xxxx.com/image2.gif http://xxxx.com/image3.gif ・ ・ http://xxxx.com/image99.gif http://xxxx.com/image100.gif
ドメインシャーディングで読み込んだ場合
http://image1.xxxx.com/image1.gif http://image2.xxxx.com/image2.gif http://image3.xxxx.com/image3.gif ↓ http://image1..com/image99.gif http://image3.com/image100.gif
同一ドメインの場合は並列に読み込みが6が
最大なので
ドメインをわける事で並列に読み込ませるのを増やすことができる
▪️gzipの圧縮を利用する
jpegとかあまり意味がないのでhtmlとか拡張子を指定する。
IISは指定できないかも・・・
▪️CDNを利用する
並列の数を増やすのもあるが海外からのアクセスに有効
▪️事前読み込み
DNSプリフェチ
リソースプリフェチ
コネクションの接続
プリレンタリング
ランディングページなどの次のページが限られている場合に有効
プリレタリングは次のページのレンタリングまでやるので
ブラウザに負担があるので注意
DNSぐらいはいいかも
cssスプライト
画像をまとめることで読み込みを減らす
アイコン画像とかで使える
CSSスプライトについてあれこれ。
第5章 JavaScript実行のチューニング
・asm.jsやSIMD.jsによるjavascriptの高速化ができるが導入は難しいので
導入コストと高速化のメリットを天秤にかける必要がある
・モバイル端末でのclickイベントの遅延300ミリ秒遅延して発火する
遅延が発生するのはダブルタップを待つため
この遅延を消す事ができる
fastClickライブラリーがある
第6章 レイアウトツリー構築のチューニング
設計規約にしたがう
BEM
SMACSSS
AMCSS
SUITCSS
BEM
qiita.com
Block ⇒ 塊
Element ⇒ 要素
Modifier(kyeとvalueで表す) ⇒ 状態(変化)
一貫したセパレーター 「_」 「_ _」 「-」を使用します。
基本ルールは3つ
BlockとElementとの区切り
Block(or Element)とModifierとの区切り、Modifierのkeyとvalueの区切り
BlockやElement名を、2つ以上の単語で表す場合の単語と単語との区切り
利用していないCSSルールセットを減らす
使っていないCSSルールセットを減らす事で無駄なマッチング処理を減らす
人力は無理ゲーなので
UNCSSを使う
node.jsのパッケージマネージャでインストールする
npm install uncss -r
使う場合
uncss http://xxxx.com > retain.css
レイアウトを減らす非表示
cssにはDOM要素を視覚的に消す方法として2つある
visiblityCSSプロパティーをhiddenにする
displayCSSプロパティーをnoneにする
hiddenは視覚的には消えるがレイアウトツリーにはいる
のでマッチング処理の対象になる
noneはレタリング処理の対象から外れる
img要素のサイズを固定にする
指定しないと仮の大きさで1度layout処理がおおなわれる
画像が読み込まれてから画像によって大きさが変わるので
それに続くレンタリング処理が再度行われる
第7章 レンダリング結果の描画のチューニング
Repaintが引き起こされたのか確認できる
ChromeのデベロッパーモードでPaint Flashingを
有効にする
無意味な再描画をおこなっていないのか確認できる
cssプロパティーの変更が何を起こすの確認
cssTriggersというサイトで確認できる
第8章 高度なチューニング
難しかったのでなし
第9章 認知的チューニング
インジゲーターとかで逃げるのも1つ
1秒以上10秒未満の場合に有効
10秒以上かかる場合はブログレスバーを表示する