-
Notifications
You must be signed in to change notification settings - Fork 63
Expand file tree
/
Copy pathPagingBenchmarks.cs
More file actions
92 lines (85 loc) · 2.39 KB
/
PagingBenchmarks.cs
File metadata and controls
92 lines (85 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
using System.Linq;
using BenchmarkDotNet.Attributes;
using EntityGraphQL;
using EntityGraphQL.Extensions;
using EntityGraphQL.Schema.FieldExtensions;
namespace Benchmarks;
/// <summary>
/// Testing different ways of paging data
/// </summary>
[ShortRunJob]
public class PagingBenchmarks : BaseBenchmark
{
[GlobalSetup]
public void GlobalSetup()
{
Schema.Query().AddField("moviesTakeSkip", new { take = (int?)null, skip = (int?)null }, (ctx, args) => ctx.Movies.OrderBy(i => i.Id).Skip(args.skip).Take(args.take), "Movies");
Schema.Query().AddField("moviesConnection", ctx => ctx.Movies.OrderBy(i => i.Id), "Movies").UseConnectionPaging();
Schema.Query().ReplaceField("moviesOffset", ctx => ctx.Movies.OrderBy(i => i.Id), "Movies").UseOffsetPaging();
}
[Benchmark]
public void NoExtension()
{
RunQuery(
GetContext(),
new QueryRequest
{
Query =
@"{
moviesTakeSkip(skip: 1 take: 1) {
name id
}
}",
}
);
}
[Benchmark]
public void ConnectionPaging()
{
RunQuery(
GetContext(),
new QueryRequest
{
Query =
@"{
moviesConnection(last: 3 before: ""NA=="") {
edges {
node {
name id
}
cursor
}
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
totalCount
}
}",
}
);
}
[Benchmark]
public void OffsetPaging()
{
RunQuery(
GetContext(),
new QueryRequest
{
Query =
@"{
moviesOffset(skip: 1 take: 1) {
items {
name id
}
totalItems
hasNextPage
hasPreviousPage
}
}",
}
);
}
}