スマホ向けWebアプリ開発で使える
フロントエンド高速化手法
株式会社gloops
児玉 映治
2
自己紹介
• 児玉 映治
• 株式会社gloops
UI/UXグループマネージャー
兼WEBデザイングループマネージャー
• 元々サーバサイドのエンジニア
3
弊社紹介
• 株式会社gloops
• 事業内容:ソーシャルアプリケーション事業
• 累計ユーザー数1800万人
• 主なタイトル
4
アジェンダ
1. フロントエンド高速化の基本
① ページサイズとHTTPリクエストの軽減
② ソースコードの最適化
2. ユーザーの体感速度
① レンダリング
② イベント
5
1. フロントエンド高速化の基本
6
なぜフロントエンドの高速化が必要なのか
・ネイティブアプリ並のリッチさとパフォーマンスを
スマホのWebアプリにも求められる
・UXに直結
・継続率、離脱率、売上などに影響
7
代表的な高速化の方法
・ページサイズを軽くする
・HTTPリクエストを減らす
・styleは上に、scriptは下に書く
・CSSセレクタの最適化
・処理速度の速いJavaScriptを書く
ここと
ここの話
8
① ページサイズとHTTPリクエストの軽減
9
ページサイズを軽くする方法
・画像最適化
・画像をCSSで代用する
・minify化、gzip圧縮
・キャッシュを使う
10
HTTPリクエストを減らす方法
・CSSスプライトを使う
・DataURIスキームを使う
・画像をCSSで代用する
・cssファイルや、jsファイルを纏める
ここの話
11
・HTTPリクエストを一気に減らせる
CSSスプライトの特徴
・画像の表示は遅い
⇒CSSの解釈が終わってから画像を取りに行くため
・画像を用意する人とCSSを作る人が別々の場合
運用が少々面倒
12
DataURIスキームの特徴
・CSSスプライトより表示処理は早い
・画像ファイルの時より容量が増加する
=キャッシュ必須
・画像を更新するにはCSSファイルも更新する必要がある
=キャッシュクリアされ、初回の読込みに時間がかかる
・HTTPリクエストが発生しない
13
CSSスプライト
・更新頻度が少ない
・一つの画面で1回くらいしか使わない
それぞれどう使い分ける?
DataURIスキーム
・更新頻度が少ない
・一つの画面で何度も使う
・色数やサイズが小さい
14
・ページサイズは何kb?
HTTPリクエストは何回?
どの程度まで軽減するべきか?
・1秒以内を目指す
⇒2秒を超えると人は遅いと感じる
・速ければ速い程良い
・あとはデザインのクオリティと相談
15
ページサイズを軽くした結果
ページサイズ HTTPリクエスト 時間
1120kb 50 1238.36ms
725kb 50 1036.88ms
508kb 50 910.67ms
308kb 50 689.29ms
あるアプリでのLoadイベントまでの時間
※iPhone4S(ios6.1) 3G回線を使用
16
HTTPリクエストを減らした結果
ページサイズ HTTPリクエスト 時間
447kb 80 1006.86ms
436kb 50 939.71ms
442kb 35 662.50ms
17
ページサイズ HTTPリクエスト 時間
447kb 80 1006.86ms
436kb 50 939.71ms
442kb 35 662.50ms
18
あるアプリBで、2倍以上の差が発生
ページサイズ HTTPリクエスト 時間
アプリA 508kb 57 910.67ms
アプリA 442kb 35 662.50ms
アプリB 517kb 33 2091.90ms
減らすだけでは不十分
19
ページサイズとHTTPリクエストを
減らしても遅い場合
20
② ソースコードの最適化
その1. CSS編
21
CSSセレクタの高速化
・セレクタは右から左へ解釈されるので
細かくするよりもシンプルにする方が高速
22
計ってみた
iPhone4 iPhone5 Galaxy Nexus
div > div
> div > div.hoge
432ms 203ms 605ms
.hoge 405ms 201ms 595ms
1000回実行してみると
23
CSSセレクタの高速化
・セレクタは右から左へ解釈されるので
細かくするよりもシンプルにする方が高速
・運用性を重視した方が総合的に見て良い
・難解なセレクタ、汎用性のないセレクタ、
複雑な構造のHTMLにならないようにする
24
セレクタよりも描画処理に注意する
・Google Chromeの開発ツールでTimelineを確認すると
ボトルネックは大抵描画(緑色:Painting)
25
・重めのCSS
・スマホでCSSスプライトを使う場合
RetinaDisplay対応のためにbackground-size指定はほぼ必須
⇒スプライト画像が大きいと
background-sizeの処理も重くなる
描画が重くなるCSS
26
描画が重い原因を探す
・Google Chrome Canaryの開発ツール
・CSSプロパティを調整し
重い原因を探す
27
② ソースコードの最適化
その2. JavaScript編
28
変数を利用する
・DOM, 関数, style, length etc…
複数回使うなら変数の中に入れてそっちを使う
・必ずvarで宣言してローカル変数にする
・基本中の基本
・だけど見落としやすい
29
変数を利用してDOM操作の回数を減らす
30
一度に処理してDOM操作の回数を減らす
31
かかる時間はJavaScriptだけではない
・DOM操作を行うと、ブラウザ側でも
スタイルやレイアウトの再計算が行われている
・DOM操作の回数を減らすことで
JavaScriptの処理だけでなく
ブラウザ側の処理も軽くすることができる
32
② ソースコードの最適化
その3. jQuery編
33
jQueryの最適化
・jQueryオブジェクトの生成
速いのはどっち?
34
jQueryの最適化
・jQueryオブジェクトの生成
○
×
速いのはどっち?
※ただしgetElementsByClassNameが実装されていないブラウザの場合はBが速い
スマホの場合はA
35
jQueryのセレクタの仕組み
① 初めにgetElementBy系が使われる
(getElementById, getElementsByClassName, getElementsByTagName)
② ①で取れない場合はquerySelectorAllが使われる
③ ②でもダメならsizzleエンジンが使われる
36
jQueryのセレクタの仕組み
① 初めにgetElementBy系が使われる
(getElementById, getElementsByClassName, getElementsByTagName)
② ①で取れない場合はquerySelectorAllが使われる
③ ②でもダメならsizzleエンジンが使われる
37
jQueryなどライブラリ利用時の注意点
・確かに便利
・だけど中でどういう処理がされているのかを
知っておくことで、
より速い処理を選択することができる
38
1. フロントエンド高速化の基本 まとめ
・様々な高速化の手法が既に公開されている
・必ず自分自身で確かめる
・しかし自分と全く同じ環境で効果があるとは限らない
39
2. ユーザーの体感速度
40
・ページサイズとHTTPリクエストを軽減すれば
速くなる
高速化のジレンマ
・ある程度まで軽減すると、
そこから先はデザインのクオリティが犠牲になる
41
デザインのクオリティは下げられない
表示速度をこれ以上速くするのは難しい
42
① レンダリング
ユーザーは読み込み中であろうと
操作できると思ったら即座に操作を始める
操作できると思う部分を先に表示して
ユーザーにとっての待ち時間を短くする
43
・画像のレンダリングは表示方法によって順番が異なる
画像のレンダリング順を入れ替える
・img要素か、CSSのbackground-imageか
・img要素の方が、CSSのbackground-imageより
速く表示される(先にレンダリングされる)
・速く表示したい部分はimg要素で実装する
44
<a href=“#” style=“position:absolute; width:20px; height:20px;
overflow:hidden; display:block;”>
<img src=“sprite.png” width=“100” height=“200” alt=“hoge”
style=“position:absolute; top:50px; left:0px;” />
</a>
スプライト画像を使う
・img要素でもスプライト画像は使える
※但しHTMLの階層が深くなりやすい
45
② イベント
ユーザーは何かの操作に対する応答が
100ms以上かかると違和感を持つ
ユーザーの操作に対して速く応答する
46
タップ時のイベントの種類
・スマホでのタップ関連のイベントは主に次の6つがある
mousedown, mousemove, mouseup
touchstart, touchmove, touchend
47
touchイベントとmouseイベントの違い
・PCはtouchイベントが発生しない
・スマホでもmouseイベントやclickイベントは発生するが
違和感を感じるレベルでtouchイベントよりも遅い
・スマホであればtouchイベントを使う
何でもかんでもonclickで作らない
48
touchstartとtouchend
・touchstart⇒指が触れただけで発生する
touchend⇒ディスプレイから指を離すと発生する
・モーダルウィンドウやアコーディオンの表示など、
瞬時に処理を実行したい場合はtouchstartを使う
・ただしスマホの場合、画面をスクロールする時に
ボタンに触れてしまうことがよくある。
画面遷移の実行など
全て反応が速ければ良いというわけでもない
49
2. ユーザーの体感速度 まとめ
・基本的な高速化の対応をしたら
後はどれだけ気付き、気遣えるか
・そのためにはユーザーと同じ目線、
通信環境、心理状態になって
自分のアプリを触ってみることが必要
・ユーザーに取って重要な部分がわかったら、
徹底的にそこをチューニングする
50
3. さいごに
51
なぜフロントエンドの高速化が必要なのか
・ネイティブアプリ並のリッチさとパフォーマンスを
スマホのWebアプリにも求められる
・UXに直結
・継続率、離脱率、売上などに影響
52
なぜフロントエンドの高速化が必要なのか
・より良いUXの提供を目指す上で
操作時の不自然さは大きな障害
・その不自然さを取り除くことが
高速化の役割
・方法は色々あるので、
ユーザー目線に立って根気強くベストプラクティスを探す
スマホ向けWebアプリ開発で使えるフロントエンド高速化手法

More Related Content

PDF
20120316 designerworkshoppublished
PDF
無料で始めるアプリのバックエンド開発
KEY
スマートフォンアプリケーション開発の最新動向
KEY
20120413 nestakabaneworkshop
PDF
nanapi IGNITIONチームの開発フローとその構築
PPTX
小さく早い改善がスマホのサービス開発を変える
PPTX
Onsen UIが目指すもの
PPTX
Azure Mobile Services と Azure Mobile Apps
20120316 designerworkshoppublished
無料で始めるアプリのバックエンド開発
スマートフォンアプリケーション開発の最新動向
20120413 nestakabaneworkshop
nanapi IGNITIONチームの開発フローとその構築
小さく早い改善がスマホのサービス開発を変える
Onsen UIが目指すもの
Azure Mobile Services と Azure Mobile Apps

What's hot (20)

PDF
Onsen UI 2.0とUIライブラリの未来
PPTX
Microsoft Azure で始める サクサク Android開発 in jazug青森
PDF
Crunchtimer会社案内
PPTX
PWAがたぶんくる
PDF
Androidでもサクサク動くHTML5ハイブリッドアプリの作り⽅
PDF
ServiceWorkerでつくるWebの未来
PDF
Cordovaの特徴と開発手法概要
PDF
Spa のための web サーバ構築ノウハウ
PPTX
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
PDF
Html5/JSモバイルアプリ最前線
PDF
iQONの開発手法 at iQONエンジニアセミナー
PPTX
Web標準技術で iOS、Android両対応アプリを開発
PPTX
WordPressサイトをスマホアプリにしちゃおう!
PPTX
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
PPTX
Challenge PWA!! Technical Edition @JAG201809
PPTX
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
PDF
Ionicでハイブリッドアプリ入門①
PDF
チーム「ヘップバーン」- 2020/09 キャンプハッカソン
PDF
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
PPTX
Hello, React!! まで導く Reactの基礎
Onsen UI 2.0とUIライブラリの未来
Microsoft Azure で始める サクサク Android開発 in jazug青森
Crunchtimer会社案内
PWAがたぶんくる
Androidでもサクサク動くHTML5ハイブリッドアプリの作り⽅
ServiceWorkerでつくるWebの未来
Cordovaの特徴と開発手法概要
Spa のための web サーバ構築ノウハウ
Monaca事例から学ぶHTML5モバイルアプリの活用ポイント
Html5/JSモバイルアプリ最前線
iQONの開発手法 at iQONエンジニアセミナー
Web標準技術で iOS、Android両対応アプリを開発
WordPressサイトをスマホアプリにしちゃおう!
最新UIフレームワーク Onsen UI2で カッコイイWordPress連携アプリを作る方法
Challenge PWA!! Technical Edition @JAG201809
Cordova を使って本気で商用ハイブリッドアプリ開発をやってみた
Ionicでハイブリッドアプリ入門①
チーム「ヘップバーン」- 2020/09 キャンプハッカソン
AngularとOnsen UIで作る最高のHTML5ハイブリッドアプリ
Hello, React!! まで導く Reactの基礎
Ad

Viewers also liked (20)

PDF
Build Insider OFFLINE vol.01 スマートフォンサイトのこれから ~ レスポンシブ・Webデザインは救世主となり得るか
PDF
スケーラビリティと耐障害性を両立するWeb アプリケーション
PPTX
ProductManagement / front-end in Sansan( & remote work)
PDF
よりよい開発を目指すための、プロセス&ツール活用
PDF
レスポンシブ+α 第12回WordBench大阪
PPTX
HTML5とWeb開発に関する最新動向
PDF
スマートフォン対応とレスポンシブWebデザイン
PDF
Css nite fukuoka8 suenaga
PPTX
Node.js Hands-On
PDF
一生食える強みの作り方 まとめ
PPTX
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
PDF
これで大丈夫。Web制作で使うコマンドラインツールの名前と役割をざっくり理解する
PDF
レスポンシブWebデザインの実践ワークフロー(WDS)
PDF
レスポンシブWebデザイン ワークフロー
PDF
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
PDF
短期間でのスマホ向けWeb開発
PDF
スマホアプリ開発-プロモーション・集客・サポート・広告収入-
PDF
Ajax非同期通信によるサーバー通信
PDF
JavaScriptによるgoogle maps apiの使い方
PDF
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
Build Insider OFFLINE vol.01 スマートフォンサイトのこれから ~ レスポンシブ・Webデザインは救世主となり得るか
スケーラビリティと耐障害性を両立するWeb アプリケーション
ProductManagement / front-end in Sansan( & remote work)
よりよい開発を目指すための、プロセス&ツール活用
レスポンシブ+α 第12回WordBench大阪
HTML5とWeb開発に関する最新動向
スマートフォン対応とレスポンシブWebデザイン
Css nite fukuoka8 suenaga
Node.js Hands-On
一生食える強みの作り方 まとめ
.NET Web プログラミングにおける非同期 IO のすべて (Build Insider OFFLINE)
これで大丈夫。Web制作で使うコマンドラインツールの名前と役割をざっくり理解する
レスポンシブWebデザインの実践ワークフロー(WDS)
レスポンシブWebデザイン ワークフロー
Webデザイン入門2-HTML5 フォーム,映像再生,音声再生, CSS3, レスポンシブWebデザイン-
短期間でのスマホ向けWeb開発
スマホアプリ開発-プロモーション・集客・サポート・広告収入-
Ajax非同期通信によるサーバー通信
JavaScriptによるgoogle maps apiの使い方
簡単!低コスト!楽しい!レスポンシブ デザイン ディレクション
Ad

Similar to スマホ向けWebアプリ開発で使えるフロントエンド高速化手法 (20)

PDF
フロントエンドから見たWebアプリの高速化 #gotandapm
PPTX
5分で詰め込む フロントエンド最適化
PDF
Frontend optimization dena_creativeseminar
PDF
スマートフォンWebアプリ最適化”3つの極意”
PDF
速くなければスマフォじゃない
PDF
我が家のフロントエンド開発事情
PDF
Aqua ion press_tech_20121116_publish
PPTX
フロントエンドの技術を刷新した話し。
PDF
もっと良くなるHTMLアプリケーション設計と実装
PDF
フロント作業の効率化
PDF
Browser Computing Structure
PDF
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
PDF
高速化はじめの一歩
PDF
HTML5ハイブリッド アプリ開発実践編
PDF
アプリ開発の
PPTX
Webエンジニアによるスマートフォンアプリ開発
PPTX
Mobile SEO (Japanese Version)
PPTX
Speed Up Web 2012
PDF
Smartphone ui:ux」 de na creative seminar vol.1 レポート
PDF
スタートアップ向け!1人日でできるサービスの高速化方法と成果
フロントエンドから見たWebアプリの高速化 #gotandapm
5分で詰め込む フロントエンド最適化
Frontend optimization dena_creativeseminar
スマートフォンWebアプリ最適化”3つの極意”
速くなければスマフォじゃない
我が家のフロントエンド開発事情
Aqua ion press_tech_20121116_publish
フロントエンドの技術を刷新した話し。
もっと良くなるHTMLアプリケーション設計と実装
フロント作業の効率化
Browser Computing Structure
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
高速化はじめの一歩
HTML5ハイブリッド アプリ開発実践編
アプリ開発の
Webエンジニアによるスマートフォンアプリ開発
Mobile SEO (Japanese Version)
Speed Up Web 2012
Smartphone ui:ux」 de na creative seminar vol.1 レポート
スタートアップ向け!1人日でできるサービスの高速化方法と成果

スマホ向けWebアプリ開発で使えるフロントエンド高速化手法