From 3c4c4ea56cb634ea91c65cafe9393c5705314a07 Mon Sep 17 00:00:00 2001 From: Thomas Bouffard <27200110+tbouffard@users.noreply.github.com> Date: Mon, 26 Aug 2024 10:30:38 +0200 Subject: [PATCH] chore(deps): switch from lodash-es to es-toolkit (#3142) > es-toolkit is a state-of-the-art, high-performance JavaScript utility library with a small bundle size and strong type annotations. Advantages for `bpmn-visualization`: - receive more updates - optimize for ESM - better tree-shaking - provide types out of the box (for lodash-es, we needed to use a package provided by DefinitevlyTyped) - provide CommonJS files as well, so we are no longer forced to use a trick as we did for lodash-es in the jest configuration of the integration test (which doesn't provide CommonJS file) The performance tests were run on Ubuntu 22. They include results for master a5886d18 and for switching to es-toolkit. --- package-lock.json | 55 +++++++++-------------------- package.json | 3 +- src/component/mxgraph/BpmnGraph.ts | 2 +- test/integration/jest.config.cjs | 9 +---- test/performance/data/linux/data.js | 2 +- 5 files changed, 20 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ebbdfec13..d15d0749c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "license": "Apache-2.0", "dependencies": { "@typed-mxgraph/typed-mxgraph": "~1.0.8", + "es-toolkit": "~1.16.0", "fast-xml-parser": "4.4.1", - "lodash-es": "~4.17.21", "mxgraph": "4.2.2", "strnum": "1.0.5" }, @@ -23,7 +23,6 @@ "@rollup/plugin-terser": "~0.4.4", "@types/debug": "~4.1.12", "@types/jest-image-snapshot": "~6.4.0", - "@types/lodash-es": "~4.17.12", "@types/minimist": "~1.2.5", "@typescript-eslint/eslint-plugin": "~7.18.0", "@typescript-eslint/parser": "~7.18.0", @@ -2699,20 +2698,6 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/lodash": { - "version": "4.14.178", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash-es": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "dev": true, - "dependencies": { - "@types/lodash": "*" - } - }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -5266,6 +5251,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-toolkit": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.16.0.tgz", + "integrity": "sha512-eNJh3zF1KmAHRYd1D8rFi1cMFMCjrC6tumBfwuuZdSur97mED/ifyeBoGzxS11L4owCMx3XSmWTo6oxJQkdGng==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks" + ] + }, "node_modules/es6-error": { "version": "4.1.1", "dev": true, @@ -9218,11 +9213,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, "node_modules/lodash.difference": { "version": "4.5.0", "dev": true, @@ -15729,19 +15719,6 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "@types/lodash": { - "version": "4.14.178", - "dev": true - }, - "@types/lodash-es": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", - "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, "@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -17453,6 +17430,11 @@ "is-symbol": "^1.0.2" } }, + "es-toolkit": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.16.0.tgz", + "integrity": "sha512-eNJh3zF1KmAHRYd1D8rFi1cMFMCjrC6tumBfwuuZdSur97mED/ifyeBoGzxS11L4owCMx3XSmWTo6oxJQkdGng==" + }, "es6-error": { "version": "4.1.1", "dev": true @@ -20167,11 +20149,6 @@ "version": "4.17.21", "dev": true }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, "lodash.difference": { "version": "4.5.0", "dev": true diff --git a/package.json b/package.json index eec222ef5e..5622b215cc 100644 --- a/package.json +++ b/package.json @@ -105,8 +105,8 @@ }, "dependencies": { "@typed-mxgraph/typed-mxgraph": "~1.0.8", + "es-toolkit": "~1.16.0", "fast-xml-parser": "4.4.1", - "lodash-es": "~4.17.21", "mxgraph": "4.2.2", "strnum": "1.0.5" }, @@ -118,7 +118,6 @@ "@rollup/plugin-terser": "~0.4.4", "@types/debug": "~4.1.12", "@types/jest-image-snapshot": "~6.4.0", - "@types/lodash-es": "~4.17.12", "@types/minimist": "~1.2.5", "@typescript-eslint/eslint-plugin": "~7.18.0", "@typescript-eslint/parser": "~7.18.0", diff --git a/src/component/mxgraph/BpmnGraph.ts b/src/component/mxgraph/BpmnGraph.ts index 6c4ccf66ac..babc65b1be 100644 --- a/src/component/mxgraph/BpmnGraph.ts +++ b/src/component/mxgraph/BpmnGraph.ts @@ -17,7 +17,7 @@ limitations under the License. import type { FitOptions, ZoomConfiguration } from '../options'; import type { mxCellRenderer, mxCellState, mxGraphView, mxPoint } from 'mxgraph'; -import { debounce, throttle } from 'lodash-es'; +import { debounce, throttle } from 'es-toolkit'; import { ensurePositiveValue, ensureValidZoomConfiguration } from '../helpers/validators'; import { FitType } from '../options'; diff --git a/test/integration/jest.config.cjs b/test/integration/jest.config.cjs index ea8b924987..6e970d440c 100644 --- a/test/integration/jest.config.cjs +++ b/test/integration/jest.config.cjs @@ -30,14 +30,7 @@ module.exports = { }, ], }, - moduleNameMapper: { - ...moduleNameMapper, - // Hack to use lodash instead of lodash-es in integration tests. - // This is only to resolve the import, otherwise Jest fails to parse the lodash-es files. - // For more details, see https://github.com/process-analytics/bpmn-visualization-js/pull/2678 - // The lodash code is not called in integration tests, so changing the lodash implementation in used in not an issue. - '^lodash-es$': 'lodash', - }, + moduleNameMapper, collectCoverageFrom: ['src/**/*.{ts,js}'], coveragePathIgnorePatterns: ['/src/model/'], coverageReporters: ['lcov', 'text-summary'], diff --git a/test/performance/data/linux/data.js b/test/performance/data/linux/data.js index 01779a3511..5f42825a62 100644 --- a/test/performance/data/linux/data.js +++ b/test/performance/data/linux/data.js @@ -1 +1 @@ -const data = {"zoom":[{"run":1,"LayoutDuration":0.761102,"RecalcStyleDuration":1.140217,"ScriptDuration":3.384101,"TaskDuration":5.756419},{"run":2,"LayoutDuration":0.7567349999999999,"RecalcStyleDuration":1.197929,"ScriptDuration":3.526199,"TaskDuration":5.955871999999999},{"run":3,"LayoutDuration":0.7787270000000002,"RecalcStyleDuration":1.231757,"ScriptDuration":3.399286,"TaskDuration":5.861481000000001},{"run":4,"LayoutDuration":0.7913480000000002,"RecalcStyleDuration":1.2242220000000001,"ScriptDuration":3.451917999999999,"TaskDuration":5.965384},{"run":5,"LayoutDuration":0.9831949999999998,"RecalcStyleDuration":1.4522399999999998,"ScriptDuration":3.9555570000000007,"TaskDuration":6.958649999999999},{"run":1,"LayoutDuration":0.20473999999999998,"RecalcStyleDuration":0.315165,"ScriptDuration":1.108355,"TaskDuration":1.7596659999999997},{"run":2,"LayoutDuration":0.20881,"RecalcStyleDuration":0.31595900000000005,"ScriptDuration":1.103003,"TaskDuration":1.7960409999999998},{"run":3,"LayoutDuration":0.2198739999999999,"RecalcStyleDuration":0.32910799999999996,"ScriptDuration":1.1682930000000002,"TaskDuration":1.888636},{"run":4,"LayoutDuration":0.20253700000000008,"RecalcStyleDuration":0.3030360000000001,"ScriptDuration":1.0724330000000002,"TaskDuration":1.7366919999999997},{"run":5,"LayoutDuration":0.2040090000000001,"RecalcStyleDuration":0.30310100000000006,"ScriptDuration":1.0802830000000005,"TaskDuration":1.735631999999999},{"run":1,"LayoutDuration":0.214903,"RecalcStyleDuration":0.32094700000000004,"ScriptDuration":1.192058,"TaskDuration":1.870139},{"run":2,"LayoutDuration":0.220273,"RecalcStyleDuration":0.32132099999999997,"ScriptDuration":1.108886,"TaskDuration":1.8223159999999998},{"run":3,"LayoutDuration":0.21075199999999994,"RecalcStyleDuration":0.307705,"ScriptDuration":1.142754,"TaskDuration":1.838806},{"run":4,"LayoutDuration":0.20047399999999993,"RecalcStyleDuration":0.29481100000000016,"ScriptDuration":1.0625179999999999,"TaskDuration":1.6814030000000004},{"run":5,"LayoutDuration":0.20139899999999988,"RecalcStyleDuration":0.30300899999999986,"ScriptDuration":1.0637479999999995,"TaskDuration":1.7399830000000005},{"run":1,"LayoutDuration":0.674828,"RecalcStyleDuration":1.053378,"ScriptDuration":3.175294,"TaskDuration":5.331759},{"run":2,"LayoutDuration":0.45916499999999993,"RecalcStyleDuration":0.7681090000000002,"ScriptDuration":2.4055839999999997,"TaskDuration":3.9782650000000004},{"run":3,"LayoutDuration":0.4559819999999999,"RecalcStyleDuration":0.7587059999999999,"ScriptDuration":2.3784479999999997,"TaskDuration":3.92844},{"run":4,"LayoutDuration":0.454267,"RecalcStyleDuration":0.7471740000000002,"ScriptDuration":2.361986999999999,"TaskDuration":3.8864150000000013},{"run":5,"LayoutDuration":0.46455599999999997,"RecalcStyleDuration":0.7740930000000001,"ScriptDuration":2.404007,"TaskDuration":3.9813790000000004},{"run":1,"LayoutDuration":0.896763,"RecalcStyleDuration":1.340107,"ScriptDuration":3.956318,"TaskDuration":6.823176},{"run":2,"LayoutDuration":0.579704,"RecalcStyleDuration":0.9438510000000002,"ScriptDuration":2.9689170000000003,"TaskDuration":4.9413540000000005},{"run":3,"LayoutDuration":0.575534,"RecalcStyleDuration":0.9310810000000003,"ScriptDuration":2.922086,"TaskDuration":4.912284000000001},{"run":4,"LayoutDuration":0.5652359999999996,"RecalcStyleDuration":0.9099179999999998,"ScriptDuration":2.8771079999999998,"TaskDuration":4.771832},{"run":5,"LayoutDuration":0.576368,"RecalcStyleDuration":0.9322240000000006,"ScriptDuration":2.9099070000000005,"TaskDuration":4.859128999999999},{"run":1,"LayoutDuration":0.8907910000000001,"RecalcStyleDuration":1.8021,"ScriptDuration":5.058376,"TaskDuration":8.259811000000001},{"run":2,"LayoutDuration":0.8857579999999999,"RecalcStyleDuration":1.784853,"ScriptDuration":5.007549999999999,"TaskDuration":8.215954},{"run":3,"LayoutDuration":0.9356369999999998,"RecalcStyleDuration":1.910857,"ScriptDuration":5.353660999999999,"TaskDuration":8.780017999999998},{"run":4,"LayoutDuration":0.8666740000000002,"RecalcStyleDuration":1.7437870000000002,"ScriptDuration":4.911534999999999,"TaskDuration":8.042191999999996},{"run":5,"LayoutDuration":0.9315549999999999,"RecalcStyleDuration":1.8941000000000008,"ScriptDuration":5.268923000000001,"TaskDuration":8.609927000000006},{"run":1,"LayoutDuration":0.908718,"RecalcStyleDuration":1.851238,"ScriptDuration":5.182664999999999,"TaskDuration":8.476628},{"run":2,"LayoutDuration":0.921056,"RecalcStyleDuration":1.8494849999999998,"ScriptDuration":5.205128,"TaskDuration":8.515998000000002},{"run":3,"LayoutDuration":0.9465740000000002,"RecalcStyleDuration":1.907209,"ScriptDuration":5.284848,"TaskDuration":8.683857999999997},{"run":4,"LayoutDuration":0.9580839999999999,"RecalcStyleDuration":1.9122519999999996,"ScriptDuration":5.338634000000001,"TaskDuration":8.773906999999998},{"run":5,"LayoutDuration":0.7702600000000004,"RecalcStyleDuration":1.565612999999999,"ScriptDuration":4.344507,"TaskDuration":7.174543}],"load":[{"run":1,"LayoutDuration":0.057931,"RecalcStyleDuration":0.047083,"ScriptDuration":0.035715,"TaskDuration":0.553342},{"run":2,"LayoutDuration":0.02891699999999999,"RecalcStyleDuration":0.041692999999999994,"ScriptDuration":0.012980000000000005,"TaskDuration":0.40991200000000005},{"run":3,"LayoutDuration":0.02805300000000001,"RecalcStyleDuration":0.04066900000000001,"ScriptDuration":0.014490000000000003,"TaskDuration":0.404586},{"run":4,"LayoutDuration":0.028339000000000003,"RecalcStyleDuration":0.041904,"ScriptDuration":0.011911999999999992,"TaskDuration":0.41607000000000016},{"run":5,"LayoutDuration":0.03608699999999998,"RecalcStyleDuration":0.050066,"ScriptDuration":0.011991000000000002,"TaskDuration":0.448874},{"run":1,"LayoutDuration":0.042206,"RecalcStyleDuration":0.053496,"ScriptDuration":0.02847,"TaskDuration":0.539034},{"run":2,"LayoutDuration":0.032923,"RecalcStyleDuration":0.047809000000000004,"ScriptDuration":0.014100999999999999,"TaskDuration":0.46625399999999995},{"run":3,"LayoutDuration":0.030620999999999995,"RecalcStyleDuration":0.043572,"ScriptDuration":0.012451000000000004,"TaskDuration":0.4432400000000001},{"run":4,"LayoutDuration":0.032318,"RecalcStyleDuration":0.04661699999999999,"ScriptDuration":0.012062000000000003,"TaskDuration":0.466912},{"run":5,"LayoutDuration":0.03084400000000001,"RecalcStyleDuration":0.043794,"ScriptDuration":0.013508999999999993,"TaskDuration":0.4692660000000002},{"run":1,"LayoutDuration":0.042293,"RecalcStyleDuration":0.054688,"ScriptDuration":0.024709,"TaskDuration":0.575068},{"run":2,"LayoutDuration":0.032722,"RecalcStyleDuration":0.047633999999999996,"ScriptDuration":0.015199,"TaskDuration":0.50415},{"run":3,"LayoutDuration":0.032832,"RecalcStyleDuration":0.048685000000000006,"ScriptDuration":0.016514,"TaskDuration":0.47304500000000016},{"run":4,"LayoutDuration":0.04561799999999999,"RecalcStyleDuration":0.066607,"ScriptDuration":0.016228999999999993,"TaskDuration":0.6341390000000002},{"run":5,"LayoutDuration":0.035880999999999996,"RecalcStyleDuration":0.048349999999999976,"ScriptDuration":0.013781000000000002,"TaskDuration":0.5025},{"run":1,"LayoutDuration":0.03524,"RecalcStyleDuration":0.046703,"ScriptDuration":0.041604,"TaskDuration":0.59426},{"run":2,"LayoutDuration":0.031472999999999994,"RecalcStyleDuration":0.051694,"ScriptDuration":0.010629,"TaskDuration":0.493799},{"run":3,"LayoutDuration":0.02433600000000001,"RecalcStyleDuration":0.03938699999999999,"ScriptDuration":0.011041999999999996,"TaskDuration":0.4021950000000001},{"run":4,"LayoutDuration":0.024285999999999988,"RecalcStyleDuration":0.039138000000000006,"ScriptDuration":0.019142000000000006,"TaskDuration":0.4536119999999999},{"run":5,"LayoutDuration":0.02505300000000002,"RecalcStyleDuration":0.039347999999999994,"ScriptDuration":0.010145000000000001,"TaskDuration":0.4671609999999997},{"run":1,"LayoutDuration":0.043419,"RecalcStyleDuration":0.049382,"ScriptDuration":0.041213,"TaskDuration":0.5246879999999999},{"run":2,"LayoutDuration":0.025197999999999998,"RecalcStyleDuration":0.040864000000000004,"ScriptDuration":0.012229000000000004,"TaskDuration":0.448353},{"run":3,"LayoutDuration":0.026188000000000003,"RecalcStyleDuration":0.04117,"ScriptDuration":0.011291999999999996,"TaskDuration":0.4579460000000001},{"run":4,"LayoutDuration":0.025515999999999997,"RecalcStyleDuration":0.039969000000000005,"ScriptDuration":0.013932,"TaskDuration":0.4560409999999999},{"run":5,"LayoutDuration":0.027631000000000003,"RecalcStyleDuration":0.042418999999999984,"ScriptDuration":0.012444999999999998,"TaskDuration":0.46494499999999994},{"run":1,"LayoutDuration":0.048109,"RecalcStyleDuration":0.051176,"ScriptDuration":0.0344,"TaskDuration":0.556493},{"run":2,"LayoutDuration":0.022856,"RecalcStyleDuration":0.044369000000000006,"ScriptDuration":0.010270000000000001,"TaskDuration":0.438609},{"run":3,"LayoutDuration":0.022204,"RecalcStyleDuration":0.042474,"ScriptDuration":0.010102,"TaskDuration":0.427959},{"run":4,"LayoutDuration":0.022645,"RecalcStyleDuration":0.04297899999999999,"ScriptDuration":0.010993000000000003,"TaskDuration":0.440145},{"run":5,"LayoutDuration":0.022971999999999992,"RecalcStyleDuration":0.043098,"ScriptDuration":0.01063299999999999,"TaskDuration":0.438636},{"run":1,"LayoutDuration":0.047899,"RecalcStyleDuration":0.052527,"ScriptDuration":0.033017,"TaskDuration":0.547841},{"run":2,"LayoutDuration":0.023791000000000007,"RecalcStyleDuration":0.045539,"ScriptDuration":0.010789,"TaskDuration":0.4530780000000001},{"run":3,"LayoutDuration":0.024223999999999996,"RecalcStyleDuration":0.045087,"ScriptDuration":0.017052000000000005,"TaskDuration":0.477136},{"run":4,"LayoutDuration":0.023247000000000004,"RecalcStyleDuration":0.04366300000000001,"ScriptDuration":0.011222000000000003,"TaskDuration":0.45733899999999994},{"run":5,"LayoutDuration":0.024586999999999984,"RecalcStyleDuration":0.047152,"ScriptDuration":0.011083999999999997,"TaskDuration":0.4606730000000001}]} \ No newline at end of file +const data = {"zoom":[{"run":1,"LayoutDuration":0.761102,"RecalcStyleDuration":1.140217,"ScriptDuration":3.384101,"TaskDuration":5.756419},{"run":2,"LayoutDuration":0.7567349999999999,"RecalcStyleDuration":1.197929,"ScriptDuration":3.526199,"TaskDuration":5.955871999999999},{"run":3,"LayoutDuration":0.7787270000000002,"RecalcStyleDuration":1.231757,"ScriptDuration":3.399286,"TaskDuration":5.861481000000001},{"run":4,"LayoutDuration":0.7913480000000002,"RecalcStyleDuration":1.2242220000000001,"ScriptDuration":3.451917999999999,"TaskDuration":5.965384},{"run":5,"LayoutDuration":0.9831949999999998,"RecalcStyleDuration":1.4522399999999998,"ScriptDuration":3.9555570000000007,"TaskDuration":6.958649999999999},{"run":1,"LayoutDuration":0.20473999999999998,"RecalcStyleDuration":0.315165,"ScriptDuration":1.108355,"TaskDuration":1.7596659999999997},{"run":2,"LayoutDuration":0.20881,"RecalcStyleDuration":0.31595900000000005,"ScriptDuration":1.103003,"TaskDuration":1.7960409999999998},{"run":3,"LayoutDuration":0.2198739999999999,"RecalcStyleDuration":0.32910799999999996,"ScriptDuration":1.1682930000000002,"TaskDuration":1.888636},{"run":4,"LayoutDuration":0.20253700000000008,"RecalcStyleDuration":0.3030360000000001,"ScriptDuration":1.0724330000000002,"TaskDuration":1.7366919999999997},{"run":5,"LayoutDuration":0.2040090000000001,"RecalcStyleDuration":0.30310100000000006,"ScriptDuration":1.0802830000000005,"TaskDuration":1.735631999999999},{"run":1,"LayoutDuration":0.214903,"RecalcStyleDuration":0.32094700000000004,"ScriptDuration":1.192058,"TaskDuration":1.870139},{"run":2,"LayoutDuration":0.220273,"RecalcStyleDuration":0.32132099999999997,"ScriptDuration":1.108886,"TaskDuration":1.8223159999999998},{"run":3,"LayoutDuration":0.21075199999999994,"RecalcStyleDuration":0.307705,"ScriptDuration":1.142754,"TaskDuration":1.838806},{"run":4,"LayoutDuration":0.20047399999999993,"RecalcStyleDuration":0.29481100000000016,"ScriptDuration":1.0625179999999999,"TaskDuration":1.6814030000000004},{"run":5,"LayoutDuration":0.20139899999999988,"RecalcStyleDuration":0.30300899999999986,"ScriptDuration":1.0637479999999995,"TaskDuration":1.7399830000000005},{"run":1,"LayoutDuration":0.674828,"RecalcStyleDuration":1.053378,"ScriptDuration":3.175294,"TaskDuration":5.331759},{"run":2,"LayoutDuration":0.45916499999999993,"RecalcStyleDuration":0.7681090000000002,"ScriptDuration":2.4055839999999997,"TaskDuration":3.9782650000000004},{"run":3,"LayoutDuration":0.4559819999999999,"RecalcStyleDuration":0.7587059999999999,"ScriptDuration":2.3784479999999997,"TaskDuration":3.92844},{"run":4,"LayoutDuration":0.454267,"RecalcStyleDuration":0.7471740000000002,"ScriptDuration":2.361986999999999,"TaskDuration":3.8864150000000013},{"run":5,"LayoutDuration":0.46455599999999997,"RecalcStyleDuration":0.7740930000000001,"ScriptDuration":2.404007,"TaskDuration":3.9813790000000004},{"run":1,"LayoutDuration":0.896763,"RecalcStyleDuration":1.340107,"ScriptDuration":3.956318,"TaskDuration":6.823176},{"run":2,"LayoutDuration":0.579704,"RecalcStyleDuration":0.9438510000000002,"ScriptDuration":2.9689170000000003,"TaskDuration":4.9413540000000005},{"run":3,"LayoutDuration":0.575534,"RecalcStyleDuration":0.9310810000000003,"ScriptDuration":2.922086,"TaskDuration":4.912284000000001},{"run":4,"LayoutDuration":0.5652359999999996,"RecalcStyleDuration":0.9099179999999998,"ScriptDuration":2.8771079999999998,"TaskDuration":4.771832},{"run":5,"LayoutDuration":0.576368,"RecalcStyleDuration":0.9322240000000006,"ScriptDuration":2.9099070000000005,"TaskDuration":4.859128999999999},{"run":1,"LayoutDuration":0.8907910000000001,"RecalcStyleDuration":1.8021,"ScriptDuration":5.058376,"TaskDuration":8.259811000000001},{"run":2,"LayoutDuration":0.8857579999999999,"RecalcStyleDuration":1.784853,"ScriptDuration":5.007549999999999,"TaskDuration":8.215954},{"run":3,"LayoutDuration":0.9356369999999998,"RecalcStyleDuration":1.910857,"ScriptDuration":5.353660999999999,"TaskDuration":8.780017999999998},{"run":4,"LayoutDuration":0.8666740000000002,"RecalcStyleDuration":1.7437870000000002,"ScriptDuration":4.911534999999999,"TaskDuration":8.042191999999996},{"run":5,"LayoutDuration":0.9315549999999999,"RecalcStyleDuration":1.8941000000000008,"ScriptDuration":5.268923000000001,"TaskDuration":8.609927000000006},{"run":1,"LayoutDuration":0.908718,"RecalcStyleDuration":1.851238,"ScriptDuration":5.182664999999999,"TaskDuration":8.476628},{"run":2,"LayoutDuration":0.921056,"RecalcStyleDuration":1.8494849999999998,"ScriptDuration":5.205128,"TaskDuration":8.515998000000002},{"run":3,"LayoutDuration":0.9465740000000002,"RecalcStyleDuration":1.907209,"ScriptDuration":5.284848,"TaskDuration":8.683857999999997},{"run":4,"LayoutDuration":0.9580839999999999,"RecalcStyleDuration":1.9122519999999996,"ScriptDuration":5.338634000000001,"TaskDuration":8.773906999999998},{"run":5,"LayoutDuration":0.7702600000000004,"RecalcStyleDuration":1.565612999999999,"ScriptDuration":4.344507,"TaskDuration":7.174543},{"run":1,"LayoutDuration":0.738939,"RecalcStyleDuration":1.5585099999999998,"ScriptDuration":4.168084,"TaskDuration":6.912527},{"run":2,"LayoutDuration":0.7598180000000001,"RecalcStyleDuration":1.5718429999999999,"ScriptDuration":4.452303999999999,"TaskDuration":7.272213},{"run":3,"LayoutDuration":0.7622439999999999,"RecalcStyleDuration":1.5758519999999998,"ScriptDuration":4.7047180000000015,"TaskDuration":7.548439},{"run":4,"LayoutDuration":0.8172490000000003,"RecalcStyleDuration":1.69334,"ScriptDuration":4.665395,"TaskDuration":7.652950000000001},{"run":5,"LayoutDuration":0.7712160000000003,"RecalcStyleDuration":1.6015110000000004,"ScriptDuration":4.460898,"TaskDuration":7.3144279999999995},{"run":1,"LayoutDuration":0.749297,"RecalcStyleDuration":1.551126,"ScriptDuration":4.372742,"TaskDuration":7.151184},{"run":2,"LayoutDuration":0.7276910000000001,"RecalcStyleDuration":1.470111,"ScriptDuration":4.073797,"TaskDuration":6.733262},{"run":3,"LayoutDuration":0.7846249999999999,"RecalcStyleDuration":1.6038799999999998,"ScriptDuration":4.489924,"TaskDuration":7.3435369999999995},{"run":4,"LayoutDuration":0.8203739999999997,"RecalcStyleDuration":1.665273,"ScriptDuration":4.555664999999999,"TaskDuration":7.534979},{"run":5,"LayoutDuration":0.7990029999999999,"RecalcStyleDuration":1.6402529999999995,"ScriptDuration":4.694617000000001,"TaskDuration":7.632450000000002}],"load":[{"run":1,"LayoutDuration":0.057931,"RecalcStyleDuration":0.047083,"ScriptDuration":0.035715,"TaskDuration":0.553342},{"run":2,"LayoutDuration":0.02891699999999999,"RecalcStyleDuration":0.041692999999999994,"ScriptDuration":0.012980000000000005,"TaskDuration":0.40991200000000005},{"run":3,"LayoutDuration":0.02805300000000001,"RecalcStyleDuration":0.04066900000000001,"ScriptDuration":0.014490000000000003,"TaskDuration":0.404586},{"run":4,"LayoutDuration":0.028339000000000003,"RecalcStyleDuration":0.041904,"ScriptDuration":0.011911999999999992,"TaskDuration":0.41607000000000016},{"run":5,"LayoutDuration":0.03608699999999998,"RecalcStyleDuration":0.050066,"ScriptDuration":0.011991000000000002,"TaskDuration":0.448874},{"run":1,"LayoutDuration":0.042206,"RecalcStyleDuration":0.053496,"ScriptDuration":0.02847,"TaskDuration":0.539034},{"run":2,"LayoutDuration":0.032923,"RecalcStyleDuration":0.047809000000000004,"ScriptDuration":0.014100999999999999,"TaskDuration":0.46625399999999995},{"run":3,"LayoutDuration":0.030620999999999995,"RecalcStyleDuration":0.043572,"ScriptDuration":0.012451000000000004,"TaskDuration":0.4432400000000001},{"run":4,"LayoutDuration":0.032318,"RecalcStyleDuration":0.04661699999999999,"ScriptDuration":0.012062000000000003,"TaskDuration":0.466912},{"run":5,"LayoutDuration":0.03084400000000001,"RecalcStyleDuration":0.043794,"ScriptDuration":0.013508999999999993,"TaskDuration":0.4692660000000002},{"run":1,"LayoutDuration":0.042293,"RecalcStyleDuration":0.054688,"ScriptDuration":0.024709,"TaskDuration":0.575068},{"run":2,"LayoutDuration":0.032722,"RecalcStyleDuration":0.047633999999999996,"ScriptDuration":0.015199,"TaskDuration":0.50415},{"run":3,"LayoutDuration":0.032832,"RecalcStyleDuration":0.048685000000000006,"ScriptDuration":0.016514,"TaskDuration":0.47304500000000016},{"run":4,"LayoutDuration":0.04561799999999999,"RecalcStyleDuration":0.066607,"ScriptDuration":0.016228999999999993,"TaskDuration":0.6341390000000002},{"run":5,"LayoutDuration":0.035880999999999996,"RecalcStyleDuration":0.048349999999999976,"ScriptDuration":0.013781000000000002,"TaskDuration":0.5025},{"run":1,"LayoutDuration":0.03524,"RecalcStyleDuration":0.046703,"ScriptDuration":0.041604,"TaskDuration":0.59426},{"run":2,"LayoutDuration":0.031472999999999994,"RecalcStyleDuration":0.051694,"ScriptDuration":0.010629,"TaskDuration":0.493799},{"run":3,"LayoutDuration":0.02433600000000001,"RecalcStyleDuration":0.03938699999999999,"ScriptDuration":0.011041999999999996,"TaskDuration":0.4021950000000001},{"run":4,"LayoutDuration":0.024285999999999988,"RecalcStyleDuration":0.039138000000000006,"ScriptDuration":0.019142000000000006,"TaskDuration":0.4536119999999999},{"run":5,"LayoutDuration":0.02505300000000002,"RecalcStyleDuration":0.039347999999999994,"ScriptDuration":0.010145000000000001,"TaskDuration":0.4671609999999997},{"run":1,"LayoutDuration":0.043419,"RecalcStyleDuration":0.049382,"ScriptDuration":0.041213,"TaskDuration":0.5246879999999999},{"run":2,"LayoutDuration":0.025197999999999998,"RecalcStyleDuration":0.040864000000000004,"ScriptDuration":0.012229000000000004,"TaskDuration":0.448353},{"run":3,"LayoutDuration":0.026188000000000003,"RecalcStyleDuration":0.04117,"ScriptDuration":0.011291999999999996,"TaskDuration":0.4579460000000001},{"run":4,"LayoutDuration":0.025515999999999997,"RecalcStyleDuration":0.039969000000000005,"ScriptDuration":0.013932,"TaskDuration":0.4560409999999999},{"run":5,"LayoutDuration":0.027631000000000003,"RecalcStyleDuration":0.042418999999999984,"ScriptDuration":0.012444999999999998,"TaskDuration":0.46494499999999994},{"run":1,"LayoutDuration":0.048109,"RecalcStyleDuration":0.051176,"ScriptDuration":0.0344,"TaskDuration":0.556493},{"run":2,"LayoutDuration":0.022856,"RecalcStyleDuration":0.044369000000000006,"ScriptDuration":0.010270000000000001,"TaskDuration":0.438609},{"run":3,"LayoutDuration":0.022204,"RecalcStyleDuration":0.042474,"ScriptDuration":0.010102,"TaskDuration":0.427959},{"run":4,"LayoutDuration":0.022645,"RecalcStyleDuration":0.04297899999999999,"ScriptDuration":0.010993000000000003,"TaskDuration":0.440145},{"run":5,"LayoutDuration":0.022971999999999992,"RecalcStyleDuration":0.043098,"ScriptDuration":0.01063299999999999,"TaskDuration":0.438636},{"run":1,"LayoutDuration":0.047899,"RecalcStyleDuration":0.052527,"ScriptDuration":0.033017,"TaskDuration":0.547841},{"run":2,"LayoutDuration":0.023791000000000007,"RecalcStyleDuration":0.045539,"ScriptDuration":0.010789,"TaskDuration":0.4530780000000001},{"run":3,"LayoutDuration":0.024223999999999996,"RecalcStyleDuration":0.045087,"ScriptDuration":0.017052000000000005,"TaskDuration":0.477136},{"run":4,"LayoutDuration":0.023247000000000004,"RecalcStyleDuration":0.04366300000000001,"ScriptDuration":0.011222000000000003,"TaskDuration":0.45733899999999994},{"run":5,"LayoutDuration":0.024586999999999984,"RecalcStyleDuration":0.047152,"ScriptDuration":0.011083999999999997,"TaskDuration":0.4606730000000001},{"run":1,"LayoutDuration":0.03911,"RecalcStyleDuration":0.048252,"ScriptDuration":0.047633,"TaskDuration":0.52863},{"run":2,"LayoutDuration":0.027965999999999998,"RecalcStyleDuration":0.05058499999999999,"ScriptDuration":0.017205000000000005,"TaskDuration":0.46559300000000003},{"run":3,"LayoutDuration":0.02749800000000001,"RecalcStyleDuration":0.048976000000000006,"ScriptDuration":0.01676799999999999,"TaskDuration":0.45459700000000003},{"run":4,"LayoutDuration":0.026948,"RecalcStyleDuration":0.04849999999999999,"ScriptDuration":0.016277,"TaskDuration":0.44466400000000017},{"run":5,"LayoutDuration":0.025049000000000002,"RecalcStyleDuration":0.043878,"ScriptDuration":0.019013000000000002,"TaskDuration":0.41632100000000016},{"run":1,"LayoutDuration":0.040043,"RecalcStyleDuration":0.049515,"ScriptDuration":0.035791,"TaskDuration":0.512687},{"run":2,"LayoutDuration":0.02758499999999999,"RecalcStyleDuration":0.04996199999999999,"ScriptDuration":0.010786999999999998,"TaskDuration":0.460406},{"run":3,"LayoutDuration":0.022149000000000002,"RecalcStyleDuration":0.03971999999999999,"ScriptDuration":0.010404999999999998,"TaskDuration":0.3793789999999999},{"run":4,"LayoutDuration":0.021883,"RecalcStyleDuration":0.038721000000000005,"ScriptDuration":0.011937999999999997,"TaskDuration":0.35924500000000004},{"run":5,"LayoutDuration":0.025888000000000008,"RecalcStyleDuration":0.04605400000000001,"ScriptDuration":0.014329000000000008,"TaskDuration":0.42428200000000005}]} \ No newline at end of file