rails fast_page:测试分页方法的区别

首先创建了一个nft表,创建8个列,每个列的类型是text,内容为:a*1000, 创建100万条数据。

(之前创建的1000w条测试数据被删除了。只能创建临时的数据了。最初的内容:a*10000, 但是进程卡住了,就减少了一个0)

在Gemfile增加gem: fast_page, pagy,  kaminari

增加路由,增加controller的方法:

class NftsController < ApplicationController
  include Pagy::Backend
  before_action :set_nfts_page

  def query_by_ar
    nfts = NFT 
    total_count = NFT.count
    @nfts = nfts.order(id: :asc).page(@page).per(@page_size)
    render json: {
      nfts: @nfts,
      total_count: total_count
    }   
  end 

  def query_by_pagy
    nfts = NFT 
    total_count = NFT.count
    @pagy, @nfts = pagy(nfts.order(id: :asc), items: @page_size)
    render json: {
      nfts: @nfts,
      page: @pagy.page,
      page_size: @pagy.items,
      total_count: total_count
    } 
  end 

  def query_by_fast_page
    nfts = NFT 
    total_count = NFT.count
    @nfts = nfts.order(id: :asc).page(@page).per(@page_size).fast_page
    render json: {
      nfts: @nfts,
      page: @page,
      page_size: @page_size,
      total_count: total_count
    } 
  end 

  private
  def set_nfts_page
    @page = params[:page]
    @page_size = params[:page_size]
  end 
方法/次数 1 2 3 4 5 平均值 单位: 毫秒
query_by_ar 467 463 440 462 457 457.8
query_by_pagy 481 462 473 467 471 470.8
query_by_fasta_page 112 95 95 91 87 96
每条数据6.1k.
方法/次数 1 2 3 4 5 平均值 单位: kb 每页10条数据。
query_by_ar 61.23 61.23 61.23 61.23 61.23 61.23
query_by_pagy 61.26 61.26 61.26 61.26 61.26 61.26
query_by_fasta_page 61.26 61.26 61.26 61.26 61.26 61.26

你可能感兴趣的:(ruby,on,rails)