Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Makoto Setoh
KEY, PDF
2,291 views
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
2012/8/18に大阪で開催されたiOS Developersカンファレンス関西で発表したものです。
Technology
◦
Read more
6
Save
Share
Embed
Embed presentation
Download
Downloaded 22 times
1
/ 23
2
/ 23
3
/ 23
4
/ 23
5
/ 23
6
/ 23
7
/ 23
8
/ 23
9
/ 23
10
/ 23
11
/ 23
12
/ 23
13
/ 23
14
/ 23
15
/ 23
16
/ 23
17
/ 23
18
/ 23
19
/ 23
20
/ 23
21
/ 23
22
/ 23
23
/ 23
More Related Content
PDF
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
by
keki3
PPTX
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
by
shigeki_ohtsu
PDF
並列処理は本当に早いのか
by
Surf244
PDF
Slub data structure
by
Masami Ichikawa
PDF
マイクラ自動化枠第1回資料
by
Ryo Fujita
PPTX
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
by
basicinc_dev
KEY
カジュアルにソースコードリーディング
by
Akihiro Okuno
PDF
マイクラ自動化枠第2回資料
by
Ryo Fujita
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
by
keki3
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
by
shigeki_ohtsu
並列処理は本当に早いのか
by
Surf244
Slub data structure
by
Masami Ichikawa
マイクラ自動化枠第1回資料
by
Ryo Fujita
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
by
basicinc_dev
カジュアルにソースコードリーディング
by
Akihiro Okuno
マイクラ自動化枠第2回資料
by
Ryo Fujita
What's hot
PDF
SystemV IPC
by
Masami Ichikawa
PPTX
JavaでインメモリSQLエンジンを作ってみた
by
JustSystems Corporation
PPTX
Swiftでブロックチェーンを実装する
by
幸雄 村上
PDF
Postgre sql9.3 newlockmode_and_etc
by
kasaharatt
PDF
Nuxt.js + microCMS + netlify
by
ogawatti
PPTX
Javaで簡単にgpgpu aparapi
by
Ken'ichi Sakiyama
PDF
Slub alloc and free
by
Masami Ichikawa
PDF
Nodejuku01 ohtsu
by
Nanha Park
PDF
Openresty
by
ogawatti
PPTX
Emscripten使ってみた
by
Yuusuke Jinguuji
PDF
JAZUG #26 AKS backup with Velero
by
Tetsuya Sodo
PDF
東京Node学園#3 Domains & Isolates
by
koichik
PDF
OSC2012-KANSAI@Kyoto JOSUG
by
Hideki Saito
PDF
Tezos Hands on 2019-06-15 Exercise (Japanese)
by
Jun Furuse
PDF
Tezos hands-on : Tezos exercise
by
Jun Furuse
PDF
Node-v0.12の新機能について
by
shigeki_ohtsu
PDF
Docker やってみた
by
Fumihiko Nishio
PDF
Subprocess no susume
by
Makoto Kishimoto
PDF
VPとSPIDERを使ったMySQL運用
by
Ryuta Kamizono
PDF
OSC沖縄2014_JPUG資料
by
kasaharatt
SystemV IPC
by
Masami Ichikawa
JavaでインメモリSQLエンジンを作ってみた
by
JustSystems Corporation
Swiftでブロックチェーンを実装する
by
幸雄 村上
Postgre sql9.3 newlockmode_and_etc
by
kasaharatt
Nuxt.js + microCMS + netlify
by
ogawatti
Javaで簡単にgpgpu aparapi
by
Ken'ichi Sakiyama
Slub alloc and free
by
Masami Ichikawa
Nodejuku01 ohtsu
by
Nanha Park
Openresty
by
ogawatti
Emscripten使ってみた
by
Yuusuke Jinguuji
JAZUG #26 AKS backup with Velero
by
Tetsuya Sodo
東京Node学園#3 Domains & Isolates
by
koichik
OSC2012-KANSAI@Kyoto JOSUG
by
Hideki Saito
Tezos Hands on 2019-06-15 Exercise (Japanese)
by
Jun Furuse
Tezos hands-on : Tezos exercise
by
Jun Furuse
Node-v0.12の新機能について
by
shigeki_ohtsu
Docker やってみた
by
Fumihiko Nishio
Subprocess no susume
by
Makoto Kishimoto
VPとSPIDERを使ったMySQL運用
by
Ryuta Kamizono
OSC沖縄2014_JPUG資料
by
kasaharatt
Similar to 軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
PDF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
by
Atsushi Tadokoro
KEY
Objc lambda
by
matuura_core
PDF
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
by
幸雄 村上
PDF
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
by
Atsushi Tadokoro
PDF
IOS/Androidアプリの3つの大事な設計方針
by
Ken Morishita
PDF
20120721_ishkawa
by
Yosuke Ishikawa
KEY
Ll xcode
by
Net Kanayan
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
by
聡 中川
PDF
flasherがはじめてiOS開発をしてみて
by
佐藤 俊太郎
PDF
リアルFacebookガジェットを作った
by
Mariko Goda
PPTX
2012 05-19第44回cocoa勉強会発表資料
by
OCHI Shuji
PDF
BPStudy20121221
by
Shinichiro Takezaki
KEY
1.29.user,user,user
by
Tonny Xu
PPTX
121117 metro styleapp_templateapp
by
Takayoshi Tanaka
KEY
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
by
NilOne Ltd.
PDF
Cocoa Pro5
by
hasegawa
KEY
Cocoa勉強会関西2012年5月
by
Satoshi Oomori
PDF
iPhone アプリ開発の実例
by
Tokyo City University, Ueno Lab.
PDF
DevLOVE iPhoneアプリ勉強会
by
Toshimitsu Takahashi
PDF
オープンソースエコシステム #demodaytokyo
by
Shuichi Tsutsumi
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
by
Atsushi Tadokoro
Objc lambda
by
matuura_core
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
by
幸雄 村上
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
by
Atsushi Tadokoro
IOS/Androidアプリの3つの大事な設計方針
by
Ken Morishita
20120721_ishkawa
by
Yosuke Ishikawa
Ll xcode
by
Net Kanayan
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
by
聡 中川
flasherがはじめてiOS開発をしてみて
by
佐藤 俊太郎
リアルFacebookガジェットを作った
by
Mariko Goda
2012 05-19第44回cocoa勉強会発表資料
by
OCHI Shuji
BPStudy20121221
by
Shinichiro Takezaki
1.29.user,user,user
by
Tonny Xu
121117 metro styleapp_templateapp
by
Takayoshi Tanaka
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
by
NilOne Ltd.
Cocoa Pro5
by
hasegawa
Cocoa勉強会関西2012年5月
by
Satoshi Oomori
iPhone アプリ開発の実例
by
Tokyo City University, Ueno Lab.
DevLOVE iPhoneアプリ勉強会
by
Toshimitsu Takahashi
オープンソースエコシステム #demodaytokyo
by
Shuichi Tsutsumi
Recently uploaded
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
PDF
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
PDF
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
PPTX
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
PDF
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PCCC25(設立25年記念PCクラスタシンポジウム):東京大学情報基盤センター テーマ1/2/3「Society5.0の実現を目指す『計算・データ・学習...
by
PC Cluster Consortium
安価な ロジック・アナライザを アナライズ(?),Analyze report of some cheap logic analyzers
by
たけおか しょうぞう
visionOS TC「新しいマイホームで過ごすApple Vision Proとの新生活」
by
Sugiyama Yugo
DrupalCon Nara 2025の記録 .
by
iPride Co., Ltd.
第25回FA設備技術勉強会_自宅で勉強するROS・フィジカルAIアイテム.pdf
by
TomohiroKusu
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
1.
軽量Evernoteクライアント SmartEverにおける アプリ高速化の工夫と課題
Makoto Setoh @setoh2000 1
2.
自己紹介 • 個人iOSデベロッパー • アプリで生計を立てたい! •
主に深夜に活動 • Twitter @setoh2000 2
3.
アプリ紹介 • MY辞書登録 • Touch
Icon Creator • Duet Browser (iPad) • TweetLink • 和暦+ • SmartEver 3
4.
SmartEverとは • 軽量Evernoteクライアント • テキスト、写真の投稿ができる •
ノートの編集ができる • 高速な検索 • SmartEver タグが付いたノート を同期 4
5.
ユーザーの声 •
あなたのEvernoteにスピード革命を☆とに かく動作が速くて作業がサクサク進 む!!(iPhone女史さん) • 同期爆速で閲覧・編集ともにハイレベルな 操作が可能な軽量Evernoteクライアント 「SmartEver」が凄すぎる!(OZPAの表4) 5
6.
目標 空気のように軽いEvernoteクライアント
イメージ図 6
7.
高速化の工夫 時間のかかる処理はバックグラウンドで • NSOperation • GCD+Blocks
7
8.
NSOperation • 目的に合わせてクラスを継承して使う • NSOperationQueueに追加することで実行 •
キャンセルの仕組みがある • 複雑な処理に向いている 8
9.
NSOperationから ENSearchOperationを派生 // //
ENSearchOperation.h // @interface ENSearchOperation : NSOperation @property (nonatomic, copy) NSString *notebookName; @property (nonatomic, retain) NSArray *tagNames; @property (nonatomic, copy) NSString *searchString; ... 9
10.
ENSearchOperationの実装 - (void)main {
... for (NSInteger i = 0; i <= 100000; i += maxNotes) { if (self.isCancelled) return; ... NSError *error; tempResults = [myNoteStore findNotes:self.searchString notebookName:self.notebookName tagNames:self.tagNames offset:startIndex maxNotes:maxNotes error:&error]; ... [self postNotificationOnMainThread:@"UpdatedSearchResult"]; } ... } 10
11.
NSNotification による通知 - (void)postNotificationOnMainThread:(NSString
*)notificationName { NSNotification* notification = [NSNotification notificationWithName:notificationName object:self userInfo:nil]; [[NSNotificationCenter defaultCenter] performSelector:@selector(postNotification:) onThread:[NSThread mainThread] withObject:notification waitUntilDone:NO]; } 11
12.
NSOperationQueueの作成 self.operationQueue = [[NSOperationQueue
alloc] init]; [self.operationQueue setMaxConcurrentOperationCount:1]; setMaxConcurrentOperationCountで同時に 実行するオペレーションの数を指定 12
13.
NSOperationの作成と実行 ENSearchOperation *searchOperation
= [[ENSearchOperation alloc] init]; searchOperation.searchString = searchString; searchOperation.tagNames = self.tagNames; searchOperation.notebookName = self.notebookName; [self.operationQueue addOperation:searchOperation]; 13
14.
NSOperationの継承クラス • ENSaveNoteOperation (ノート作成) •
ENUpdateNoteOperation (ノート更新) • ENGetNoteOperation (ノート取得) • ENSearchOperation (検索) • ENResourceLoaderOperation (画像などの取得) • ENUpdateNotebooksOperation (ノートブック一覧の更新) • ENUpdateTagsOperation (タグ一覧の更新) • ENSyncOperation (同期処理) 14
15.
GCD+Blocks • GCD (Grand
Central Dispatchの略) • 手軽に使える • キャンセルの仕組みが用意されていない • シンプルな処理(短時間)に向いている エキスパートObjective-Cプログラミング 坂本一樹(著) @splhack 15
16.
GCD+Blocksの例 @implementation MSBlocks + (void)executeInBackground:(void(^)())block {
dispatch_queue_t mySerialDispatchQueue = dispatch_queue_create("com.setoh2000.gcd.Queue", NULL); dispatch_async(mySerialDispatchQueue, block); } [MSBlocks executeInBackground:^{ [self saveFavorites]; [self saveFavorites]; }]; 16
17.
検索の高速化 • 必要最低限の結果をまず取得して表示 (10件
→50件→100件→100件→...) • プレビュー(本文、画像)もバックグラウンドで 17
18.
同期の高速化 • “SmartEver”タグが付いたノートのみ同期 • “SmartEver”タグで検索しノートが更新されて
いればダウンロード • しかし数が増えると遅くなる… getFilteredSyncChunk: 18
19.
getFilteredSyncChunk:とは • 指定した時点から更新された情報だけを取得できる! 指定した時点とは?
USN (UpdateSequenceNumber) 19
20.
USN: UpdateSequenceNumber アカウント作成時からサーバーでのすべてのイベント に付くシーケンス番号
USN イベント 101 ノートA作成 102 ノートAにタグX付加 103 ノートB削除 104 ノートCをノートブックYに移動 20
21.
getFilteredSyncChunk:の利点 • 更新された情報だけを取得できる (何も更新されてなければ1回の呼びだしで済む) • フィルターで欲しい種別のみ指定できる
- 更新されたノート - 更新されたノートブック - 更新されたタグ - 削除されたオブジェクト - 保存された検索 21
22.
今後の課題 • 起動時にメタデータを全件読み込んでい る→ 遅い •
やっぱりCoreDataか。。 22
23.
まとめ
• 目標は高く(空気のように軽い・・) • 時間のかかる処理はバックグラウンドで (NSOperation, GCD+Blocks) • Evernoteの同期は getFilteredSyncChunk 23
Editor's Notes
#2
\n
#3
\n
#4
\n
#5
\n
#6
\n
#7
\n
#8
\n
#9
\n
#10
\n
#11
\n
#12
\n
#13
\n
#14
\n
#15
\n
#16
\n
#17
\n
#18
\n
#19
\n
#20
\n
#21
\n
#22
\n
#23
\n
#24
\n
Download