mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
Merge pull request #15991 from overleaf/mj-doc-updater-benchmark
[document-updater] Add script for benchmarking apply function GitOrigin-RevId: acb8174eec9d28870f05cca4802621f8f0c8a9bd
This commit is contained in:
parent
7341c18e0f
commit
a6b272f9ce
2 changed files with 79 additions and 0 deletions
78
services/document-updater/benchmarks/apply.js
Normal file
78
services/document-updater/benchmarks/apply.js
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
const text = require('../app/js/sharejs/types/text.js')
|
||||||
|
|
||||||
|
const TEST_RUNS = 1_000_000
|
||||||
|
const MAX_OPS_BATCH_SIZE = 35
|
||||||
|
const KB = 1000
|
||||||
|
|
||||||
|
function runTestCase(testCase, documentSizeBytes) {
|
||||||
|
const initialText = 'A'.repeat(documentSizeBytes)
|
||||||
|
|
||||||
|
console.log(`test: ${testCase.name}`)
|
||||||
|
console.log(`opsBatchSize\topsPerSeconds ${documentSizeBytes / 1000}KB`)
|
||||||
|
for (let i = 1; i <= MAX_OPS_BATCH_SIZE; i++) {
|
||||||
|
const ops = testCase(documentSizeBytes, i)
|
||||||
|
|
||||||
|
let timeTotal = 0
|
||||||
|
for (let i = 0; i < TEST_RUNS; i++) {
|
||||||
|
const start = performance.now()
|
||||||
|
try {
|
||||||
|
text.apply(initialText, ops)
|
||||||
|
} catch {
|
||||||
|
console.error(`test failed: ${testCase.name}, with ops:`)
|
||||||
|
console.error(ops)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const done = performance.now()
|
||||||
|
timeTotal += done - start
|
||||||
|
}
|
||||||
|
|
||||||
|
const opsPerSeconds = TEST_RUNS / (timeTotal / 1000)
|
||||||
|
console.log(`${i}\t${opsPerSeconds}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const randomAdditionTestCase = (docSize, opsSize) =>
|
||||||
|
Array.from({ length: opsSize }, () => ({
|
||||||
|
p: Math.floor(Math.random() * docSize),
|
||||||
|
i: 'B',
|
||||||
|
}))
|
||||||
|
|
||||||
|
const sequentialAdditionsTestCase = (docSize, opsSize) =>
|
||||||
|
Array.from({ length: opsSize }, (_, i) => ({ p: i + docSize, i: 'B' }))
|
||||||
|
|
||||||
|
const sequentialAdditionsInMiddleTestCase = (docSize, opsSize) =>
|
||||||
|
Array.from({ length: opsSize }, (_, i) => ({
|
||||||
|
p: Math.floor(docSize / 2) + i,
|
||||||
|
i: 'B',
|
||||||
|
}))
|
||||||
|
|
||||||
|
const randomDeletionTestCase = (docSize, opsSize) =>
|
||||||
|
Array.from({ length: opsSize }, (_, i) => ({
|
||||||
|
p: Math.floor(Math.random() * (docSize - 1 - i)),
|
||||||
|
d: 'A',
|
||||||
|
}))
|
||||||
|
|
||||||
|
const sequentialDeletionTestCase = (docSize, opsSize) =>
|
||||||
|
Array.from({ length: opsSize }, (_, i) => ({
|
||||||
|
p: docSize - 1 - i,
|
||||||
|
d: 'A',
|
||||||
|
}))
|
||||||
|
|
||||||
|
const sequentialDeletionInMiddleTestCase = (docSize, opsSize) =>
|
||||||
|
Array.from({ length: opsSize }, (_, i) => ({
|
||||||
|
p: Math.floor(docSize / 2),
|
||||||
|
d: 'A',
|
||||||
|
}))
|
||||||
|
|
||||||
|
for (const docSize of [10 * KB, 100 * KB]) {
|
||||||
|
for (const testCase of [
|
||||||
|
randomAdditionTestCase,
|
||||||
|
sequentialAdditionsTestCase,
|
||||||
|
sequentialAdditionsInMiddleTestCase,
|
||||||
|
randomDeletionTestCase,
|
||||||
|
sequentialDeletionTestCase,
|
||||||
|
sequentialDeletionInMiddleTestCase,
|
||||||
|
]) {
|
||||||
|
runTestCase(testCase, docSize)
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,6 +9,7 @@
|
||||||
"test:acceptance": "npm run test:acceptance:_run -- --grep=$MOCHA_GREP",
|
"test:acceptance": "npm run test:acceptance:_run -- --grep=$MOCHA_GREP",
|
||||||
"test:unit:_run": "mocha --recursive --reporter spec $@ test/unit/js",
|
"test:unit:_run": "mocha --recursive --reporter spec $@ test/unit/js",
|
||||||
"test:unit": "npm run test:unit:_run -- --grep=$MOCHA_GREP",
|
"test:unit": "npm run test:unit:_run -- --grep=$MOCHA_GREP",
|
||||||
|
"benchmark:apply": "node benchmarks/apply",
|
||||||
"nodemon": "node --watch $NODE_APP_OPTIONS app.js",
|
"nodemon": "node --watch $NODE_APP_OPTIONS app.js",
|
||||||
"lint": "eslint --max-warnings 0 --format unix .",
|
"lint": "eslint --max-warnings 0 --format unix .",
|
||||||
"format": "prettier --list-different $PWD/'**/*.js'",
|
"format": "prettier --list-different $PWD/'**/*.js'",
|
||||||
|
|
Loading…
Reference in a new issue