Enviar pesquisa
Carregar
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
•
Transferir como KEY, PDF
•
6 gostaram
•
2,271 visualizações
Makoto Setoh
Seguir
2012/8/18に大阪で開催されたiOS Developersカンファレンス関西で発表したものです。
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 23
Baixar agora
Recomendados
カジュアルにソースコードリーディング
カジュアルにソースコードリーディング
Akihiro Okuno
並列処理は本当に早いのか
並列処理は本当に早いのか
Surf244
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
keki3
マイクラ自動化枠第2回資料
マイクラ自動化枠第2回資料
Ryo Fujita
マイクラ自動化枠第1回資料
マイクラ自動化枠第1回資料
Ryo Fujita
Slub data structure
Slub data structure
Masami Ichikawa
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
basicinc_dev
Recomendados
カジュアルにソースコードリーディング
カジュアルにソースコードリーディング
Akihiro Okuno
並列処理は本当に早いのか
並列処理は本当に早いのか
Surf244
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
keki3
マイクラ自動化枠第2回資料
マイクラ自動化枠第2回資料
Ryo Fujita
マイクラ自動化枠第1回資料
マイクラ自動化枠第1回資料
Ryo Fujita
Slub data structure
Slub data structure
Masami Ichikawa
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
basicinc_dev
OSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUG
Hideki Saito
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
JustSystems Corporation
Node-v0.12の新機能について
Node-v0.12の新機能について
shigeki_ohtsu
Subprocess no susume
Subprocess no susume
Makoto Kishimoto
Docker やってみた
Docker やってみた
Fumihiko Nishio
Slub alloc and free
Slub alloc and free
Masami Ichikawa
Nuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlify
ogawatti
Openresty
Openresty
ogawatti
SystemV IPC
SystemV IPC
Masami Ichikawa
Emscripten使ってみた
Emscripten使ってみた
Yuusuke Jinguuji
JAZUG #26 AKS backup with Velero
JAZUG #26 AKS backup with Velero
Tetsuya Sodo
Nodejuku01 ohtsu
Nodejuku01 ohtsu
Nanha Park
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
kasaharatt
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
koichik
Swiftでブロックチェーンを実装する
Swiftでブロックチェーンを実装する
幸雄 村上
OSC沖縄2014_JPUG資料
OSC沖縄2014_JPUG資料
kasaharatt
VPとSPIDERを使ったMySQL運用
VPとSPIDERを使ったMySQL運用
Ryuta Kamizono
Tezos hands-on : Tezos exercise
Tezos hands-on : Tezos exercise
Jun Furuse
Tezos Hands on 2019-06-15 Exercise (Japanese)
Tezos Hands on 2019-06-15 Exercise (Japanese)
Jun Furuse
20120721_ishkawa
20120721_ishkawa
Yosuke Ishikawa
Ll xcode
Ll xcode
Net Kanayan
Mais conteúdo relacionado
Mais procurados
OSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUG
Hideki Saito
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
JustSystems Corporation
Node-v0.12の新機能について
Node-v0.12の新機能について
shigeki_ohtsu
Subprocess no susume
Subprocess no susume
Makoto Kishimoto
Docker やってみた
Docker やってみた
Fumihiko Nishio
Slub alloc and free
Slub alloc and free
Masami Ichikawa
Nuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlify
ogawatti
Openresty
Openresty
ogawatti
SystemV IPC
SystemV IPC
Masami Ichikawa
Emscripten使ってみた
Emscripten使ってみた
Yuusuke Jinguuji
JAZUG #26 AKS backup with Velero
JAZUG #26 AKS backup with Velero
Tetsuya Sodo
Nodejuku01 ohtsu
Nodejuku01 ohtsu
Nanha Park
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
kasaharatt
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
koichik
Swiftでブロックチェーンを実装する
Swiftでブロックチェーンを実装する
幸雄 村上
OSC沖縄2014_JPUG資料
OSC沖縄2014_JPUG資料
kasaharatt
VPとSPIDERを使ったMySQL運用
VPとSPIDERを使ったMySQL運用
Ryuta Kamizono
Tezos hands-on : Tezos exercise
Tezos hands-on : Tezos exercise
Jun Furuse
Tezos Hands on 2019-06-15 Exercise (Japanese)
Tezos Hands on 2019-06-15 Exercise (Japanese)
Jun Furuse
Mais procurados
(20)
OSC2012-KANSAI@Kyoto JOSUG
OSC2012-KANSAI@Kyoto JOSUG
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
Node-v0.12の新機能について
Node-v0.12の新機能について
Subprocess no susume
Subprocess no susume
Docker やってみた
Docker やってみた
Slub alloc and free
Slub alloc and free
Nuxt.js + microCMS + netlify
Nuxt.js + microCMS + netlify
Openresty
Openresty
SystemV IPC
SystemV IPC
Emscripten使ってみた
Emscripten使ってみた
JAZUG #26 AKS backup with Velero
JAZUG #26 AKS backup with Velero
Nodejuku01 ohtsu
Nodejuku01 ohtsu
Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
東京Node学園#3 Domains & Isolates
東京Node学園#3 Domains & Isolates
Swiftでブロックチェーンを実装する
Swiftでブロックチェーンを実装する
OSC沖縄2014_JPUG資料
OSC沖縄2014_JPUG資料
VPとSPIDERを使ったMySQL運用
VPとSPIDERを使ったMySQL運用
Tezos hands-on : Tezos exercise
Tezos hands-on : Tezos exercise
Tezos Hands on 2019-06-15 Exercise (Japanese)
Tezos Hands on 2019-06-15 Exercise (Japanese)
Semelhante a 軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
20120721_ishkawa
20120721_ishkawa
Yosuke Ishikawa
Ll xcode
Ll xcode
Net Kanayan
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
yukihiro kawada
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
VirtualTech Japan Inc.
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
fumoto kazuhiro
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
信之 岩永
Dotnetconf2017
Dotnetconf2017
Yoshiyuki Taniguchi
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Yosuke Onoue
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
Masanobu Sato
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
Insight Technology, Inc.
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Atsuo Yamasaki
Apache Torqueについて
Apache Torqueについて
tako pons
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
Mori Shingo
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
VirtualTech Japan Inc.
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
Masaki Yamakawa
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
H2O Space. Co., Ltd.
Semelhante a 軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
(20)
20120721_ishkawa
20120721_ishkawa
Ll xcode
Ll xcode
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
Dotnetconf2017
Dotnetconf2017
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Azure で Serverless 初心者向けタッチ&トライ
Azure で Serverless 初心者向けタッチ&トライ
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[db analytics showcase Sapporo 2017] A15: Pythonでの分散処理再入門 by 株式会社HPCソリューションズ ...
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
Apache Torqueについて
Apache Torqueについて
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
インメモリーで超高速処理を実現する場合のカギ
インメモリーで超高速処理を実現する場合のカギ
ちゃんとWeb会議スライド『Coffee script』
ちゃんとWeb会議スライド『Coffee script』
Último
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Último
(7)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
軽量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
Notas do Editor
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Baixar agora