2016年02月13日

WWDC15 - 230 Performance on iOS and watchOS

Performance on iOS and watchOS
WWDC 2015 | App Frameworks | Session 230
37:05
https://developer.apple.com/videos/play/wwdc2015-230/

※WWDCセッション関係の記事は、セッション内容を要約して内容を伝えるのが目的ではない。各セッションビデオで何が話されているかの項目をテキスト化することで後で何かを調べたいときにどのビデオを見れば良いか判断する材料にするために書いている。

パフォーマンスを追加のボーナスとは考えずに、アプリケーションの機能の一つとして重視すべきという話。

パフォーマンス向上のためにすべきことを列挙して示す。セッション。これはどのプラットフォームでも共通。まず実測して問題を把握して、改善する。パフォーマンス問題をアニメーション、応答性、メモリにわけてそれぞれの計測法と改善の一般的手法について述べる。

最後にwatchOS特有のパフォーマンス問題も。最小、最新、必要最低限の情報のみに絞れということ。使えるメモリなどのリソースは少ないし、通信は遅い。さらにユーザーが使いたいと思って待つ時間も他のプラットフォームより短いし、ちょっと見て終わるような使い方が多い。そのためにサーバー側から見直した方がいいというアドバイス。

[Performance Is a Feature]
Responsiveness delights and engages users
Be a good neighbor, especially in Multiscreen on iOS9
Efficient apps extends battery life
Supports the whole range of iOS9 hardware

[Thinking About Performance]
Choosing technologies
Taking measurements
Setting goals
Performance workflow

[Use th Right Tool for the Jobs]
Know the technologies
Pick the best ones for your app
アプリが3つの文字列を保持するならUser Defaultsで十分だが、1000個ならどうか?
Apple technologies are optimized.

[Measuring Performance]
Animations
Insturments - Core Animation
Responsiveness
Code instrumentation
Insturuments - System Trace
Memory
Xcode debugger
Insturuments - Allocations
Insturuments - Leaks

[Code Insturmentation]
let startTime = CFAbsoluteTImeGetCurrent()
let endTime = CFAbsoluteTImeGetCurrent()
let totalTime = (endTime - startTime) * 1000 // miliseconds

Taps and button presses
Tabs and model view

[Setting Performance Goal]
60fps scrolling and animations
Respond to user actins in 100ms ... on older devices!

[Performance Workflow]
Don't guess
Avoid premature optimization
Make one change at a time
Just like ordinary debugging

Reproduce -> Progile -> Measure -> Change code -> ...

[Main Thread Consumes User Input]
Thouches and scrolling
Orientation
Multitasking resizes
A responsive main thread makes your app feel great

[Avoid Usign the Main thread for ...]
CPU-intensive work
Tasks that depend on external resources

[What's a Blocking Call]
Disk IO, Networking

synchoronous == blocking
Use Asynchoronous and GCD

[Thread Safety]
実装者がスレッドセーフを考えて作らなければならない。

dispatch_async( dispatch_get_global_queue( QOS_CLASS_USER_INITIATED, 0) ) {
long time code.

dispatch_async( dispatch_get_main_queue() ) {
change UI like...
self.imageView.image = ...
}
}


[Memory]
Never enouthg to go around
Suspended apps are not persisted
They are evicted without storing

Reclaiming memory takes time
Sudden hight-memory demand impacts responsiveness
Preserve sate in the background

[Application Lifecycle]
Use NSCache
Listen for notifications
- UIApplicationDidEnterBackgroundNotification
- UIApplicationDidReceiveMemoryWarningNotification

[watchOS Perfromance Strategies]
Apple Watchユーザーは最新の通知、グランスに短時間で応答し使用するのが特徴。
Impleenting new server logic
- send appropriately sized and formatted responses
- Remove unused keys from JSON or XML blobs
- Send appropriately sized images
- Send an appropriate number of records (one screen)

Keep app context updated
- Bidirectional shared state
- WCSession.defaultSession().updateApplicationContext(..)
- Benefit from Background App Refresh

Relying on exting server logic
- Implement a lightweight service on iPhone
- WCSession.defaultSession().sendMessage(...)
- Parse and pare down server responses on iPhone

posted by 永遠製作所 at 18:16| 東京 ☀| Comment(0) | TrackBack(0) | WWDC | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/433771055
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック