- в нашем проекте мы используем Kaminari для нумерации страниц, и он работает довольно хорошо
- есть новый гем под названием 'pagy', и в своем репозитории на Github они заявили, что их производительность лучше, чем у kaminari и will-paginate, но я не знаю, действительно ли лучше для нашего проекта тратить время на конвертацию от каминари до пагы
поэтому я попробовал сравнить его с каминари:
- Я запустил один и тот же запрос, который загрузит все ящики с 1 полем на страницу, и страницу: 2, проверил запросы, которые выполнялись каждым драгоценным камнем, и проверил время, которое требуется
2.5.1 :043 > pagy(Box.all, items: 1, page: 2)
(2.0ms) SELECT COUNT(*) FROM "boxes"
Box Load (1.0ms) SELECT "boxes".* FROM "boxes" LIMIT $1 OFFSET $2 [["LIMIT", 1], ["OFFSET", 1]]
=> [#<Pagy:0x00007fd7e88073a8 @vars={:page=>2, :items=>1, :outset=>0, :size=>[1, 4, 4, 1], :page_param=>:page, :params=>{}, :anchor=>"", :link_extra=>"", :item_path=>"pagy.info.item_name", :cycle=>false, :count=>106}, @count=106, @items=1, @outset=0, @page=2, @last=106, @pages=106, @offset=1, @from=2, @to=2, @prev=1, @next=3>, #<ActiveRecord::Relation [#<Box id: "2fbf947f-c0d8-4c02-9c71-22d7deaaff2e", shipping_request_id: "7dab8aba-961a-4d28-80c8-20b2fb9a63b7", created_at: "2019-03-14 18:22:33", updated_at: "2019-03-14 18:22:33", external_uuid: "b44f08ec-ccbc-424c-b0aa-4cbcbe94cd74", inventory_id: 78, dimension: {"length"=>4.5, "width"=>5.5, "height"=>5.6, "unit"=>"cm"}, weight: 56.6, label_url: nil, warehouse_state: "processing", proforma_url: nil, barcode: "EXOBOX-B44F08EC", proforma_name: nil, tracking_url: "", private_tracking: true, external_shipment_id: nil, state: "preparing", tracking_history: [{"status"=>"preparing", "datetime"=>"2019-03-14 20:22:33 +0200", "active"=>true, "order"=>0}, {"status"=>"pending_pick_up", "datetime"=>"", "active"=>false, "order"=>1}, {"status"=>"picked_up", "datetime"=>"", "active"=>false, "order"=>2}, {"status"=>"en_route_to_destination", "datetime"=>"", "active"=>false, "order"=>3}, {"status"=>"delivered", "datetime"=>"", "active"=>false, "order"=>4}], parent_id: nil, tracking_number: "EXOTRACK-B44F08EC">]>]
2.5.1 :044 > Box.all.page(2).per(1)
Box Load (1.0ms) SELECT "boxes".* FROM "boxes" LIMIT $1 OFFSET $2 [["LIMIT", 1], ["OFFSET", 1]]
=> #<ActiveRecord::Relation [#<Box id: "2fbf947f-c0d8-4c02-9c71-22d7deaaff2e", shipping_request_id: "7dab8aba-961a-4d28-80c8-20b2fb9a63b7", created_at: "2019-03-14 18:22:33", updated_at: "2019-03-14 18:22:33", external_uuid: "b44f08ec-ccbc-424c-b0aa-4cbcbe94cd74", inventory_id: 78, dimension: {"length"=>4.5, "width"=>5.5, "height"=>5.6, "unit"=>"cm"}, weight: 56.6, label_url: nil, warehouse_state: "processing", proforma_url: nil, barcode: "EXOBOX-B44F08EC", proforma_name: nil, tracking_url: "", private_tracking: true, external_shipment_id: nil, state: "preparing", tracking_history: [{"status"=>"preparing", "datetime"=>"2019-03-14 20:22:33 +0200", "active"=>true, "order"=>0}, {"status"=>"pending_pick_up", "datetime"=>"", "active"=>false, "order"=>1}, {"status"=>"picked_up", "datetime"=>"", "active"=>false, "order"=>2}, {"status"=>"en_route_to_destination", "datetime"=>"", "active"=>false, "order"=>3}, {"status"=>"delivered", "datetime"=>"", "active"=>false, "order"=>4}], parent_id: nil, tracking_number: "EXOTRACK-B44F08EC">]>
2.5.1 :045 >
они тоже выполняют один и тот же запрос (независимо от количества запросов из запроса ящиков), так как я могу определить разницу между ними и тем, кто лучше? Такое чувство, что они оба одинаковые, зная, что мы используем их в проекте API