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 在資料量很大的時候還是會有效能的問題。
解決的辦法?
參考這幾篇文章:
分享到:
相关推荐
《MyBatis分页插件mybatis-pagination深度解析》 在大数据量的Web应用中,分页查询是不可或缺的一部分,它能有效提高系统的性能并优化用户体验。MyBatis作为一款强大的持久层框架,虽然提供了基本的SQL映射功能,但...
《Python库深度解析:django-endless-pagination-vue-1.2》 在现代Web开发中,数据分页是不可或缺的功能,特别是在处理大量数据时。`django-endless-pagination-vue-1.2` 是一个集成Python的Django框架与前端Vue.js...
import Pagination from 'vue-pagination-2'; 脚本标签 在dist/vue-pagination-2.min.js下获取缩小版本。 它将导出全局Pagination变量。 用法 在全局或本地注册组件: Vue . component ( 'pagination' , ...
该库的最新版本为0.3.1,对应的whl文件名为`fastapi_pagination-0.3.1-py3-none-any.whl`,表明这是一个适用于Python 3环境且不依赖特定平台的包。 `fastapi-pagination`的核心功能是帮助我们在使用FastAPI构建API...
本文将深入探讨“pagination”这一前端分页插件,它可以帮助开发者轻松实现具有CSS样式的分页功能。 分页插件是前端开发中的一个重要组件,它的主要作用是将大量数据分割成若干个较小的部分,每次只加载一部分数据...
gbirke jquery pagination v2.1-1-g19ac803.zip gbirke jquery_pagination v2.1-1-g19ac803.zip gbirke jquery_pagination v2.1-1-g19ac803.zip
标题中的“django-keyset-pagination-plus-0.9.9.tar.gz”揭示了这是一个与Python相关的库,特别是针对Django框架的。Django是Python的一种流行Web开发框架,它提供了丰富的功能,包括数据库交互、模板系统、表单...
Django-pagination-bootstrap是一个使用布局轻松在添加分页的应用程序。 注意:该库当前可用于Python 3.6 +,Django 2.0+和Bootstrap 3+。 对于较旧的版本,请使用版本1.3.0。 安装 要安装django-pagination-...
通过使用jQuery,开发者可以更高效地编写JavaScript代码,减少跨浏览器兼容性问题。 **2. 分页组件的重要性** 在网页中显示大量数据时,一次性加载所有内容可能导致页面加载速度变慢,用户体验下降。分页组件能够将...
"pagination-demo-源码.rar" 这个标题表明我们即将探讨的是一个关于分页功能的示例代码。"pagination"通常是指在Web应用或数据库查询中实现数据分页的技术,用于帮助用户逐步浏览大量数据,而不是一次性加载所有内容...
vue-ads-pagination vue广告分页是vue js分页组件。 在左侧,您可以找到有关所显示项目的一些信息。 在右侧的vue-ads-pagination中,Vue广告的分页是vue js的分页组件。...NPM npm安装vue-ads-pagination-保存YARN纱
AngularJs-UI, AngularJs Pagination Angularjs分页 -- Want to be the best pagination.
npm install pagination-table —S 注册插件 import TablePagination from "pagination-table"; Vue.use(TablePagination); 基本使用 <base-table ref="table" :config="tableConfig" :columns="table...
封装好得ant组件库得分页得vue文件,引入到项目中可以直接使用
"Gallery Level Selection - Pagination and Scroll-Snap Menu v1.0.1" 提供了一个强大且高度可定制的解决方案,专门针对图像画廊级别的选择和导航。这个包融合了分页和滚动捕捉技术,为开发者提供了流畅、直观的...
jquery.pagination应用必须要在jquery.js后面哦~亲
本教程将围绕"Django-pagination-master"项目,深入探讨如何在Django中实现高效且灵活的分页。 1. **Django分页库介绍** Django-pagination是一个第三方库,用于在Django应用中轻松实现分页。它允许开发者将大量...
npm install pagination-component --save 或者 yarn add pagination-component 演示版 要构建并运行演示: 克隆此存储库: git clone https://github.com/dibenso/pagination-component.git 安装依赖项: npm ...