老妖的博客
现实的中没有几个人能够真为对方去死,甚至山盟海誓很快就会在金钱面前变的微不足道,这才是生活。没有永远的爱,除了你的父母对你,当然也就没有永远的恨,更没有永远的痛,时间是最好的治疗大师,它会很快抚平你心灵上累累的伤痕。很多年以后你想起来时,那些在你生命中汹涌来往的人群至多是个模糊的影子或者毫无意义的名字
posts - 105,  comments - 171,  trackbacks - 0

giive 兄寫了一篇 Rails 內建的 Pagination 簡介 。不過官方 Rails Blog 推薦 的這篇文章 Guide: Things You Shouldn’t Be Doing In Rails ,強烈的建議不要使用內建的 Pagination。甚至,在 Rails 2.0 還要完全的把 Pagination 移出 core 而獨立成一個 Plugin。究竟這個內建的 Pagination 有什麼問題呢?

1. 雖然使用 paginate 時,產生的 SQL 不會將沒有要顯示的資料選取出來,但是有時候我們需要比單純的 find 來的複雜,會需要用到自訂的query。

正確的做法是做一個新的 class 繼承 Pagination,然後 override count_collection_for_pagination 和 find_collection_for_pagination 兩個method,(當然你要在這兩個 methods 中做出正確的 query)。再用這個新的 class 來產生 pagination。

不過很多懶惰人(就是我啦!),會直接用 find_by_sql 把全部的 182,443,567,9832 筆的 records 選回來,再用 paginate_collection 來做出分頁的效果,自然就無比的浪費。

這點不能算是 Pagination 的錯,畢竟是亂用。可是因為內建的關係,讓很多人都沒有仔細去看看 Pagination 到底做了些什麼事,才會出這樣的問題。

2. 使用 pagination_links 來產生選頁的連結是蠻慢的,根據 這一篇 ,用 pagination_links_each 會比較快。

不過若是分頁出來的頁數太多,會有放不下這麼多頁連結的問題。這時要使用到 :window 這個選項,而這個選項是很慢很慢的。

所以說,即使在沒有 Database overhead 的情況下,內建的 Pagination 在資料量很大的時候還是會有效能的問題。
解決的辦法?

參考這幾篇文章:
posted on 2006-11-10 21:19 老妖 阅读(2065) 评论(1)  编辑  收藏 所属分类: 转载rails

FeedBack:
# re: Pagination 的問題--转载
2012-11-07 15:51 | 山寨吧
技术类博客 支持一个  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2012年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用链接

随笔分类(48)

随笔档案(104)

好友链接

我的豆瓣

积分与排名

  • 积分 - 219790
  • 排名 - 257

最新评论

阅读排行榜