@rbac/rbac
Version:
Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js
116 lines (113 loc) • 4.79 kB
HTML
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" />
<script src="https://cdn.jsdelivr.net/npm/chart.js@3.5.1/dist/chart.min.js"></script>
<title>RBAC Performance Comparison - Large Dataset</title>
<style>
body {
margin: 0;
padding: 0;
background: #ddd;
}
.container {
box-sizing: border-box;
height: 96vh;
width: 96vw;
margin: 2vh 2vw;
resize: both;
overflow: hidden;
padding: 20px;
background: white;
box-shadow: 0 0 15px #aaa;
}
</style>
</head>
<body>
<div class="container">
<canvas id="chart1758993483857" width="16" height="9"></canvas>
</div>
<script>
const format = (num) => {
const [whole, fraction] = String(num).split('.')
const chunked = []
whole
.split('')
.reverse()
.forEach((char, index) => {
if (index % 3 === 0) {
chunked.unshift([char])
} else {
chunked[0].unshift(char)
}
})
const fractionStr = fraction !== undefined ? '.' + fraction : ''
return (
chunked.map((chunk) => chunk.join('')).join(' ') + fractionStr
)
}
const ctx1758993483857 = document
.getElementById('chart1758993483857')
.getContext('2d')
const chart1758993483857 = new Chart(ctx1758993483857, {
type: 'bar',
data: {
labels: ["@rbac/rbac - large direct","@rbac/rbac - large inherited","@rbac/rbac - large glob","@rbac/rbac - large callback","@rbac/rbac - large async","@rbac/rbac - large promise","AccessControl - large direct","AccessControl - large inherited","AccessControl - large admin","Popular RBAC - large direct","Popular RBAC - large inherited","Popular RBAC - large admin","Easy RBAC - large direct","Easy RBAC - large inherited","Easy RBAC - large glob","Fast RBAC - large direct","Fast RBAC - large inherited","Fast RBAC - large glob"],
datasets: [
{
data: [3382936,3392606,3499100,505265,2833698,2834263,980128,482599,427929,117095,60051,54779,3712795,3745439,136132,2804860,2841972,2729879],
backgroundColor: ["hsl(108.38399999999999, 85%, 55%)","hsl(108.696, 85%, 55%)","hsl(112.104, 85%, 55%)","hsl(16.18799999999999, 85%, 55%)","hsl(90.79199999999999, 85%, 55%)","hsl(90.804, 85%, 55%)","hsl(31.404000000000003, 85%, 55%)","hsl(15.455999999999992, 85%, 55%)","hsl(13.716000000000008, 85%, 55%)","hsl(3.7559999999999945, 85%, 55%)","hsl(1.9199999999999933, 85%, 55%)","hsl(1.7519999999999925, 85%, 55%)","hsl(118.95599999999999, 85%, 55%)","hsl(120, 85%, 55%)","hsl(4.3559999999999945, 85%, 55%)","hsl(89.868, 85%, 55%)","hsl(91.05599999999998, 85%, 55%)","hsl(87.468, 85%, 55%)"],
borderColor: ["hsl(108.38399999999999, 85%, 55%)","hsl(108.696, 85%, 55%)","hsl(112.104, 85%, 55%)","hsl(16.18799999999999, 85%, 55%)","hsl(90.79199999999999, 85%, 55%)","hsl(90.804, 85%, 55%)","hsl(31.404000000000003, 85%, 55%)","hsl(15.455999999999992, 85%, 55%)","hsl(13.716000000000008, 85%, 55%)","hsl(3.7559999999999945, 85%, 55%)","hsl(1.9199999999999933, 85%, 55%)","hsl(1.7519999999999925, 85%, 55%)","hsl(118.95599999999999, 85%, 55%)","hsl(120, 85%, 55%)","hsl(4.3559999999999945, 85%, 55%)","hsl(89.868, 85%, 55%)","hsl(91.05599999999998, 85%, 55%)","hsl(87.468, 85%, 55%)"],
borderWidth: 2,
},
],
},
options: {
maintainAspectRatio: false,
plugins: {
title: {
display: true,
text: 'RBAC Performance Comparison - Large Dataset',
font: { size: 20 },
padding: 20,
},
legend: {
display: false,
},
tooltip: {
callbacks: {
label: (context) => {
return format(context.parsed.y) + ' ops/s'
},
},
displayColors: false,
backgroundColor: '#222222',
padding: 10,
cornerRadius: 5,
intersect: false,
},
},
scales: {
x: {
grid: {
color: '#888888',
},
},
y: {
title: {
display: true,
text: 'Operations per second',
padding: 10,
},
grid: {
color: '#888888',
},
},
},
},
})
</script>
</body>
</html>