Skip to content
This repository has been archived by the owner on Oct 18, 2022. It is now read-only.

Performance Improvements #6

Merged
merged 9 commits into from
Feb 23, 2016
Merged

Conversation

chuganzy
Copy link
Contributor

DBの読み書きがメインスレッドで実行されておりUIアップデート処理がブロックされていたので、非同期のメソッドに移行しました。

DB I/O is performed on the main thread which blocks UI updates, so change to use asynchronous methods.

@@ -159,7 +159,7 @@ class PURLogStoreSpec: QuickSpec {
logStore.retrieveLogsForPattern("testA.*", output: outputA, completion: { logs in
count = logs.count
})
expect(count).toEventually(equal(300), timeout: 3)
expect(count).toEventually(equal(300), timeout: 20)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

takes about 5~8 seconds.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほど、retrieveLogsForPattern が非同期でログを読み込むようにはなったが、時間がかかるようにはなってしまったんですかね…

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

そうですね。
この変更での一番悩みどころですが、スクロール中にログを送ることがあり、FPSが落ちていましたので…。
もしこれがネックになりそうでしたらCloseして頂いて大丈夫です。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほど。時間がかかるよりも、ログが欠損したり重複したりすることがない事を気にしているので、それが守られて体験が向上するなら良いと思います。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

分かりました!


NSOperationQueue *writeChunkQueue = [[NSOperationQueue alloc] init];
writeChunkQueue.maxConcurrentOperationCount = 1;
self.writeChunkQueue = writeChunkQueue;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeChunk が複数走らないようにする意図があったんですが、何か問題がありましたか?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

変更前、writeChunkは別のスレッドで実行されることを見落としていた(ライブラリを使う側として)のと、サブスレッドで実行される理由が見当たらなかったので(メインスレッドを使うので良さそうでした)消しました。
completionの内部での処理もロックがされていなかったので、ロック処理を書くよりシンプルになって良いかなと思いますがいかがでしょうか?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

メインスレッドに変えましたので「複数走らない」というこれまでと仕様とは変わっていないつもりです。
(認識違いがありましたらご指摘お願いいたしますm(_ _)m)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

writeChunk (callWriteChunk) がメインスレッドで実行されるように変わったってことですよね?

呼び出しているところは

  • flush (こちらも確実にメインスレッドで呼ばれるようにしたほうが良いのかしら)
  • callWriteChunk の retry

たしかに、buffered output プラグインを継承したプラグインの実装の方で気をつければメインスレッドで問題ないはずですよね、大丈夫そうな気がしてきました。
とはいえこのPRをマージしたらメジャーバージョンあげたりしたいですね

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

はい。メインスレッドで実行するように変更しました。

たしかに、buffered output プラグインを継承したプラグインの実装の方で気をつければメインスレッドで問題ないはずですよね

参考までに、どのようなことを気をつけた方がよさそうでしょうか?

メジャーアップデートの件、賛成です。

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

参考までに、どのようなことを気をつけた方がよさそうでしょうか?

ライブラリを使う人がプラグインを実装する際に、writeChunk がメインスレッドで実行されるということを意識して実装してもらえれば大丈夫かなと思いました。
例えば、サーバにログを送るようなプラグインを書く場合、同期的に書かない、など。
completion ブロックでoutputプラグインの成功・失敗を指定する形になっているので、多分そんなに影響を受けるアプリはないような気がします。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

かしこまりました

@slightair
Copy link
Contributor

大変長い間PRを放置してしまい、申し訳ありませんでした。
いくつか気になった点をコメントしましたのでよろしくお願いします。

動作確認に Quick/Nimble のアップデートが必要でした。こちらは別途PRを出そうと思っていますが、このPRに含めていただいても構いません。

僕の意図がきちんと伝わらなくても困ってしまうので日本語でコメントしています。コメントしていただける際は 日本語/英語 どちらでもかまいません。よろしくお願いします。

@chuganzy
Copy link
Contributor Author

@slightair レビューありがとうございました。返信と質問をしましたのでご確認お願い致します。返信を頂いてから修正をしようと思っています。よろしくお願いいたしますm(_ _)m

@chuganzy
Copy link
Contributor Author

@slightair コメント頂いた点を一通り修正しましたので再度ご確認をお願いいたしますm(_ _)m

Takeru Chuganji added 2 commits February 23, 2016 00:08
@slightair
Copy link
Contributor

LGTM
長々と対応ありがとうございました、マージしますね。

なるべくはやめに 2.0.0 としてリリースできるようにします。 🍥

slightair added a commit that referenced this pull request Feb 23, 2016
@slightair slightair merged commit ab7ebd2 into cookpad:master Feb 23, 2016
@chuganzy
Copy link
Contributor Author

🍺

@chuganzy chuganzy mentioned this pull request Mar 15, 2016
@slightair slightair mentioned this pull request Nov 1, 2016
@chuganzy chuganzy deleted the performance_fix branch March 5, 2018 07:43
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants