summaryrefslogtreecommitdiffstats
path: root/tests/model benchmarks.html
blob: 155f79a9a10e9dc344d09e489d8f0010b604b49a (plain)
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>SlickGrid Model Benchmark</title>
</head>
<body>
<script src="../lib/jquery-1.7.min.js"></script>
<script src="../slick.core.js"></script>
<script src="../slick.dataview.js"></script>
<script src="../slick.groupitemmetadataprovider.js"></script>

<script>
    function filter(item, args) {
        // simulate a more expensive filer
        var matches = 0;
        if (item.title.indexOf("ask") != -1) matches++;
        for (var j = 0; j < 5; j++)
            matches += Math.random();

        if (item.percentComplete >= args) {
            return true;
        }

        return false;
    }

    var data = [];

    for (var i = 0; i < 300000; i++) {
        var d = (data[i] = {});

        d["id"] = i;
        d["title"] = "Task " + i;
        d["percentComplete"] = i % 100;
        d["duration"] =  Math.round(Math.random() * 14);
    }

    var dv = new Slick.Data.DataView({inlineFilters: true});
    dv.beginUpdate();
    dv.setItems(data);
    dv.setFilter(filter);
    dv.setFilterArgs(0);
    //dv.setPagingOptions({pageSize:25});

    dv.setGrouping([
        {
            getter: "duration",
            formatter: function (g) {
                return "Duration:  " + g.value + "  <span style='color:green'>(" + g.count + " items)</span>";
            },
            aggregators: [
                new Slick.Data.Aggregators.Avg("percentComplete"),
                new Slick.Data.Aggregators.Sum("cost")
            ],
            aggregateCollapsed: true,
            aggregateChildGroups: true
        },
        {
            getter: "effortDriven",
            formatter: function (g) {
                return "Effort-Driven:  " + (g.value ? "True" : "False") + "  <span style='color:green'>(" + g.count + " items)</span>";
            },
            aggregators: [
                new Slick.Data.Aggregators.Avg("percentComplete"),
                new Slick.Data.Aggregators.Sum("cost")
            ],
            aggregateCollapsed: false
        }
    ]);

    dv.endUpdate();


    console.time("total");
    console.time("narrow");

    for (var i = 0; i <= 100; i += 5) {
        dv.setFilterArgs(i);
        dv.setRefreshHints({
            ignoreDiffsBefore:200,
            ignoreDiffsAfter:300,
            isFilterNarrowing:true
        });
        dv.refresh();

        //console.log(dv.getLength());
    }

    console.timeEnd("narrow");

    console.time("expand");

    for (var i = 100; i > 0; i -= 5) {
        dv.setFilterArgs(i);
        dv.setRefreshHints({
            ignoreDiffsBefore:200,
            ignoreDiffsAfter:300,
            isFilterExpanding:true
        });
        dv.refresh();

        //console.log(dv.getLength());
    }

    console.timeEnd("expand");
    console.timeEnd("total");
</script>
</body>
</html>