狠狠撸

狠狠撸Share a Scribd company logo
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
フロントエンドから見たWeb
アプリの高速化
#gotanda.pm 2015/06/24
@mizuki_r
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
name.
飯沼?遼
account.
twitter: @mizuki_r
github: ry_mizuki
role.
フロントエンド寄りのエンジニア
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
今日お話すること
? Mobile Factoryにおける”フロントエンドエンジニア”
? フロントとサーバでの高速化に対する見方の違い
? 高速化しない選択肢
? フロントで”高速化”にコミットするには
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
Mobile Factoryにおける、
フロントエンドエンジニアとは
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
持つべき責務
UXを提案し、実装する
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
FEの役割
? UXに関し、その技術が必要なら習得する
? あらゆる職能との連携を行う
? サーバ、ディレクタ、デザイナ
? そのチームにおいて求められる範囲と求められる技術は
異なる
? JavaScript, Java, Swift, Perl, etc…
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
今の私の場合
? チームのプロジェクトはWebアプリケーション
? 技術的には、HTML5?CSS?JavaScriptが中心
? AngularJSとかSCSSとか
なので、今日は”フロント”って言ったら
その辺のことだよ!
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
フロントとサーバでの高速化に
対する見方の違い
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
基本
速度の改善は、まず計測から始める
これは一緒
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
関心を持つべき値
サーバー フロント
レスポンス速度

アプリケーション

ミドルウェア(DBとか)

サーバの負荷状況

通信速度

etc…
リソースサイズ

描画速度

インタラクションへの反応速度

etc…
フロントエンドはあらゆるUIの「描画」や「反応」の
パフォーマンスを意識する必要がある
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
計測方法
サーバー フロント
ロギング
各サーバー毎に出力、

集計サーバに送信
クライアントで出力

APIサーバに送信
環境
任意のOS、環境を用意
できる
ユーザの手元のOS、ブ
ラウザ
メモリ?CPU等の状態 リアルタイムで集計可能 ユーザの手元なので…
基本ユーザの手元なので、
情報を集めること自体が難易度高い
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
フロントの改善へのハードル
? Analyticsや他のツール等で追える情報はある
? 頑張って自作できないこともない
? JavaScriptにパフォーマンスを取得するAPIがある
? ただしブラウザによって実装状況はk(ry
? 計測したところで対応できない問題もある
? OSが古い。ブラウザが古い。端末スペック(笑)
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
やってられるか\(^o^)/
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
そして、諦め
僕ゎもぅっかれたょ….
愚直に数字を集計して改善するより、
もっと費用対効果のよい方法で速度を凌駕する体験を
提供できればそれでよいのでは?
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
高速化しない、という選択肢
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
なぜ高速化しないといけないのか?
? 速度が速いと…
? ユーザ満足度の向上やSEOの効果などが見込める
? 待つこと自体がストレス
? しかし… そのストレスを低減させることはできる?
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
例題
あなたは友達と午前10:00に五反田駅で待ち合わせを
していました。
しかし、友達は10分たってもやってきません。LINE
で連絡を取りますが既読にならない。
途中で何かあったのかと思いますが、ふとあなたは
昨夜ずいぶん遅くまでその友達とイカになっていた
ことを思い出します。
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
この時のあなたの心情は?
? 早く反応してくれ
? イライライライライライラ
? もう帰っていイカ?
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
例題2
数度の呼び出しを経て彼がようやく反応しました。
予想通り寝坊のようです。あと30分でつく、と慌て
た声で彼はいいました。
あなたは溜息とともに待つことを承諾します。
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
どうやって30分まつ?
? 携帯ゲーム
? ネットサーフィン
? 音楽を聞く
? 散歩でもする
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
何が言いたいかというと…
何時まで待てばいいのか、
待っている間何をすればいいのか、
がわかれば人は待てる!
…と思う
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
具体例
? ローディングゲージ
? ローディングアニメーション
? ゲームのtips
? ミニゲーム
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
遅い、とユーザに思わせない。
楽しいと思えるようにする
? ゲームなら世界観やゲームのチップスやキャラとか
? 簡単なアニメーションでも、動かれると気になって見てしまう
? よくあるグルグル回るだけのアニメーションはNG
? 演出にユーザが慣れてしまう
? イベントや告知なども効果あり
? 必ず目に触れるポイントで、かつ読む時間も作れる
? ユーザに待たせないと行けないタイミングはちゃんと明確にしてあげる
? ボタンおしたらなんの反応もなく何もできない、みたいなのはNG
? 過度な演出はNG
? ユーザのテンションを上げたいポイントとの差別化は必要
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
ユーザにとっての価値を考える
? 下手な高速化より、時間の演出によって満足度が変わる
? “遅い”を許容するのではなく、”新たな価値”を作れない
かを考える
? 計測すべきは”速度”ではなく、”ユーザの満足度”
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
フロントエンドで
高速化にコミットする
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
関心を持つべきポイント
? メモリリーク
? 描画パフォーマンス
? ライブラリの特性の理解
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
メモリリーク
検知方法:
Google ChromeのdevToolsのTimelineやPro?les
を使う
Perfomance APIを使って自 に状態を送信して監
視するようにするという手もある
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
Google Chrome devToolsで監視
Used JS Heap を監視。
意図せずこいつが増えて
いたら、Summaryから
のループが発生してい
ないか、等怪しいコー
ドを探しだす。
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
描画パフォーマンス
? re?ow
? ブラウザのレンダリング?ツリーの再構築
? ノードの幅や高さ、親子関係を計算する
? ノードの位置やサイズが変わるか、それに関するプロパティを取得する
? repaint
? ノードの外見が変化するが、レイアウトには変更がないもの
? 背景や色の再描画
? 重たいCSSプロパティとアニメーション
? box-shadowやborder-radiusがかかった要素をアニメーションさせるのは重い
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
re?ow/repaintの対策
? `domElement.clientHeight` 等のレイアウト情報を取得する系
のプロパティは極力使わない?あるいはキャッシュを活用する
? `position:absolute` 等の絶対配置を使う
? `table`タグもしくは`display: table`を使わない
? JavaScriptからスタイルを書き換える頻度を減らす
? とにかくDOMのレイアウトの再構築を極力避ける
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
ライブラリの特性の理解
? 使っているライブラリを適切に理解すること
? 重くなる書き方?速くなる書き方
? JavaScriptとしての細かいチューニングよりよっぽど効
果がある
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
まとめ
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
今日の内容
? MFのFEとしての速度の向き合い方
? 測るべきは”ユーザ満足度”。速度はその中の一つの指標
? 遅いことを”価値”に変える方法を考える
? 最低限気を配るフロントのパフォーマンスとチューニン
グ
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
ご清聴ありがとうございました
Copyright (c) 2015 Mobile Factory, Inc. All rights reserved.
参考資料等
? ショートカットキーはマウスより遅い
? JavaScript アプリケーションのメモリー?リークを理解
する
? ReFlowの原因とマークアップの最適化

More Related Content

Viewers also liked (11)

Introduction to koyomi #appkoyomi
Introduction to koyomi #appkoyomiIntroduction to koyomi #appkoyomi
Introduction to koyomi #appkoyomi
IKEDA Kiyoshi
?
础苍驳耻濒补谤闯厂と贵濒耻虫と搁颈辞迟闯厂と
础苍驳耻濒补谤闯厂と贵濒耻虫と搁颈辞迟闯厂と础苍驳耻濒补谤闯厂と贵濒耻虫と搁颈辞迟闯厂と
础苍驳耻濒补谤闯厂と贵濒耻虫と搁颈辞迟闯厂と
Ryo Iinuma
?
本当に怖いパフォーマンスが悪い実装 #phpcon2013
本当に怖いパフォーマンスが悪い実装 #phpcon2013本当に怖いパフォーマンスが悪い実装 #phpcon2013
本当に怖いパフォーマンスが悪い実装 #phpcon2013
驰补丑辞辞!デベロッパーネットワーク
?
Netty 入門 - 「Netty ベース」の何かに着手する前に
Netty 入門 - 「Netty ベース」の何かに着手する前にNetty 入門 - 「Netty ベース」の何かに着手する前に
Netty 入門 - 「Netty ベース」の何かに着手する前に
Takuma SHIRAISHI
?
最近のフロントエンドツールの绍介
最近のフロントエンドツールの绍介最近のフロントエンドツールの绍介
最近のフロントエンドツールの绍介
Ryo Iinuma
?
狈别迟迟测らへん
狈别迟迟测らへん狈别迟迟测らへん
狈别迟迟测らへん
Go Tanaka
?
狈辞诲别-惫0.12の新机能について
狈辞诲别-惫0.12の新机能について狈辞诲别-惫0.12の新机能について
狈辞诲别-惫0.12の新机能について
shigeki_ohtsu
?
Xamarin バッドノウハウ大全
Xamarin バッドノウハウ大全Xamarin バッドノウハウ大全
Xamarin バッドノウハウ大全
Yoshito Tabuchi
?
How To Write Middleware In Ruby
How To Write Middleware In RubyHow To Write Middleware In Ruby
How To Write Middleware In Ruby
SATOSHI TAGOMORI
?
API スタブをえらんでみた
API スタブをえらんでみたAPI スタブをえらんでみた
API スタブをえらんでみた
daylilyfield
?
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Yoshito Tabuchi
?
Introduction to koyomi #appkoyomi
Introduction to koyomi #appkoyomiIntroduction to koyomi #appkoyomi
Introduction to koyomi #appkoyomi
IKEDA Kiyoshi
?
础苍驳耻濒补谤闯厂と贵濒耻虫と搁颈辞迟闯厂と
础苍驳耻濒补谤闯厂と贵濒耻虫と搁颈辞迟闯厂と础苍驳耻濒补谤闯厂と贵濒耻虫と搁颈辞迟闯厂と
础苍驳耻濒补谤闯厂と贵濒耻虫と搁颈辞迟闯厂と
Ryo Iinuma
?
Netty 入門 - 「Netty ベース」の何かに着手する前に
Netty 入門 - 「Netty ベース」の何かに着手する前にNetty 入門 - 「Netty ベース」の何かに着手する前に
Netty 入門 - 「Netty ベース」の何かに着手する前に
Takuma SHIRAISHI
?
最近のフロントエンドツールの绍介
最近のフロントエンドツールの绍介最近のフロントエンドツールの绍介
最近のフロントエンドツールの绍介
Ryo Iinuma
?
狈别迟迟测らへん
狈别迟迟测らへん狈别迟迟测らへん
狈别迟迟测らへん
Go Tanaka
?
狈辞诲别-惫0.12の新机能について
狈辞诲别-惫0.12の新机能について狈辞诲别-惫0.12の新机能について
狈辞诲别-惫0.12の新机能について
shigeki_ohtsu
?
Xamarin バッドノウハウ大全
Xamarin バッドノウハウ大全Xamarin バッドノウハウ大全
Xamarin バッドノウハウ大全
Yoshito Tabuchi
?
How To Write Middleware In Ruby
How To Write Middleware In RubyHow To Write Middleware In Ruby
How To Write Middleware In Ruby
SATOSHI TAGOMORI
?
API スタブをえらんでみた
API スタブをえらんでみたAPI スタブをえらんでみた
API スタブをえらんでみた
daylilyfield
?
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Yoshito Tabuchi
?

Similar to フロントエンドから見たWebアプリの高速化 #gotandapm (20)

スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果
Koichiro Sumi
?
スマートフォン奥别产アプリ最适化”3つの极意”
スマートフォン奥别产アプリ最适化”3つの极意”スマートフォン奥别产アプリ最适化”3つの极意”
スマートフォン奥别产アプリ最适化”3つの极意”
Koji Ishimoto
?
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポートSmartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Masaru Kimura
?
スマホ向け奥别产アプリ开発で使えるフロントエンド高速化手法
スマホ向け奥别产アプリ开発で使えるフロントエンド高速化手法スマホ向け奥别产アプリ开発で使えるフロントエンド高速化手法
スマホ向け奥别产アプリ开発で使えるフロントエンド高速化手法
Eiji Kodama
?
第3回公司奥别产システム开発セミナー「业务システムに贬罢惭尝5を上手に取り入れるためには?」
第3回公司奥别产システム开発セミナー「业务システムに贬罢惭尝5を上手に取り入れるためには?」第3回公司奥别产システム开発セミナー「业务システムに贬罢惭尝5を上手に取り入れるためには?」
第3回公司奥别产システム开発セミナー「业务システムに贬罢惭尝5を上手に取り入れるためには?」
Osamu Shimoda
?
20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築?運用でやってること
20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築?運用でやってること20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築?運用でやってること
20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築?運用でやってること
uenoyuuki
?
スマートデバイスを活かしたビジネスを成功させるポイント
スマートデバイスを活かしたビジネスを成功させるポイントスマートデバイスを活かしたビジネスを成功させるポイント
スマートデバイスを活かしたビジネスを成功させるポイント
Ryohei Sogo
?
The forefront of html5 implementation
The forefront of html5 implementationThe forefront of html5 implementation
The forefront of html5 implementation
Satoshi Tanaka
?
Browser Computing Structure
Browser Computing StructureBrowser Computing Structure
Browser Computing Structure
Shogo Sensui
?
【16-E-4】 テスト革命!パフォーマンステストの画期的アプローチ
【16-E-4】 テスト革命!パフォーマンステストの画期的アプローチ【16-E-4】 テスト革命!パフォーマンステストの画期的アプローチ
【16-E-4】 テスト革命!パフォーマンステストの画期的アプローチ
Developers Summit
?
狈颁顿颁モバイルアプリ高速开発サービス
狈颁顿颁モバイルアプリ高速开発サービス狈颁顿颁モバイルアプリ高速开発サービス
狈颁顿颁モバイルアプリ高速开発サービス
Ryohei Sogo
?
础辫辫笔辞迟モハ?イルアフ?リ开発『内製化』
础辫辫笔辞迟モハ?イルアフ?リ开発『内製化』础辫辫笔辞迟モハ?イルアフ?リ开発『内製化』
础辫辫笔辞迟モハ?イルアフ?リ开発『内製化』
Ryohei Sogo
?
Frontend optimization dena_creativeseminar
Frontend optimization dena_creativeseminarFrontend optimization dena_creativeseminar
Frontend optimization dena_creativeseminar
DeNA_open_events
?
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
Tak Inamori
?
モハ?イル时代の奥别产ハ?フォーマンス
モハ?イル时代の奥别产ハ?フォーマンスモハ?イル时代の奥别产ハ?フォーマンス
モハ?イル时代の奥别产ハ?フォーマンス
yoshikawa_t
?
モハ?イル奥别产アフ?リのこれまて?とこれから
モハ?イル奥别产アフ?リのこれまて?とこれからモハ?イル奥别产アフ?リのこれまて?とこれから
モハ?イル奥别产アフ?リのこれまて?とこれから
dsuke Takaoka
?
顿别狈础冲国内のアプリマーケティング手法、各プレイヤー、状况のまとめ
顿别狈础冲国内のアプリマーケティング手法、各プレイヤー、状况のまとめ顿别狈础冲国内のアプリマーケティング手法、各プレイヤー、状况のまとめ
顿别狈础冲国内のアプリマーケティング手法、各プレイヤー、状况のまとめ
01Booster
?
高山ゼミ冲河崎勇斗
高山ゼミ冲河崎勇斗高山ゼミ冲河崎勇斗
高山ゼミ冲河崎勇斗
Hayato Kawasaki
?
スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果スタートアップ向け!1人日でできるサービスの高速化方法と成果
スタートアップ向け!1人日でできるサービスの高速化方法と成果
Koichiro Sumi
?
スマートフォン奥别产アプリ最适化”3つの极意”
スマートフォン奥别产アプリ最适化”3つの极意”スマートフォン奥别产アプリ最适化”3つの极意”
スマートフォン奥别产アプリ最适化”3つの极意”
Koji Ishimoto
?
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポートSmartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Masaru Kimura
?
スマホ向け奥别产アプリ开発で使えるフロントエンド高速化手法
スマホ向け奥别产アプリ开発で使えるフロントエンド高速化手法スマホ向け奥别产アプリ开発で使えるフロントエンド高速化手法
スマホ向け奥别产アプリ开発で使えるフロントエンド高速化手法
Eiji Kodama
?
第3回公司奥别产システム开発セミナー「业务システムに贬罢惭尝5を上手に取り入れるためには?」
第3回公司奥别产システム开発セミナー「业务システムに贬罢惭尝5を上手に取り入れるためには?」第3回公司奥别产システム开発セミナー「业务システムに贬罢惭尝5を上手に取り入れるためには?」
第3回公司奥别产システム开発セミナー「业务システムに贬罢惭尝5を上手に取り入れるためには?」
Osamu Shimoda
?
20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築?運用でやってること
20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築?運用でやってること20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築?運用でやってること
20150530 無名の会社が、大規模サイト(スマホ対応)相手に、構築?運用でやってること
uenoyuuki
?
スマートデバイスを活かしたビジネスを成功させるポイント
スマートデバイスを活かしたビジネスを成功させるポイントスマートデバイスを活かしたビジネスを成功させるポイント
スマートデバイスを活かしたビジネスを成功させるポイント
Ryohei Sogo
?
The forefront of html5 implementation
The forefront of html5 implementationThe forefront of html5 implementation
The forefront of html5 implementation
Satoshi Tanaka
?
Browser Computing Structure
Browser Computing StructureBrowser Computing Structure
Browser Computing Structure
Shogo Sensui
?
【16-E-4】 テスト革命!パフォーマンステストの画期的アプローチ
【16-E-4】 テスト革命!パフォーマンステストの画期的アプローチ【16-E-4】 テスト革命!パフォーマンステストの画期的アプローチ
【16-E-4】 テスト革命!パフォーマンステストの画期的アプローチ
Developers Summit
?
狈颁顿颁モバイルアプリ高速开発サービス
狈颁顿颁モバイルアプリ高速开発サービス狈颁顿颁モバイルアプリ高速开発サービス
狈颁顿颁モバイルアプリ高速开発サービス
Ryohei Sogo
?
础辫辫笔辞迟モハ?イルアフ?リ开発『内製化』
础辫辫笔辞迟モハ?イルアフ?リ开発『内製化』础辫辫笔辞迟モハ?イルアフ?リ开発『内製化』
础辫辫笔辞迟モハ?イルアフ?リ开発『内製化』
Ryohei Sogo
?
Frontend optimization dena_creativeseminar
Frontend optimization dena_creativeseminarFrontend optimization dena_creativeseminar
Frontend optimization dena_creativeseminar
DeNA_open_events
?
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
Tak Inamori
?
モハ?イル时代の奥别产ハ?フォーマンス
モハ?イル时代の奥别产ハ?フォーマンスモハ?イル时代の奥别产ハ?フォーマンス
モハ?イル时代の奥别产ハ?フォーマンス
yoshikawa_t
?
モハ?イル奥别产アフ?リのこれまて?とこれから
モハ?イル奥别产アフ?リのこれまて?とこれからモハ?イル奥别产アフ?リのこれまて?とこれから
モハ?イル奥别产アフ?リのこれまて?とこれから
dsuke Takaoka
?
顿别狈础冲国内のアプリマーケティング手法、各プレイヤー、状况のまとめ
顿别狈础冲国内のアプリマーケティング手法、各プレイヤー、状况のまとめ顿别狈础冲国内のアプリマーケティング手法、各プレイヤー、状况のまとめ
顿别狈础冲国内のアプリマーケティング手法、各プレイヤー、状况のまとめ
01Booster
?
高山ゼミ冲河崎勇斗
高山ゼミ冲河崎勇斗高山ゼミ冲河崎勇斗
高山ゼミ冲河崎勇斗
Hayato Kawasaki
?
Ad

フロントエンドから見たWebアプリの高速化 #gotandapm

  • 1. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. フロントエンドから見たWeb アプリの高速化 #gotanda.pm 2015/06/24 @mizuki_r
  • 2. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. name. 飯沼?遼 account. twitter: @mizuki_r github: ry_mizuki role. フロントエンド寄りのエンジニア
  • 3. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 今日お話すること ? Mobile Factoryにおける”フロントエンドエンジニア” ? フロントとサーバでの高速化に対する見方の違い ? 高速化しない選択肢 ? フロントで”高速化”にコミットするには
  • 4. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. Mobile Factoryにおける、 フロントエンドエンジニアとは
  • 5. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 持つべき責務 UXを提案し、実装する
  • 6. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. FEの役割 ? UXに関し、その技術が必要なら習得する ? あらゆる職能との連携を行う ? サーバ、ディレクタ、デザイナ ? そのチームにおいて求められる範囲と求められる技術は 異なる ? JavaScript, Java, Swift, Perl, etc…
  • 7. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 今の私の場合 ? チームのプロジェクトはWebアプリケーション ? 技術的には、HTML5?CSS?JavaScriptが中心 ? AngularJSとかSCSSとか なので、今日は”フロント”って言ったら その辺のことだよ!
  • 8. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. フロントとサーバでの高速化に 対する見方の違い
  • 9. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 基本 速度の改善は、まず計測から始める これは一緒
  • 10. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 関心を持つべき値 サーバー フロント レスポンス速度 アプリケーション ミドルウェア(DBとか) サーバの負荷状況 通信速度 etc… リソースサイズ 描画速度 インタラクションへの反応速度 etc… フロントエンドはあらゆるUIの「描画」や「反応」の パフォーマンスを意識する必要がある
  • 11. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 計測方法 サーバー フロント ロギング 各サーバー毎に出力、 集計サーバに送信 クライアントで出力 APIサーバに送信 環境 任意のOS、環境を用意 できる ユーザの手元のOS、ブ ラウザ メモリ?CPU等の状態 リアルタイムで集計可能 ユーザの手元なので… 基本ユーザの手元なので、 情報を集めること自体が難易度高い
  • 12. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. フロントの改善へのハードル ? Analyticsや他のツール等で追える情報はある ? 頑張って自作できないこともない ? JavaScriptにパフォーマンスを取得するAPIがある ? ただしブラウザによって実装状況はk(ry ? 計測したところで対応できない問題もある ? OSが古い。ブラウザが古い。端末スペック(笑)
  • 13. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. やってられるか\(^o^)/
  • 14. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. そして、諦め 僕ゎもぅっかれたょ…. 愚直に数字を集計して改善するより、 もっと費用対効果のよい方法で速度を凌駕する体験を 提供できればそれでよいのでは?
  • 15. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 高速化しない、という選択肢
  • 16. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. なぜ高速化しないといけないのか? ? 速度が速いと… ? ユーザ満足度の向上やSEOの効果などが見込める ? 待つこと自体がストレス ? しかし… そのストレスを低減させることはできる?
  • 17. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 例題 あなたは友達と午前10:00に五反田駅で待ち合わせを していました。 しかし、友達は10分たってもやってきません。LINE で連絡を取りますが既読にならない。 途中で何かあったのかと思いますが、ふとあなたは 昨夜ずいぶん遅くまでその友達とイカになっていた ことを思い出します。
  • 18. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. この時のあなたの心情は? ? 早く反応してくれ ? イライライライライライラ ? もう帰っていイカ?
  • 19. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 例題2 数度の呼び出しを経て彼がようやく反応しました。 予想通り寝坊のようです。あと30分でつく、と慌て た声で彼はいいました。 あなたは溜息とともに待つことを承諾します。
  • 20. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. どうやって30分まつ? ? 携帯ゲーム ? ネットサーフィン ? 音楽を聞く ? 散歩でもする
  • 21. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 何が言いたいかというと… 何時まで待てばいいのか、 待っている間何をすればいいのか、 がわかれば人は待てる! …と思う
  • 22. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 具体例 ? ローディングゲージ ? ローディングアニメーション ? ゲームのtips ? ミニゲーム
  • 23. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 遅い、とユーザに思わせない。 楽しいと思えるようにする ? ゲームなら世界観やゲームのチップスやキャラとか ? 簡単なアニメーションでも、動かれると気になって見てしまう ? よくあるグルグル回るだけのアニメーションはNG ? 演出にユーザが慣れてしまう ? イベントや告知なども効果あり ? 必ず目に触れるポイントで、かつ読む時間も作れる ? ユーザに待たせないと行けないタイミングはちゃんと明確にしてあげる ? ボタンおしたらなんの反応もなく何もできない、みたいなのはNG ? 過度な演出はNG ? ユーザのテンションを上げたいポイントとの差別化は必要
  • 24. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. ユーザにとっての価値を考える ? 下手な高速化より、時間の演出によって満足度が変わる ? “遅い”を許容するのではなく、”新たな価値”を作れない かを考える ? 計測すべきは”速度”ではなく、”ユーザの満足度”
  • 25. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. フロントエンドで 高速化にコミットする
  • 26. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 関心を持つべきポイント ? メモリリーク ? 描画パフォーマンス ? ライブラリの特性の理解
  • 27. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. メモリリーク 検知方法: Google ChromeのdevToolsのTimelineやPro?les を使う Perfomance APIを使って自 に状態を送信して監 視するようにするという手もある
  • 28. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. Google Chrome devToolsで監視 Used JS Heap を監視。 意図せずこいつが増えて いたら、Summaryから のループが発生してい ないか、等怪しいコー ドを探しだす。
  • 29. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 描画パフォーマンス ? re?ow ? ブラウザのレンダリング?ツリーの再構築 ? ノードの幅や高さ、親子関係を計算する ? ノードの位置やサイズが変わるか、それに関するプロパティを取得する ? repaint ? ノードの外見が変化するが、レイアウトには変更がないもの ? 背景や色の再描画 ? 重たいCSSプロパティとアニメーション ? box-shadowやborder-radiusがかかった要素をアニメーションさせるのは重い
  • 30. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. re?ow/repaintの対策 ? `domElement.clientHeight` 等のレイアウト情報を取得する系 のプロパティは極力使わない?あるいはキャッシュを活用する ? `position:absolute` 等の絶対配置を使う ? `table`タグもしくは`display: table`を使わない ? JavaScriptからスタイルを書き換える頻度を減らす ? とにかくDOMのレイアウトの再構築を極力避ける
  • 31. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. ライブラリの特性の理解 ? 使っているライブラリを適切に理解すること ? 重くなる書き方?速くなる書き方 ? JavaScriptとしての細かいチューニングよりよっぽど効 果がある
  • 32. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. まとめ
  • 33. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 今日の内容 ? MFのFEとしての速度の向き合い方 ? 測るべきは”ユーザ満足度”。速度はその中の一つの指標 ? 遅いことを”価値”に変える方法を考える ? 最低限気を配るフロントのパフォーマンスとチューニン グ
  • 34. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. ご清聴ありがとうございました
  • 35. Copyright (c) 2015 Mobile Factory, Inc. All rights reserved. 参考資料等 ? ショートカットキーはマウスより遅い ? JavaScript アプリケーションのメモリー?リークを理解 する ? ReFlowの原因とマークアップの最適化