Your SlideShare is downloading. ×
0
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
ページャ実装マニアックス
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

ページャ実装マニアックス

5,727

Published on

Published in: Technology, Education
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,727
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
10
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ページャ実装マニアックス 2010年10月16日 株式会社はてな id:hakobe932 12010年10月17日日曜日
  • 2. 自己紹介 ❖ id:hakobe932 •‣ 株式会社はてな アプリケーションエンジニア ‣ 1年目 (バイト含めると3年目) • 京都ネイティブ • はてなココ • http://d.hatena.ne.jp/hakobe932 22010年10月17日日曜日
  • 3. 言語 • Perl • JavaScript • Objective-C • Java • Ruby) • Scala 32010年10月17日日曜日
  • 4. id:nagayama さん 3回くらいまちがわれましたが 別人です2010年10月17日日曜日
  • 5. ページャ2010年10月17日日曜日
  • 6. ページャ2010年10月17日日曜日
  • 7. ページャ スクリーンショットと ページャぶぶんの拡大2010年10月17日日曜日
  • 8. ページャは さまざまなところで 使われてる2010年10月17日日曜日
  • 9. はてなにおける 108のページャ実装を 紹介します2010年10月17日日曜日
  • 10. ページャの多様性 を知りましょう2010年10月17日日曜日
  • 11. #1 Hatena::Bookmark::Pager Data::Pageに機能追加 my $pager = Hatena::Bookmark::Pager->new; $pager->total_entries(10000); $pager->entries_per_page(20); $pager->current_page(1); $pager->next_page; $pager->last_page; $pager->next_uri; # "次へ" リンク $pager->htmlfy; # ページャHTML 112010年10月17日日曜日
  • 12. #2 Hatena::Diary::PagerMaker HTMLを直接生成する ページャの利用目的の大半はHTMLの生成 Hatena::Diary::PagerMaker->new($page)->make( 10000, # total_data_count of => 40, # offset lt => 20, # limit ); # $pageのなかにHTMLがセットされる 122010年10月17日日曜日
  • 13. #3 Hatena::UgoMemo::Pager データを生成する方法をページャに渡す 1.Queryオブジェクトを生成 my $query = cmoco(Movie)->query( where => { user_id => $user_id, }, order => created DESC, ); ※Query を抽象化したオブジェクト 132010年10月17日日曜日
  • 14. #3 Hatena::UgoMemo::Pager 2.Queryオブジェクトからページャを作成 $pager = Hatena::UgoMemo::Pager->new( page => $page, per_page => $per_page, query => $query, # pager自体がqueryを持っている ); 3.使います $pager->items; # ページャが特定のページの $pager->next; # データを生成する! $pager->prev; 142010年10月17日日曜日
  • 15. よりみち: ページャの生成 ORMから生成 my $res = moco(Entry)->pager_search( where => { uid => $uid, }, order => updated desc, offset => 20, limit => 20, ); $res->{result}; # SELECT の結果 $res->{pager}; # 現在のページの情報をもつ 152010年10月17日日曜日
  • 16. よりみち: ページャの生成 Controllerの情報とQueryから生成 package Hoge::App::Users; use base qw(Hoge::App); sub query { # Query オブジェクトを返す } 1; pacakge Hatena::Hoge::Engine::Users; use Hoge::Engine -Base; __PACKGE__->app_class(qw(Hoge::App::Users); sub default :Public { my $r = shift; $r->app->pager; # ページャができてる } 1; 162010年10月17日日曜日
  • 17. 現在 3/1082010年10月17日日曜日
  • 18. あと105個もあるの?2010年10月17日日曜日
  • 19. ページャに関わる要素 ❖ ページングの対象 • SQL の 結果 ❖ • 配列内のデータ ページングの基準 • 件数 ❖ • 日付 ページングの性能 • キャッシュ付き • SQLをなるべく引かない + サービスごとの差異 192010年10月17日日曜日
  • 20. Hatena2::Fotolife::Pager_Hatena2::Fotolife::Pager::EntryTime_Hatena2::Fot olife::Pager::Lite_Hatena2::Fotolife::Pager::Util_Hatena2::Fotolife::PagerMa ker_Hatena2::Group::PagerMaker_Hatena::A::GroupPagerMaker_Hatena::A ::GroupPagerMakerMobile_Hatena::A::PagerMaker_Hatena::Bookmark::Ho mePage_Hatena::Bookmark::Pager_Hatena::Bookmark::Pager::Binary_Hate na::Bookmark::Pager::Binary::Mobile_Hatena::Bookmark::Pager::Calendar_ Hatena::Bookmark::Pager::Calendar::Mobile_Hatena::Bookmark::Pager::Qu eryContinuation_Hatena::Coco::Pager::CachedQueryOffset_Hatena::Diary:: Pager_Hatena::Diary::Pager::Lite_Hatena::Diary::PagerMaker_Hatena::Haik u2::MoCo::Pager_Hatena::Haiku2::Pager_Hatena::Haiku2::SimplePager_Hat ena::Happie::Pager_Hatena::Hatena::PagerMaker_Hatena::Keyword::Pager_ Hatena::Let::MoCo::Pager_Hatena::Message::Admin::Pager_Hatena::Messa ge::Pager_Hatena::Monolith::MoCo::Page_Hatena::Monolith::MoCo::PageArr ay_Hatena::Monolith::MoCo::PageOffsetLimit_Hatena::Monolith::MoCo::Pag eTimeline_Hatena::My::Pager_Hatena::PagerMaker_Hatena::UgoMemo::Pa ger_Hatena::UgoMemo::Pager::ArrayRef_Hatena::UgoMemo::Pager::Many_ Hatena::UgoMemo::Pager::Merged_Hatena::UgoMemo::Pager::PagerByMui dList_Hatena::UgoMemo::Pager::Search_Hatena::UgoMemo::Pager::Search Solr_Hatena::UgoMemo::Pager::Slice_Hatena::WWW::SimplePager_Updu::P2010年10月17日日曜日
  • 21. それでは 気をとりなおして2010年10月17日日曜日
  • 22. 4/108 から2010年10月17日日曜日
  • 23. #4 Hatena::UgoMemo::Pager::Merged Queryの列を渡して全体をページング Hatena::UgoMemo::Pager::Merged->new( page => $page, per_page => $per_page, queries => @queries, ); 内部では、それぞれから必要な数をとって来て mergeしてsortしてる 232010年10月17日日曜日
  • 24. #5Hatena::UgoMemo::Pager::ArrayRef ArrayRefからページャを生成 my $entries = [$e1, $e2, $e3, ... $e100]; Hatena::UgoMemo::Pager::ArrayRef->new( page => $page, per_page => $per_page, array => $entries, ); 242010年10月17日日曜日
  • 25. #6 Hatena::Coco::Pager::CachedQueryOffset Cache付きPager ページングするデータの総数をmemdキャッシュ #7 Hatena::Bookmark::Pager::Binary 余計に一件とってくることで次があるかを判定 #8 Hatena::Diary::Pager::Lite 次があるかの判定は外部に任せて、軽量に動作 252010年10月17日日曜日
  • 26. 以降108まで続く...2010年10月17日日曜日

×