2010年1月31日日曜日

LDReader 1.0.2 パフォーマンス改善と記事一覧画面追加

android の LDReader 1.0.2 をリリースしました。主な変更点はこちら。

・記事一覧画面を追加
・パフォーマンス改善
・バグ修正
ソース差分

記事一覧画面について

今までの画面遷移は
フィード一覧 → 記事詳細
だったのですが
フィード一覧 → 記事一覧 → 記事詳細
としました。

記事一覧を作ってみたら今まで無理して記事詳細に詰め込んでいた機能が、以外とすんなりおさまるようになりました。
使用感もこちらの方が自然になったと思います。

パフォーマンス改善

使っていてデータがたまってくると、記事詳細からフィード一覧へ戻るときどうしても遅いことに気づき調査したところ。。

sqlite に対する次の SQL が遅いことが分かりました。
select count(*) from item subscription_id = ? and unread = 1


item テーブルのスキーマはこんな感じです。id にアンダーバーがついてるのは android の慣例ですね。
CREATE TABLE item (
_id integer primary key,
subscription_id integer,
uri text,
title text,
body text,
author text,
unread integer,
created_time integer,
modified_time integer
);
CREATE INDEX idx_item_created_time on item(created_time);
CREATE INDEX idx_item_modified_time on item(modified_time);
CREATE INDEX idx_item_subscription_id on item(subscription_id);
CREATE INDEX idx_item_title on item(title);
CREATE INDEX idx_item_unread on item(unread);


item テーブルの subscription_id と unread にはそれぞれインディクスを貼ってあるのにどーしてこんなに遅いんだろうと。

色々と回り道しつつ、次のように複合インディクスを追加することで解決しました。
CREATE INDEX idx_item_unread_by_sub_id on item(subscription, unread);


使ってくださってる方がいらっしゃったら是非アップグレードをお勧めします^^