From e0e6168cfe7547051632b51af49594f1a5be1e18 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Tue, 24 Jan 2023 19:07:35 +0400 Subject: [PATCH] Remove sorting information from best practices content --- bin/best-practice-content.cjs | 37 +- .../best-practices/frontend-performance.json | 4943 ++++++++++------- ...y.md => analyse-stylesheets-complexity.md} | 0 ...ssues.md => analyze-js-for-perf-issues.md} | 0 ...-avoid-404-files.md => avoid-404-files.md} | 0 ...ase64-images.md => avoid-base64-images.md} | 0 ...void-inline-css.md => avoid-inline-css.md} | 0 ...d => avoid-multiple-inline-js-snippets.md} | 0 .../{144-bundlephobia.md => bundlephobia.md} | 0 ...dency-size.md => check-dependency-size.md} | 0 ...md => choose-image-format-approprietly.md} | 0 ...hrome-dev-tools.md => chrome-dev-tools.md} | 0 ...your-images.md => compress-your-images.md} | 0 ...file.md => concatenate-css-single-file.md} | 0 ...ytes.md => cookie-size-less-4096-bytes.md} | 0 ...e-compression.md => enable-compression.md} | 0 ...ramework-guides.md => framework-guides.md} | 0 ...critical-css.md => inline-critical-css.md} | 0 ...ow-20.md => keep-cookie-count-below-20.md} | 0 ...ate.md => keep-dependencies-up-to-date.md} | 0 ...fb-less-1-3s.md => keep-ttfb-less-1-3s.md} | 0 ...er-300k.md => keep-web-font-under-300k.md} | 0 .../{141-lighthouse.md => lighthouse.md} | 0 ...ily.md => load-offscreen-images-lazily.md} | 0 ...king.md => make-css-files-non-blocking.md} | 0 .../{101-minify-css.md => minify-css.md} | 0 .../{119-minify-html.md => minify-html.md} | 0 ...avascript.md => minify-your-javascript.md} | 0 ...-requests.md => minimize-http-requests.md} | 0 ...rame-count.md => minimize-iframe-count.md} | 0 ...below-3s.md => page-load-time-below-3s.md} | 0 ...eed-insights.md => page-speed-insights.md} | 0 ...elow-1500.md => page-weight-below-1500.md} | 0 ...ble.md => pre-load-urls-where-possible.md} | 0 ...ctor-images.md => prefer-vector-images.md} | 0 ...nt-flash-text.md => prevent-flash-text.md} | 0 ...mended-guides.md => recommended-guides.md} | 0 ...ove-unused-css.md => remove-unused-css.md} | 0 ...e-images.md => serve-exact-size-images.md} | 0 ...t-images.md => set-width-height-images.md} | 0 .../{145-squoosh-ap.md => squoosh-ap.md} | 0 .../content/{120-use-cdn.md => use-cdn.md} | 0 ...e-headers.md => use-http-cache-headers.md} | 0 ...ebsite.md => use-https-on-your-website.md} | 0 ...ript.md => use-non-blocking-javascript.md} | 0 ...nts.md => use-preconnect-to-load-fonts.md} | 0 ...-same-protocol.md => use-same-protocol.md} | 0 ....md => use-service-workers-for-caching.md} | 0 ...ont-format.md => use-woff2-font-format.md} | 0 ...{142-web-page-test.md => web-page-test.md} | 0 50 files changed, 2862 insertions(+), 2118 deletions(-) rename src/best-practices/frontend-performance/content/{105-analyse-stylesheets-complexity.md => analyse-stylesheets-complexity.md} (100%) rename src/best-practices/frontend-performance/content/{128-analyze-js-for-perf-issues.md => analyze-js-for-perf-issues.md} (100%) rename src/best-practices/frontend-performance/content/{116-avoid-404-files.md => avoid-404-files.md} (100%) rename src/best-practices/frontend-performance/content/{123-avoid-base64-images.md => avoid-base64-images.md} (100%) rename src/best-practices/frontend-performance/content/{104-avoid-inline-css.md => avoid-inline-css.md} (100%) rename src/best-practices/frontend-performance/content/{126-avoid-multiple-inline-js-snippets.md => avoid-multiple-inline-js-snippets.md} (100%) rename src/best-practices/frontend-performance/content/{144-bundlephobia.md => bundlephobia.md} (100%) rename src/best-practices/frontend-performance/content/{139-check-dependency-size.md => check-dependency-size.md} (100%) rename src/best-practices/frontend-performance/content/{107-choose-image-format-approprietly.md => choose-image-format-approprietly.md} (100%) rename src/best-practices/frontend-performance/content/{143-chrome-dev-tools.md => chrome-dev-tools.md} (100%) rename src/best-practices/frontend-performance/content/{106-compress-your-images.md => compress-your-images.md} (100%) rename src/best-practices/frontend-performance/content/{133-concatenate-css-single-file.md => concatenate-css-single-file.md} (100%) rename src/best-practices/frontend-performance/content/{130-cookie-size-less-4096-bytes.md => cookie-size-less-4096-bytes.md} (100%) rename src/best-practices/frontend-performance/content/{118-enable-compression.md => enable-compression.md} (100%) rename src/best-practices/frontend-performance/content/{146-framework-guides.md => framework-guides.md} (100%) rename src/best-practices/frontend-performance/content/{103-inline-critical-css.md => inline-critical-css.md} (100%) rename src/best-practices/frontend-performance/content/{131-keep-cookie-count-below-20.md => keep-cookie-count-below-20.md} (100%) rename src/best-practices/frontend-performance/content/{127-keep-dependencies-up-to-date.md => keep-dependencies-up-to-date.md} (100%) rename src/best-practices/frontend-performance/content/{113-keep-ttfb-less-1-3s.md => keep-ttfb-less-1-3s.md} (100%) rename src/best-practices/frontend-performance/content/{137-keep-web-font-under-300k.md => keep-web-font-under-300k.md} (100%) rename src/best-practices/frontend-performance/content/{141-lighthouse.md => lighthouse.md} (100%) rename src/best-practices/frontend-performance/content/{124-load-offscreen-images-lazily.md => load-offscreen-images-lazily.md} (100%) rename src/best-practices/frontend-performance/content/{102-make-css-files-non-blocking.md => make-css-files-non-blocking.md} (100%) rename src/best-practices/frontend-performance/content/{101-minify-css.md => minify-css.md} (100%) rename src/best-practices/frontend-performance/content/{119-minify-html.md => minify-html.md} (100%) rename src/best-practices/frontend-performance/content/{108-minify-your-javascript.md => minify-your-javascript.md} (100%) rename src/best-practices/frontend-performance/content/{114-minimize-http-requests.md => minimize-http-requests.md} (100%) rename src/best-practices/frontend-performance/content/{100-minimize-iframe-count.md => minimize-iframe-count.md} (100%) rename src/best-practices/frontend-performance/content/{112-page-load-time-below-3s.md => page-load-time-below-3s.md} (100%) rename src/best-practices/frontend-performance/content/{140-page-speed-insights.md => page-speed-insights.md} (100%) rename src/best-practices/frontend-performance/content/{111-page-weight-below-1500.md => page-weight-below-1500.md} (100%) rename src/best-practices/frontend-performance/content/{132-pre-load-urls-where-possible.md => pre-load-urls-where-possible.md} (100%) rename src/best-practices/frontend-performance/content/{121-prefer-vector-images.md => prefer-vector-images.md} (100%) rename src/best-practices/frontend-performance/content/{138-prevent-flash-text.md => prevent-flash-text.md} (100%) rename src/best-practices/frontend-performance/content/{147-recommended-guides.md => recommended-guides.md} (100%) rename src/best-practices/frontend-performance/content/{134-remove-unused-css.md => remove-unused-css.md} (100%) rename src/best-practices/frontend-performance/content/{125-serve-exact-size-images.md => serve-exact-size-images.md} (100%) rename src/best-practices/frontend-performance/content/{122-set-width-height-images.md => set-width-height-images.md} (100%) rename src/best-practices/frontend-performance/content/{145-squoosh-ap.md => squoosh-ap.md} (100%) rename src/best-practices/frontend-performance/content/{120-use-cdn.md => use-cdn.md} (100%) rename src/best-practices/frontend-performance/content/{117-use-http-cache-headers.md => use-http-cache-headers.md} (100%) rename src/best-practices/frontend-performance/content/{110-use-https-on-your-website.md => use-https-on-your-website.md} (100%) rename src/best-practices/frontend-performance/content/{109-use-non-blocking-javascript.md => use-non-blocking-javascript.md} (100%) rename src/best-practices/frontend-performance/content/{136-use-preconnect-to-load-fonts.md => use-preconnect-to-load-fonts.md} (100%) rename src/best-practices/frontend-performance/content/{115-use-same-protocol.md => use-same-protocol.md} (100%) rename src/best-practices/frontend-performance/content/{129-use-service-workers-for-caching.md => use-service-workers-for-caching.md} (100%) rename src/best-practices/frontend-performance/content/{135-use-woff2-font-format.md => use-woff2-font-format.md} (100%) rename src/best-practices/frontend-performance/content/{142-web-page-test.md => web-page-test.md} (100%) diff --git a/bin/best-practice-content.cjs b/bin/best-practice-content.cjs index d7bf95b3d..6204a8230 100644 --- a/bin/best-practice-content.cjs +++ b/bin/best-practice-content.cjs @@ -41,7 +41,7 @@ if (fs.existsSync(bestPracticeContentDirPath)) { process.exit(1); } -function prepareDirTree(control, dirTree, dirSortOrders) { +function prepareDirTree(control, dirTree) { // Directories are only created for groups if (control.typeID !== '__group__') { return; @@ -49,18 +49,14 @@ function prepareDirTree(control, dirTree, dirSortOrders) { // e.g. 104-testing-your-apps:other-options const controlName = control?.properties?.controlName || ''; - // e.g. 104 - const sortOrder = controlName.match(/^\d+/)?.[0]; // No directory for a group without control name - if (!controlName || !sortOrder) { + if (!controlName || controlName.startsWith('check:') || controlName.startsWith('ext_link:')) { return; } - // e.g. testing-your-apps:other-options - const controlNameWithoutSortOrder = controlName.replace(/^\d+-/, ''); // e.g. ['testing-your-apps', 'other-options'] - const dirParts = controlNameWithoutSortOrder.split(':'); + const dirParts = controlName.split(':'); // Nest the dir path in the dirTree let currDirTree = dirTree; @@ -69,37 +65,33 @@ function prepareDirTree(control, dirTree, dirSortOrders) { currDirTree = currDirTree[dirPart]; }); - dirSortOrders[controlNameWithoutSortOrder] = Number(sortOrder); - const childrenControls = control.children.controls.control; // No more children if (childrenControls.length) { childrenControls.forEach((childControl) => { - prepareDirTree(childControl, dirTree, dirSortOrders); + prepareDirTree(childControl, dirTree); }); } - return { dirTree, dirSortOrders }; + return { dirTree }; } const bestPractice = require(path.join(__dirname, `../public/jsons/best-practices/${bestPracticeId}`)); const controls = bestPractice.mockup.controls.control; -// Prepare the dir tree that we will be creating and also calculate the sort orders +// Prepare the dir tree that we will be creating const dirTree = {}; -const dirSortOrders = {}; controls.forEach((control) => { - prepareDirTree(control, dirTree, dirSortOrders); + prepareDirTree(control, dirTree); }); /** * @param parentDir Parent directory in which directory is to be created * @param dirTree Nested dir tree to be created - * @param sortOrders Mapping from groupName to sort order * @param filePaths The mapping from groupName to file path */ -function createDirTree(parentDir, dirTree, sortOrders, filePaths = {}) { +function createDirTree(parentDir, dirTree, filePaths = {}) { const childrenDirNames = Object.keys(dirTree); const hasChildren = childrenDirNames.length !== 0; @@ -107,7 +99,6 @@ function createDirTree(parentDir, dirTree, sortOrders, filePaths = {}) { const groupName = parentDir .replace(bestPracticeContentDirPath, '') // Remove base dir path .replace(/(^\/)|(\/$)/g, '') // Remove trailing slashes - .replace(/(^\d+?-)/g, '') // Remove sorting information .replaceAll('/', ':') // Replace slashes with `:` .replace(/:\d+-/, ':'); @@ -117,15 +108,6 @@ function createDirTree(parentDir, dirTree, sortOrders, filePaths = {}) { ?.replaceAll('-', ' ') .replace(/^\w/, ($0) => $0.toUpperCase()); - const sortOrder = sortOrders[groupName] || ''; - - // Attach sorting information to dirname - // e.g. /best-practices/frontend-performance/content/internet - // ———> /best-practices/frontend-performance/content/103-internet - if (sortOrder) { - parentDir = parentDir.replace(/(.+?)([^\/]+)?$/, `$1${sortOrder}-$2`); - } - // If no children, create a file for this under the parent directory if (!hasChildren) { let fileName = `${parentDir}.md`; @@ -150,7 +132,6 @@ function createDirTree(parentDir, dirTree, sortOrders, filePaths = {}) { createDirTree( path.join(parentDir, dirName), dirTree[dirName], - dirSortOrders, filePaths ); }); @@ -159,5 +140,5 @@ function createDirTree(parentDir, dirTree, sortOrders, filePaths = {}) { } // Create directories and get back the paths for created directories -createDirTree(bestPracticeContentDirPath, dirTree, dirSortOrders); +createDirTree(bestPracticeContentDirPath, dirTree); console.log('Created best practice content directory structure'); \ No newline at end of file diff --git a/public/jsons/best-practices/frontend-performance.json b/public/jsons/best-practices/frontend-performance.json index 98dcaab38..021511bad 100644 --- a/public/jsons/best-practices/frontend-performance.json +++ b/public/jsons/best-practices/frontend-performance.json @@ -3,76 +3,296 @@ "controls": { "control": [ { - "ID": "14813", + "ID": "15137", + "typeID": "Arrow", + "zOrder": "0", + "w": "1", + "h": "81", + "measuredW": "150", + "measuredH": "100", + "x": "814", + "y": "1843", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "stroke": "dotted", + "color": "10027263", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.49999999999999994, + "y": 0 + }, + "p2": { + "x": 0, + "y": 81.09090909090901 + } + } + }, + { + "ID": "15138", + "typeID": "Arrow", + "zOrder": "1", + "w": "1", + "h": "90", + "measuredW": "150", + "measuredH": "100", + "x": "1118", + "y": "1511", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "4273622", + "stroke": "dotted", + "p0": { + "x": 0, + "y": -0.48484848484849863 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 0, + "y": 89.20412121212144 + } + } + }, + { + "ID": "15139", + "typeID": "Arrow", + "zOrder": "2", + "w": "606", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "816", + "y": "1510", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0.4393939393939945, + "y": 0 + }, + "p1": { + "x": 0.499957866859274, + "y": 0.000355669369753909 + }, + "p2": { + "x": 606.8787878787878, + "y": 0 + }, + "color": "4273622" + } + }, + { + "ID": "15140", + "typeID": "Arrow", + "zOrder": "3", + "w": "1", + "h": "79", + "measuredW": "150", + "measuredH": "100", + "x": "469", + "y": "1309", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "4273622", + "p0": { + "x": 0, + "y": -0.48484848484849863 + }, + "p1": { + "x": 0.5, + "y": 0 + }, + "p2": { + "x": 0, + "y": 78.78896363636386 + }, + "stroke": "dotted" + } + }, + { + "ID": "15141", + "typeID": "Arrow", + "zOrder": "4", + "w": "726", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "816", + "y": "1052", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "4273622", + "p0": { + "x": -0.2686368305519409, + "y": 0 + }, + "p1": { + "x": 0.5001077701859017, + "y": 0.0003391382343339101 + }, + "p2": { + "x": 725.5310311167375, + "y": 0 + } + } + }, + { + "ID": "15142", + "typeID": "Arrow", + "zOrder": "5", + "w": "1252", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "225", + "y": "413", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": 0 + }, + "p1": { + "x": 0.49994495226877456, + "y": 0.0003335799224988863 + }, + "p2": { + "x": 1252, + "y": 0 + }, + "color": "4273622" + } + }, + { + "ID": "15143", + "typeID": "Canvas", + "zOrder": "6", + "w": "189", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "375", + "y": "389", + "properties": { + "color": "16776960" + } + }, + { + "ID": "15145", "typeID": "Label", - "zOrder": "8", + "zOrder": "9", "measuredW": "327", "measuredH": "40", - "x": "676", - "y": "216", + "x": "686", + "y": "226", "properties": { "text": "Frontend Performance", "size": "32" } }, { - "ID": "14848", + "ID": "15146", "typeID": "Canvas", - "zOrder": "9", + "zOrder": "10", "w": "361", "h": "150", "measuredW": "100", "measuredH": "70", - "x": "1089", - "y": "148" + "x": "1099", + "y": "158" }, { - "ID": "14849", + "ID": "15147", "typeID": "Label", - "zOrder": "10", + "zOrder": "11", "measuredW": "332", "measuredH": "26", - "x": "1105", - "y": "166", + "x": "1115", + "y": "176", "properties": { "text": "Find the detailed version of this checklist", "size": "18" } }, { - "ID": "14850", + "ID": "15148", "typeID": "Label", - "zOrder": "11", + "zOrder": "12", "measuredW": "318", "measuredH": "26", - "x": "1105", - "y": "194", + "x": "1115", + "y": "204", "properties": { "size": "18", "text": "With details on how to implement these" } }, { - "ID": "14853", + "ID": "15149", "typeID": "Canvas", + "zOrder": "13", + "w": "329", + "h": "51", + "measuredW": "100", + "measuredH": "70", + "x": "1115", + "y": "240", + "properties": { + "color": "4273622", + "borderColor": "4273622" + } + }, + { + "ID": "15150", + "typeID": "Label", "zOrder": "14", + "measuredW": "172", + "measuredH": "28", + "x": "1194", + "y": "252", + "properties": { + "color": "16777215", + "size": "20", + "text": "https://roadmap.sh" + } + }, + { + "ID": "15151", + "typeID": "Canvas", + "zOrder": "15", "w": "373", "h": "169", "measuredW": "100", "measuredH": "70", - "x": "226", - "y": "138" + "x": "236", + "y": "148" }, { - "ID": "14854", + "ID": "15152", "typeID": "__group__", - "zOrder": "15", + "zOrder": "16", "measuredW": "191", "measuredH": "27", "w": "191", "h": "27", - "x": "256", - "y": "212", + "x": "266", + "y": "222", "properties": { "controlName": "ext_link:roadmap.sh/frontend" }, @@ -146,15 +366,15 @@ } }, { - "ID": "14855", + "ID": "15153", "typeID": "__group__", - "zOrder": "16", + "zOrder": "17", "measuredW": "202", "measuredH": "27", "w": "202", "h": "27", - "x": "256", - "y": "248", + "x": "266", + "y": "258", "properties": { "controlName": "ext_link:roadmap.sh/javascript" }, @@ -228,28 +448,28 @@ } }, { - "ID": "14856", + "ID": "15154", "typeID": "Label", - "zOrder": "17", + "zOrder": "18", "measuredW": "209", "measuredH": "32", - "x": "256", - "y": "162", + "x": "266", + "y": "172", "properties": { "size": "24", "text": "Related Roadmaps" } }, { - "ID": "14857", + "ID": "15155", "typeID": "Arrow", - "zOrder": "18", + "zOrder": "19", "w": "1", "h": "76", "measuredW": "150", "measuredH": "100", - "x": "802", - "y": "124", + "x": "812", + "y": "134", "properties": { "curvature": "0", "leftArrow": "false", @@ -271,967 +491,116 @@ } }, { - "ID": "14882", - "typeID": "TextArea", - "zOrder": "19", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "461" - }, - { - "ID": "14915", - "typeID": "TextArea", + "ID": "15157", + "typeID": "__group__", "zOrder": "21", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "500" + "measuredW": "481", + "measuredH": "28", + "w": "481", + "h": "28", + "x": "907", + "y": "472", + "properties": { + "controlName": "minify-html" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "481", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Minified HTML - Remove comments and whitespaces" + } + } + ] + } + } }, { - "ID": "14920", - "typeID": "TextArea", + "ID": "15159", + "typeID": "__group__", "zOrder": "23", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "1108" + "measuredW": "271", + "measuredH": "28", + "w": "271", + "h": "28", + "x": "907", + "y": "511", + "properties": { + "controlName": "use-cdn" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "271", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "text": "Use Content Delivery Network", + "size": "20" + } + } + ] + } + } }, { - "ID": "14922", - "typeID": "TextArea", + "ID": "15161", + "typeID": "__group__", "zOrder": "25", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "501" + "measuredW": "274", + "measuredH": "28", + "w": "274", + "h": "28", + "x": "903", + "y": "1121", + "properties": { + "controlName": "pre-load-urls-where-possible" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "274", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Pre-load URLs where possible" + } + } + ] + } + } }, { - "ID": "14926", - "typeID": "TextArea", + "ID": "15163", + "typeID": "__group__", "zOrder": "27", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "1147" - }, - { - "ID": "14929", - "typeID": "TextArea", - "zOrder": "29", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "540" - }, - { - "ID": "14931", - "typeID": "TextArea", - "zOrder": "31", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "1190" - }, - { - "ID": "14933", - "typeID": "TextArea", - "zOrder": "33", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "579" - }, - { - "ID": "14935", - "typeID": "TextArea", - "zOrder": "35", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "619" - }, - { - "ID": "14937", - "typeID": "TextArea", - "zOrder": "37", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "658" - }, - { - "ID": "14939", - "typeID": "TextArea", - "zOrder": "39", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "1232" - }, - { - "ID": "14941", - "typeID": "TextArea", - "zOrder": "41", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "1272" - }, - { - "ID": "14943", - "typeID": "TextArea", - "zOrder": "43", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "1311" - }, - { - "ID": "14945", - "typeID": "TextArea", - "zOrder": "45", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "1351" - }, - { - "ID": "14947", - "typeID": "TextArea", - "zOrder": "47", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "696" - }, - { - "ID": "14949", - "typeID": "TextArea", - "zOrder": "49", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "736" - }, - { - "ID": "14951", - "typeID": "TextArea", - "zOrder": "51", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "540" - }, - { - "ID": "14953", - "typeID": "TextArea", - "zOrder": "53", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "580" - }, - { - "ID": "14955", - "typeID": "TextArea", - "zOrder": "55", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "620" - }, - { - "ID": "14957", - "typeID": "TextArea", - "zOrder": "57", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "660" - }, - { - "ID": "14959", - "typeID": "TextArea", - "zOrder": "59", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "700" - }, - { - "ID": "14961", - "typeID": "TextArea", - "zOrder": "61", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "777" - }, - { - "ID": "14964", - "typeID": "TextArea", - "zOrder": "63", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "740" - }, - { - "ID": "14966", - "typeID": "TextArea", - "zOrder": "65", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "816" - }, - { - "ID": "14968", - "typeID": "TextArea", - "zOrder": "67", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "781" - }, - { - "ID": "14970", - "typeID": "TextArea", - "zOrder": "69", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "1391" - }, - { - "ID": "14972", - "typeID": "TextArea", - "zOrder": "71", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "824" - }, - { - "ID": "14974", - "typeID": "TextArea", - "zOrder": "73", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "865" - }, - { - "ID": "14976", - "typeID": "TextArea", - "zOrder": "75", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "860" - }, - { - "ID": "14978", - "typeID": "TextArea", - "zOrder": "77", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "901" - }, - { - "ID": "14980", - "typeID": "TextArea", - "zOrder": "79", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "941" - }, - { - "ID": "14982", - "typeID": "TextArea", - "zOrder": "81", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "982" - }, - { - "ID": "14984", - "typeID": "TextArea", - "zOrder": "83", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "849", - "y": "906" - }, - { - "ID": "14986", - "typeID": "TextArea", - "zOrder": "85", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "850", - "y": "949" - }, - { - "ID": "14988", - "typeID": "TextArea", - "zOrder": "87", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "1025" - }, - { - "ID": "14992", - "typeID": "TextArea", - "zOrder": "89", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "1065" - }, - { - "ID": "14994", - "typeID": "TextArea", - "zOrder": "91", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "1105" - }, - { - "ID": "14996", - "typeID": "TextArea", - "zOrder": "93", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "1146" - }, - { - "ID": "14998", - "typeID": "TextArea", - "zOrder": "95", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "245", - "y": "1186" - }, - { - "ID": "15024", - "typeID": "Label", - "zOrder": "97", - "measuredW": "111", - "measuredH": "28", - "x": "404", - "y": "390", - "properties": { - "text": "High Priority", - "size": "20" - } - }, - { - "ID": "15028", - "typeID": "Arrow", - "zOrder": "98", - "w": "1", - "h": "1583", - "measuredW": "150", - "measuredH": "100", - "x": "804", - "y": "277", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": -0.48484848484849863 - }, - "p1": { - "x": 0.49999999999999994, - "y": 0 - }, - "p2": { - "x": 0, - "y": 1582.047272727273 - }, - "color": "4273622" - } - }, - { - "ID": "15030", - "typeID": "Arrow", - "zOrder": "4", - "w": "726", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "806", - "y": "1042", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "4273622", - "p0": { - "x": -0.2686368305519409, - "y": 0 - }, - "p1": { - "x": 0.5001077701859017, - "y": 0.0003391382343339101 - }, - "p2": { - "x": 725.5310311167375, - "y": 0 - } - } - }, - { - "ID": "15031", - "typeID": "Arrow", - "zOrder": "99", - "w": "630", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "171", - "y": "1286", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "4273622", - "p0": { - "x": 0.48416950727948915, - "y": 0 - }, - "p1": { - "x": 0.4997238005050516, - "y": 0.00038783741855417725 - }, - "p2": { - "x": 630.4475453407811, - "y": 0 - } - } - }, - { - "ID": "15034", - "typeID": "Canvas", - "zOrder": "12", - "w": "329", - "h": "51", - "measuredW": "100", - "measuredH": "70", - "x": "1105", - "y": "230", - "properties": { - "color": "4273622", - "borderColor": "4273622" - } - }, - { - "ID": "15035", - "typeID": "Label", - "zOrder": "13", - "measuredW": "172", - "measuredH": "28", - "x": "1184", - "y": "242", - "properties": { - "color": "16777215", - "size": "20", - "text": "https://roadmap.sh" - } - }, - { - "ID": "15036", - "typeID": "Canvas", - "zOrder": "6", - "w": "189", - "h": "50", - "measuredW": "100", - "measuredH": "70", - "x": "365", - "y": "379", - "properties": { - "color": "16776960" - } - }, - { - "ID": "15037", - "typeID": "Arrow", - "zOrder": "5", - "w": "1252", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "215", - "y": "403", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.49994495226877456, - "y": 0.0003335799224988863 - }, - "p2": { - "x": 1252, - "y": 0 - }, - "color": "4273622" - } - }, - { - "ID": "15038", - "typeID": "Canvas", - "zOrder": "100", - "w": "202", - "h": "50", - "measuredW": "100", - "measuredH": "70", - "x": "997", - "y": "377", - "properties": { - "color": "16776960" - } - }, - { - "ID": "15039", - "typeID": "Label", - "zOrder": "101", - "measuredW": "142", - "measuredH": "28", - "x": "1027", - "y": "388", - "properties": { - "size": "20", - "text": "Medium Priority" - } - }, - { - "ID": "15040", - "typeID": "Canvas", - "zOrder": "102", - "w": "202", - "h": "50", - "measuredW": "100", - "measuredH": "70", - "x": "997", - "y": "1017", - "properties": { - "color": "16776960" - } - }, - { - "ID": "15041", - "typeID": "Label", - "zOrder": "103", - "measuredW": "104", - "measuredH": "28", - "x": "1046", - "y": "1028", - "properties": { - "size": "20", - "text": "Low Priority" - } - }, - { - "ID": "15044", - "typeID": "Canvas", - "zOrder": "104", - "w": "242", - "h": "50", - "measuredW": "100", - "measuredH": "70", - "x": "339", - "y": "1260", - "properties": { - "color": "4273622", - "borderColor": "4273622" - } - }, - { - "ID": "15045", - "typeID": "Label", - "zOrder": "105", - "measuredW": "169", - "measuredH": "28", - "x": "375", - "y": "1271", - "properties": { - "size": "20", - "text": "Performance Tools", - "color": "16777215" - } - }, - { - "ID": "15057", - "typeID": "Arrow", - "zOrder": "3", - "w": "1", - "h": "79", - "measuredW": "150", - "measuredH": "100", - "x": "459", - "y": "1299", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "4273622", - "p0": { - "x": 0, - "y": -0.48484848484849863 - }, - "p1": { - "x": 0.5, - "y": 0 - }, - "p2": { - "x": 0, - "y": 78.78896363636386 - }, - "stroke": "dotted" - } - }, - { - "ID": "15058", - "typeID": "Canvas", - "zOrder": "111", - "w": "272", - "h": "50", - "measuredW": "100", - "measuredH": "70", - "x": "985", - "y": "1475", - "properties": { - "color": "4273622", - "borderColor": "4273622" - } - }, - { - "ID": "15059", - "typeID": "Label", - "zOrder": "112", - "measuredW": "151", - "measuredH": "28", - "x": "1045", - "y": "1486", - "properties": { - "size": "20", - "text": "More Resources", - "color": "16777215" - } - }, - { - "ID": "15060", - "typeID": "Arrow", - "zOrder": "2", - "w": "606", - "h": "1", - "measuredW": "150", - "measuredH": "100", - "x": "806", - "y": "1500", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "p0": { - "x": 0.4393939393939945, - "y": 0 - }, - "p1": { - "x": 0.499957866859274, - "y": 0.000355669369753909 - }, - "p2": { - "x": 606.8787878787878, - "y": 0 - }, - "color": "4273622" - } - }, - { - "ID": "15065", - "typeID": "Arrow", - "zOrder": "1", - "w": "1", - "h": "90", - "measuredW": "150", - "measuredH": "100", - "x": "1108", - "y": "1501", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "color": "4273622", - "stroke": "dotted", - "p0": { - "x": 0, - "y": -0.48484848484849863 - }, - "p1": { - "x": 0.5, - "y": 0 - }, - "p2": { - "x": 0, - "y": 89.20412121212144 - } - } - }, - { - "ID": "15076", - "typeID": "Arrow", - "zOrder": "0", - "w": "1", - "h": "81", - "measuredW": "150", - "measuredH": "100", - "x": "804", - "y": "1833", - "properties": { - "curvature": "0", - "leftArrow": "false", - "rightArrow": "false", - "stroke": "dotted", - "color": "10027263", - "p0": { - "x": 0, - "y": 0 - }, - "p1": { - "x": 0.49999999999999994, - "y": 0 - }, - "p2": { - "x": 0, - "y": 81.09090909090901 - } - } - }, - { - "ID": "15077", - "typeID": "TextArea", - "zOrder": "116", - "w": "438", - "h": "118", - "measuredW": "200", - "measuredH": "140", - "x": "585", - "y": "1747" - }, - { - "ID": "15078", - "typeID": "Label", - "zOrder": "117", - "measuredW": "366", - "measuredH": "25", - "x": "621", - "y": "1766", - "properties": { - "size": "17", - "text": "Continue Learning with following relevant tracks" - } - }, - { - "ID": "15079", - "typeID": "__group__", - "zOrder": "118", - "measuredW": "198", - "measuredH": "44", - "w": "198", - "h": "44", - "x": "808", - "y": "1803", - "properties": { - "controlName": "ext_link:roadmap.sh/backend" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "198", - "h": "44", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "147", - "measuredH": "25", - "x": "25", - "y": "9", - "properties": { - "size": "17", - "text": "Backend Roadmap" - } - } - ] - } - } - }, - { - "ID": "15080", - "typeID": "__group__", - "zOrder": "119", - "measuredW": "198", - "measuredH": "44", - "w": "198", - "h": "44", - "x": "600", - "y": "1803", - "properties": { - "controlName": "ext_link:roadmap.sh/frontend" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "198", - "h": "44", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "149", - "measuredH": "25", - "x": "24", - "y": "9", - "properties": { - "size": "17", - "text": "Frontend Roadmap" - } - } - ] - } - } - }, - { - "ID": "15085", - "typeID": "__group__", - "zOrder": "26", "measuredW": "461", "measuredH": "28", "w": "461", "h": "28", - "x": "291", - "y": "504", + "x": "301", + "y": "514", "properties": { - "controlName": "101-minify-css" + "controlName": "minify-css" }, "children": { "controls": { @@ -1254,17 +623,50 @@ } }, { - "ID": "15086", + "ID": "15165", "typeID": "__group__", - "zOrder": "30", + "zOrder": "29", + "measuredW": "307", + "measuredH": "28", + "w": "307", + "h": "28", + "x": "903", + "y": "1158", + "properties": { + "controlName": "concatenate-css-single-file" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "307", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Concatenate CSS into a single file" + } + } + ] + } + } + }, + { + "ID": "15167", + "typeID": "__group__", + "zOrder": "31", "measuredW": "237", "measuredH": "28", "w": "237", "h": "28", - "x": "291", - "y": "543", + "x": "301", + "y": "553", "properties": { - "controlName": "102-make-css-files-non-blocking" + "controlName": "make-css-files-non-blocking" }, "children": { "controls": { @@ -1287,17 +689,50 @@ } }, { - "ID": "15087", + "ID": "15169", "typeID": "__group__", - "zOrder": "34", + "zOrder": "33", + "measuredW": "191", + "measuredH": "28", + "w": "191", + "h": "28", + "x": "904", + "y": "1201", + "properties": { + "controlName": "remove-unused-css" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "191", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Remove unused CSS" + } + } + ] + } + } + }, + { + "ID": "15171", + "typeID": "__group__", + "zOrder": "35", "measuredW": "389", "measuredH": "28", "w": "389", "h": "28", - "x": "291", - "y": "582", + "x": "301", + "y": "592", "properties": { - "controlName": "103-inline-critical-css" + "controlName": "inline-critical-css" }, "children": { "controls": { @@ -1320,17 +755,17 @@ } }, { - "ID": "15088", + "ID": "15173", "typeID": "__group__", - "zOrder": "36", + "zOrder": "37", "measuredW": "299", "measuredH": "28", "w": "299", "h": "28", - "x": "291", - "y": "622", + "x": "301", + "y": "632", "properties": { - "controlName": "104-avoid-inline-css" + "controlName": "avoid-inline-css" }, "children": { "controls": { @@ -1353,17 +788,17 @@ } }, { - "ID": "15089", + "ID": "15175", "typeID": "__group__", - "zOrder": "38", + "zOrder": "39", "measuredW": "279", "measuredH": "28", "w": "279", "h": "28", - "x": "291", - "y": "661", + "x": "301", + "y": "671", "properties": { - "controlName": "105-analyse-stylesheets-complexity" + "controlName": "analyse-stylesheets-complexity" }, "children": { "controls": { @@ -1386,17 +821,149 @@ } }, { - "ID": "15090", + "ID": "15177", "typeID": "__group__", - "zOrder": "48", + "zOrder": "41", + "measuredW": "213", + "measuredH": "28", + "w": "213", + "h": "28", + "x": "904", + "y": "1245", + "properties": { + "controlName": "use-woff2-font-format" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "213", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Use WOFF2 font format" + } + } + ] + } + } + }, + { + "ID": "15179", + "typeID": "__group__", + "zOrder": "43", + "measuredW": "362", + "measuredH": "28", + "w": "362", + "h": "28", + "x": "905", + "y": "1285", + "properties": { + "controlName": "use-preconnect-to-load-fonts" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "362", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Use preconnect to load your fonts faster" + } + } + ] + } + } + }, + { + "ID": "15181", + "typeID": "__group__", + "zOrder": "45", + "measuredW": "326", + "measuredH": "28", + "w": "326", + "h": "28", + "x": "905", + "y": "1324", + "properties": { + "controlName": "keep-web-font-under-300k" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "326", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Keep the web font size under 300kb" + } + } + ] + } + } + }, + { + "ID": "15183", + "typeID": "__group__", + "zOrder": "47", + "measuredW": "269", + "measuredH": "28", + "w": "269", + "h": "28", + "x": "905", + "y": "1364", + "properties": { + "controlName": "prevent-flash-text" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "269", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Prevent Flash or Invisible Text" + } + } + ] + } + } + }, + { + "ID": "15185", + "typeID": "__group__", + "zOrder": "49", "measuredW": "458", "measuredH": "28", "w": "458", "h": "28", - "x": "291", - "y": "697", + "x": "301", + "y": "707", "properties": { - "controlName": "106-compress-your-images" + "controlName": "compress-your-images" }, "children": { "controls": { @@ -1419,17 +986,17 @@ } }, { - "ID": "15091", + "ID": "15187", "typeID": "__group__", - "zOrder": "50", + "zOrder": "51", "measuredW": "362", "measuredH": "28", "w": "362", "h": "28", - "x": "291", - "y": "737", + "x": "301", + "y": "747", "properties": { - "controlName": "107-choose-image-format-approprietly" + "controlName": "choose-image-format-approprietly" }, "children": { "controls": { @@ -1452,17 +1019,182 @@ } }, { - "ID": "15094", + "ID": "15189", "typeID": "__group__", - "zOrder": "62", + "zOrder": "53", + "measuredW": "477", + "measuredH": "28", + "w": "477", + "h": "28", + "x": "907", + "y": "551", + "properties": { + "controlName": "prefer-vector-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "477", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Prefer using vector image rather than bitmap images" + } + } + ] + } + } + }, + { + "ID": "15191", + "typeID": "__group__", + "zOrder": "55", + "measuredW": "501", + "measuredH": "28", + "w": "501", + "h": "28", + "x": "907", + "y": "591", + "properties": { + "controlName": "set-width-height-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "501", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Set width and height attributes on images (aspect ratio)" + } + } + ] + } + } + }, + { + "ID": "15193", + "typeID": "__group__", + "zOrder": "57", + "measuredW": "251", + "measuredH": "28", + "w": "251", + "h": "28", + "x": "907", + "y": "631", + "properties": { + "controlName": "avoid-base64-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "251", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Avoid using Base64 images" + } + } + ] + } + } + }, + { + "ID": "15195", + "typeID": "__group__", + "zOrder": "59", + "measuredW": "311", + "measuredH": "28", + "w": "311", + "h": "28", + "x": "907", + "y": "671", + "properties": { + "controlName": "load-offscreen-images-lazily" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "311", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Offscreen images are loaded lazily" + } + } + ] + } + } + }, + { + "ID": "15197", + "typeID": "__group__", + "zOrder": "61", + "measuredW": "516", + "measuredH": "28", + "w": "516", + "h": "28", + "x": "907", + "y": "711", + "properties": { + "controlName": "serve-exact-size-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "516", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Ensure to serve images that are close to your display size" + } + } + ] + } + } + }, + { + "ID": "15199", + "typeID": "__group__", + "zOrder": "63", "measuredW": "194", "measuredH": "28", "w": "194", "h": "28", - "x": "291", - "y": "778", + "x": "301", + "y": "788", "properties": { - "controlName": "108-minify-your-javascript" + "controlName": "minify-your-javascript" }, "children": { "controls": { @@ -1502,578 +1234,17 @@ } }, { - "ID": "15095", + "ID": "15201", "typeID": "__group__", - "zOrder": "66", - "measuredW": "391", - "measuredH": "28", - "w": "391", - "h": "28", - "x": "291", - "y": "817", - "properties": { - "controlName": "109-use-non-blocking-javascript" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "391", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Non Blocking JavaScript: Use async / defer" - } - } - ] - } - } - }, - { - "ID": "15096", - "typeID": "__group__", - "zOrder": "76", - "measuredW": "249", - "measuredH": "28", - "w": "249", - "h": "28", - "x": "291", - "y": "861", - "properties": { - "controlName": "110-use-https-on-your-website" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "249", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Use HTTPs on your website" - } - } - ] - } - } - }, - { - "ID": "15097", - "typeID": "__group__", - "zOrder": "78", - "measuredW": "469", - "measuredH": "28", - "w": "469", - "h": "28", - "x": "292", - "y": "902", - "properties": { - "controlName": "111-page-weight-below-1500" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "469", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Keep your page weight < 1500 KB (ideally < 500 kb)" - } - } - ] - } - } - }, - { - "ID": "15098", - "typeID": "__group__", - "zOrder": "80", - "measuredW": "350", - "measuredH": "28", - "w": "350", - "h": "28", - "x": "292", - "y": "942", - "properties": { - "controlName": "112-page-load-time-below-3s" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "350", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Keep your page load time < 3 seconds" - } - } - ] - } - } - }, - { - "ID": "15099", - "typeID": "__group__", - "zOrder": "82", - "measuredW": "380", - "measuredH": "28", - "w": "380", - "h": "28", - "x": "292", - "y": "983", - "properties": { - "controlName": "113-keep-ttfb-less-1-3s" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "380", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Keep the Time To First Byte < 1.3 seconds" - } - } - ] - } - } - }, - { - "ID": "15100", - "typeID": "__group__", - "zOrder": "88", - "measuredW": "229", - "measuredH": "28", - "w": "229", - "h": "28", - "x": "293", - "y": "1026", - "properties": { - "controlName": "114-minimize-http-requests" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "229", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Minimize HTTP Requests" - } - } - ] - } - } - }, - { - "ID": "15101", - "typeID": "__group__", - "zOrder": "90", - "measuredW": "309", - "measuredH": "28", - "w": "309", - "h": "28", - "x": "293", - "y": "1066", - "properties": { - "controlName": "115-use-same-protocol" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "309", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Serve files from the same protocol" - } - } - ] - } - } - }, - { - "ID": "15102", - "typeID": "__group__", - "zOrder": "92", - "measuredW": "367", - "measuredH": "28", - "w": "367", - "h": "28", - "x": "293", - "y": "1106", - "properties": { - "controlName": "116-avoid-404-files" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "367", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Avoid requesting unreachable files (404)" - } - } - ] - } - } - }, - { - "ID": "15103", - "typeID": "__group__", - "zOrder": "94", - "measuredW": "308", - "measuredH": "28", - "w": "308", - "h": "28", - "x": "293", - "y": "1147", - "properties": { - "controlName": "117-use-http-cache-headers" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "308", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Set HTTP cache headers properly" - } - } - ] - } - } - }, - { - "ID": "15104", - "typeID": "__group__", - "zOrder": "96", - "measuredW": "333", - "measuredH": "28", - "w": "333", - "h": "28", - "x": "293", - "y": "1187", - "properties": { - "controlName": "118-enable-compression" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "333", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "GZIP / Brotli compression is enabled" - } - } - ] - } - } - }, - { - "ID": "15105", - "typeID": "__group__", - "zOrder": "20", - "measuredW": "481", - "measuredH": "28", - "w": "481", - "h": "28", - "x": "897", - "y": "462", - "properties": { - "controlName": "119-minify-html" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "481", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Minified HTML - Remove comments and whitespaces" - } - } - ] - } - } - }, - { - "ID": "15106", - "typeID": "__group__", - "zOrder": "22", - "measuredW": "271", - "measuredH": "28", - "w": "271", - "h": "28", - "x": "897", - "y": "501", - "properties": { - "controlName": "120-use-cdn" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "271", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "text": "Use Content Delivery Network", - "size": "20" - } - } - ] - } - } - }, - { - "ID": "15107", - "typeID": "__group__", - "zOrder": "52", - "measuredW": "477", - "measuredH": "28", - "w": "477", - "h": "28", - "x": "897", - "y": "541", - "properties": { - "controlName": "121-prefer-vector-images" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "477", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Prefer using vector image rather than bitmap images" - } - } - ] - } - } - }, - { - "ID": "15108", - "typeID": "__group__", - "zOrder": "54", - "measuredW": "501", - "measuredH": "28", - "w": "501", - "h": "28", - "x": "897", - "y": "581", - "properties": { - "controlName": "122-set-width-height-images" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "501", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Set width and height attributes on images (aspect ratio)" - } - } - ] - } - } - }, - { - "ID": "15109", - "typeID": "__group__", - "zOrder": "56", - "measuredW": "251", - "measuredH": "28", - "w": "251", - "h": "28", - "x": "897", - "y": "621", - "properties": { - "controlName": "123-avoid-base64-images" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "251", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Avoid using Base64 images" - } - } - ] - } - } - }, - { - "ID": "15110", - "typeID": "__group__", - "zOrder": "58", - "measuredW": "311", - "measuredH": "28", - "w": "311", - "h": "28", - "x": "897", - "y": "661", - "properties": { - "controlName": "124-load-offscreen-images-lazily" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "311", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Offscreen images are loaded lazily" - } - } - ] - } - } - }, - { - "ID": "15111", - "typeID": "__group__", - "zOrder": "60", - "measuredW": "516", - "measuredH": "28", - "w": "516", - "h": "28", - "x": "897", - "y": "701", - "properties": { - "controlName": "125-serve-exact-size-images" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "516", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Ensure to serve images that are close to your display size" - } - } - ] - } - } - }, - { - "ID": "15112", - "typeID": "__group__", - "zOrder": "64", + "zOrder": "65", "measuredW": "450", "measuredH": "28", "w": "450", "h": "28", - "x": "897", - "y": "741", + "x": "907", + "y": "751", "properties": { - "controlName": "126-avoid-multiple-inline-js-snippets" + "controlName": "avoid-multiple-inline-js-snippets" }, "children": { "controls": { @@ -2096,17 +1267,50 @@ } }, { - "ID": "15113", + "ID": "15203", "typeID": "__group__", - "zOrder": "68", + "zOrder": "67", + "measuredW": "391", + "measuredH": "28", + "w": "391", + "h": "28", + "x": "301", + "y": "827", + "properties": { + "controlName": "use-non-blocking-javascript" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "391", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Non Blocking JavaScript: Use async / defer" + } + } + ] + } + } + }, + { + "ID": "15205", + "typeID": "__group__", + "zOrder": "69", "measuredW": "323", "measuredH": "28", "w": "323", "h": "28", - "x": "897", - "y": "782", + "x": "907", + "y": "792", "properties": { - "controlName": "127-keep-dependencies-up-to-date" + "controlName": "keep-dependencies-up-to-date" }, "children": { "controls": { @@ -2129,380 +1333,17 @@ } }, { - "ID": "15114", + "ID": "15207", "typeID": "__group__", - "zOrder": "72", - "measuredW": "502", - "measuredH": "28", - "w": "502", - "h": "28", - "x": "897", - "y": "825", - "properties": { - "controlName": "128-analyze-js-for-perf-issues" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "502", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Check for performance problems in your JavaScript files" - } - } - ] - } - } - }, - { - "ID": "15115", - "typeID": "__group__", - "zOrder": "74", - "measuredW": "481", - "measuredH": "28", - "w": "481", - "h": "28", - "x": "898", - "y": "864", - "properties": { - "controlName": "129-use-service-workers-for-caching" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "481", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Service Workers for caching / performing heavy tasks" - } - } - ] - } - } - }, - { - "ID": "15116", - "typeID": "__group__", - "zOrder": "84", - "measuredW": "391", - "measuredH": "28", - "w": "391", - "h": "28", - "x": "897", - "y": "907", - "properties": { - "controlName": "130-cookie-size-less-4096-bytes" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "391", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Cookie size should be less than 4096 bytes" - } - } - ] - } - } - }, - { - "ID": "15117", - "typeID": "__group__", - "zOrder": "86", - "measuredW": "320", - "measuredH": "28", - "w": "320", - "h": "28", - "x": "898", - "y": "950", - "properties": { - "controlName": "131-keep-cookie-count-below-20" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "320", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Keep the cookie count less than 20" - } - } - ] - } - } - }, - { - "ID": "15118", - "typeID": "__group__", - "zOrder": "24", - "measuredW": "274", - "measuredH": "28", - "w": "274", - "h": "28", - "x": "893", - "y": "1111", - "properties": { - "controlName": "132-pre-load-urls-where-possible" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "274", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Pre-load URLs where possible" - } - } - ] - } - } - }, - { - "ID": "15119", - "typeID": "__group__", - "zOrder": "28", - "measuredW": "307", - "measuredH": "28", - "w": "307", - "h": "28", - "x": "893", - "y": "1148", - "properties": { - "controlName": "133-concatenate-css-single-file" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "307", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Concatenate CSS into a single file" - } - } - ] - } - } - }, - { - "ID": "15121", - "typeID": "__group__", - "zOrder": "32", - "measuredW": "191", - "measuredH": "28", - "w": "191", - "h": "28", - "x": "894", - "y": "1191", - "properties": { - "controlName": "134-remove-unused-css" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "191", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Remove unused CSS" - } - } - ] - } - } - }, - { - "ID": "15122", - "typeID": "__group__", - "zOrder": "40", - "measuredW": "213", - "measuredH": "28", - "w": "213", - "h": "28", - "x": "894", - "y": "1235", - "properties": { - "controlName": "135-use-woff2-font-format" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "213", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Use WOFF2 font format" - } - } - ] - } - } - }, - { - "ID": "15123", - "typeID": "__group__", - "zOrder": "42", - "measuredW": "362", - "measuredH": "28", - "w": "362", - "h": "28", - "x": "895", - "y": "1275", - "properties": { - "controlName": "136-use-preconnect-to-load-fonts" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "362", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Use preconnect to load your fonts faster" - } - } - ] - } - } - }, - { - "ID": "15124", - "typeID": "__group__", - "zOrder": "44", - "measuredW": "326", - "measuredH": "28", - "w": "326", - "h": "28", - "x": "895", - "y": "1314", - "properties": { - "controlName": "137-keep-web-font-under-300k" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "326", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Keep the web font size under 300kb" - } - } - ] - } - } - }, - { - "ID": "15125", - "typeID": "__group__", - "zOrder": "46", - "measuredW": "269", - "measuredH": "28", - "w": "269", - "h": "28", - "x": "895", - "y": "1354", - "properties": { - "controlName": "138-prevent-flash-text" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "269", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Prevent Flash or Invisible Text" - } - } - ] - } - } - }, - { - "ID": "15126", - "typeID": "__group__", - "zOrder": "70", + "zOrder": "71", "measuredW": "375", "measuredH": "28", "w": "375", "h": "28", - "x": "895", - "y": "1394", + "x": "905", + "y": "1404", "properties": { - "controlName": "139-check-dependency-size" + "controlName": "check-dependency-size" }, "children": { "controls": { @@ -2525,17 +1366,600 @@ } }, { - "ID": "15127", + "ID": "15209", "typeID": "__group__", + "zOrder": "73", + "measuredW": "502", + "measuredH": "28", + "w": "502", + "h": "28", + "x": "907", + "y": "835", + "properties": { + "controlName": "analyze-js-for-perf-issues" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "502", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Check for performance problems in your JavaScript files" + } + } + ] + } + } + }, + { + "ID": "15211", + "typeID": "__group__", + "zOrder": "75", + "measuredW": "481", + "measuredH": "28", + "w": "481", + "h": "28", + "x": "908", + "y": "874", + "properties": { + "controlName": "use-service-workers-for-caching" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "481", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Service Workers for caching / performing heavy tasks" + } + } + ] + } + } + }, + { + "ID": "15213", + "typeID": "__group__", + "zOrder": "77", + "measuredW": "249", + "measuredH": "28", + "w": "249", + "h": "28", + "x": "301", + "y": "871", + "properties": { + "controlName": "use-https-on-your-website" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "249", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Use HTTPs on your website" + } + } + ] + } + } + }, + { + "ID": "15215", + "typeID": "__group__", + "zOrder": "79", + "measuredW": "469", + "measuredH": "28", + "w": "469", + "h": "28", + "x": "302", + "y": "912", + "properties": { + "controlName": "page-weight-below-1500" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "469", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Keep your page weight < 1500 KB (ideally < 500 kb)" + } + } + ] + } + } + }, + { + "ID": "15217", + "typeID": "__group__", + "zOrder": "81", + "measuredW": "350", + "measuredH": "28", + "w": "350", + "h": "28", + "x": "302", + "y": "952", + "properties": { + "controlName": "page-load-time-below-3s" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "350", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Keep your page load time < 3 seconds" + } + } + ] + } + } + }, + { + "ID": "15219", + "typeID": "__group__", + "zOrder": "83", + "measuredW": "380", + "measuredH": "28", + "w": "380", + "h": "28", + "x": "302", + "y": "993", + "properties": { + "controlName": "keep-ttfb-less-1-3s" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "380", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Keep the Time To First Byte < 1.3 seconds" + } + } + ] + } + } + }, + { + "ID": "15221", + "typeID": "__group__", + "zOrder": "85", + "measuredW": "391", + "measuredH": "28", + "w": "391", + "h": "28", + "x": "907", + "y": "917", + "properties": { + "controlName": "cookie-size-less-4096-bytes" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "391", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Cookie size should be less than 4096 bytes" + } + } + ] + } + } + }, + { + "ID": "15223", + "typeID": "__group__", + "zOrder": "87", + "measuredW": "320", + "measuredH": "28", + "w": "320", + "h": "28", + "x": "908", + "y": "960", + "properties": { + "controlName": "keep-cookie-count-below-20" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "320", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Keep the cookie count less than 20" + } + } + ] + } + } + }, + { + "ID": "15225", + "typeID": "__group__", + "zOrder": "89", + "measuredW": "229", + "measuredH": "28", + "w": "229", + "h": "28", + "x": "303", + "y": "1036", + "properties": { + "controlName": "minimize-http-requests" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "229", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Minimize HTTP Requests" + } + } + ] + } + } + }, + { + "ID": "15227", + "typeID": "__group__", + "zOrder": "91", + "measuredW": "309", + "measuredH": "28", + "w": "309", + "h": "28", + "x": "303", + "y": "1076", + "properties": { + "controlName": "use-same-protocol" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "309", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Serve files from the same protocol" + } + } + ] + } + } + }, + { + "ID": "15229", + "typeID": "__group__", + "zOrder": "93", + "measuredW": "367", + "measuredH": "28", + "w": "367", + "h": "28", + "x": "303", + "y": "1116", + "properties": { + "controlName": "avoid-404-files" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "367", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Avoid requesting unreachable files (404)" + } + } + ] + } + } + }, + { + "ID": "15231", + "typeID": "__group__", + "zOrder": "95", + "measuredW": "308", + "measuredH": "28", + "w": "308", + "h": "28", + "x": "303", + "y": "1157", + "properties": { + "controlName": "use-http-cache-headers" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "308", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "Set HTTP cache headers properly" + } + } + ] + } + } + }, + { + "ID": "15233", + "typeID": "__group__", + "zOrder": "97", + "measuredW": "333", + "measuredH": "28", + "w": "333", + "h": "28", + "x": "303", + "y": "1197", + "properties": { + "controlName": "enable-compression" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", + "measuredW": "333", + "measuredH": "28", + "x": "0", + "y": "0", + "properties": { + "size": "20", + "text": "GZIP / Brotli compression is enabled" + } + } + ] + } + } + }, + { + "ID": "15234", + "typeID": "Label", + "zOrder": "98", + "measuredW": "111", + "measuredH": "28", + "x": "414", + "y": "400", + "properties": { + "text": "High Priority", + "size": "20" + } + }, + { + "ID": "15235", + "typeID": "Arrow", + "zOrder": "99", + "w": "1", + "h": "1583", + "measuredW": "150", + "measuredH": "100", + "x": "814", + "y": "287", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "p0": { + "x": 0, + "y": -0.48484848484849863 + }, + "p1": { + "x": 0.49999999999999994, + "y": 0 + }, + "p2": { + "x": 0, + "y": 1582.047272727273 + }, + "color": "4273622" + } + }, + { + "ID": "15236", + "typeID": "Arrow", + "zOrder": "100", + "w": "630", + "h": "1", + "measuredW": "150", + "measuredH": "100", + "x": "181", + "y": "1296", + "properties": { + "curvature": "0", + "leftArrow": "false", + "rightArrow": "false", + "color": "4273622", + "p0": { + "x": 0.48416950727948915, + "y": 0 + }, + "p1": { + "x": 0.4997238005050516, + "y": 0.00038783741855417725 + }, + "p2": { + "x": 630.4475453407811, + "y": 0 + } + } + }, + { + "ID": "15237", + "typeID": "Canvas", + "zOrder": "101", + "w": "202", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "1007", + "y": "387", + "properties": { + "color": "16776960" + } + }, + { + "ID": "15238", + "typeID": "Label", + "zOrder": "102", + "measuredW": "142", + "measuredH": "28", + "x": "1037", + "y": "398", + "properties": { + "size": "20", + "text": "Medium Priority" + } + }, + { + "ID": "15239", + "typeID": "Canvas", + "zOrder": "103", + "w": "202", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "1007", + "y": "1027", + "properties": { + "color": "16776960" + } + }, + { + "ID": "15240", + "typeID": "Label", + "zOrder": "104", + "measuredW": "104", + "measuredH": "28", + "x": "1056", + "y": "1038", + "properties": { + "size": "20", + "text": "Low Priority" + } + }, + { + "ID": "15241", + "typeID": "Canvas", + "zOrder": "105", + "w": "242", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "349", + "y": "1270", + "properties": { + "color": "4273622", + "borderColor": "4273622" + } + }, + { + "ID": "15242", + "typeID": "Label", "zOrder": "106", + "measuredW": "169", + "measuredH": "28", + "x": "385", + "y": "1281", + "properties": { + "size": "20", + "text": "Performance Tools", + "color": "16777215" + } + }, + { + "ID": "15243", + "typeID": "__group__", + "zOrder": "107", "measuredW": "242", "measuredH": "44", "w": "242", "h": "44", - "x": "339", - "y": "1355", + "x": "349", + "y": "1365", "properties": { - "controlName": "140-page-speed-insights" + "controlName": "page-speed-insights" }, "children": { "controls": { @@ -2572,17 +1996,17 @@ } }, { - "ID": "15128", + "ID": "15244", "typeID": "__group__", - "zOrder": "107", + "zOrder": "108", "measuredW": "242", "measuredH": "44", "w": "242", "h": "44", - "x": "339", - "y": "1404", + "x": "349", + "y": "1414", "properties": { - "controlName": "141-lighthouse" + "controlName": "lighthouse" }, "children": { "controls": { @@ -2619,17 +2043,17 @@ } }, { - "ID": "15129", + "ID": "15245", "typeID": "__group__", - "zOrder": "108", + "zOrder": "109", "measuredW": "242", "measuredH": "44", "w": "242", "h": "44", - "x": "339", - "y": "1452", + "x": "349", + "y": "1462", "properties": { - "controlName": "142-web-page-test" + "controlName": "web-page-test" }, "children": { "controls": { @@ -2666,17 +2090,17 @@ } }, { - "ID": "15130", + "ID": "15246", "typeID": "__group__", - "zOrder": "109", + "zOrder": "110", "measuredW": "242", "measuredH": "44", "w": "242", "h": "44", - "x": "339", - "y": "1500", + "x": "349", + "y": "1510", "properties": { - "controlName": "143-chrome-dev-tools" + "controlName": "chrome-dev-tools" }, "children": { "controls": { @@ -2713,17 +2137,17 @@ } }, { - "ID": "15131", + "ID": "15247", "typeID": "__group__", - "zOrder": "110", + "zOrder": "111", "measuredW": "242", "measuredH": "44", "w": "242", "h": "44", - "x": "339", - "y": "1548", + "x": "349", + "y": "1558", "properties": { - "controlName": "144-bundlephobia" + "controlName": "bundlephobia" }, "children": { "controls": { @@ -2760,64 +2184,46 @@ } }, { - "ID": "15132", - "typeID": "__group__", - "zOrder": "115", - "measuredW": "242", - "measuredH": "44", - "w": "242", - "h": "44", - "x": "339", - "y": "1596", + "ID": "15248", + "typeID": "Canvas", + "zOrder": "112", + "w": "272", + "h": "50", + "measuredW": "100", + "measuredH": "70", + "x": "995", + "y": "1485", "properties": { - "controlName": "145-squoosh-ap" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "242", - "h": "44", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0", - "properties": { - "color": "16770457" - } - }, - { - "ID": "1", - "typeID": "Label", - "zOrder": "1", - "measuredW": "100", - "measuredH": "25", - "x": "71", - "y": "9", - "properties": { - "size": "17", - "text": "Squoosh.app" - } - } - ] - } + "color": "4273622", + "borderColor": "4273622" } }, { - "ID": "15133", - "typeID": "__group__", + "ID": "15249", + "typeID": "Label", "zOrder": "113", + "measuredW": "151", + "measuredH": "28", + "x": "1055", + "y": "1496", + "properties": { + "size": "20", + "text": "More Resources", + "color": "16777215" + } + }, + { + "ID": "15250", + "typeID": "__group__", + "zOrder": "114", "measuredW": "272", "measuredH": "44", "w": "272", "h": "44", - "x": "985", - "y": "1570", + "x": "995", + "y": "1580", "properties": { - "controlName": "146-framework-guides" + "controlName": "framework-guides" }, "children": { "controls": { @@ -2854,17 +2260,17 @@ } }, { - "ID": "15134", + "ID": "15251", "typeID": "__group__", - "zOrder": "114", + "zOrder": "115", "measuredW": "272", "measuredH": "44", "w": "272", "h": "44", - "x": "985", - "y": "1619", + "x": "995", + "y": "1629", "properties": { - "controlName": "147-recommended-guides" + "controlName": "recommended-guides" }, "children": { "controls": { @@ -2901,85 +2307,1442 @@ } }, { - "ID": "15135", + "ID": "15252", "typeID": "__group__", - "zOrder": "7", - "measuredW": "297", - "measuredH": "30", - "w": "297", - "h": "30", - "x": "245", - "y": "461", + "zOrder": "116", + "measuredW": "242", + "measuredH": "44", + "w": "242", + "h": "44", + "x": "349", + "y": "1606", + "properties": { + "controlName": "squoosh-ap" + }, "children": { "controls": { "control": [ { "ID": "0", - "typeID": "__group__", + "typeID": "TextArea", "zOrder": "0", - "measuredW": "29", - "measuredH": "30", - "w": "29", - "h": "30", + "w": "242", + "h": "44", + "measuredW": "200", + "measuredH": "140", "x": "0", "y": "0", "properties": { - "controlName": "check:minimize-iframes" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "TextArea", - "zOrder": "0", - "w": "29", - "h": "30", - "measuredW": "200", - "measuredH": "140", - "x": "0", - "y": "0" - } - ] - } + "color": "16770457" } }, { "ID": "1", - "typeID": "__group__", + "typeID": "Label", "zOrder": "1", + "measuredW": "100", + "measuredH": "25", + "x": "71", + "y": "9", + "properties": { + "size": "17", + "text": "Squoosh.app" + } + } + ] + } + } + }, + { + "ID": "15253", + "typeID": "TextArea", + "zOrder": "117", + "w": "438", + "h": "118", + "measuredW": "200", + "measuredH": "140", + "x": "595", + "y": "1757" + }, + { + "ID": "15254", + "typeID": "Label", + "zOrder": "118", + "measuredW": "366", + "measuredH": "25", + "x": "631", + "y": "1776", + "properties": { + "size": "17", + "text": "Continue Learning with following relevant tracks" + } + }, + { + "ID": "15255", + "typeID": "__group__", + "zOrder": "119", + "measuredW": "198", + "measuredH": "44", + "w": "198", + "h": "44", + "x": "818", + "y": "1813", + "properties": { + "controlName": "ext_link:roadmap.sh/backend" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "198", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "147", + "measuredH": "25", + "x": "25", + "y": "9", + "properties": { + "size": "17", + "text": "Backend Roadmap" + } + } + ] + } + } + }, + { + "ID": "15256", + "typeID": "__group__", + "zOrder": "120", + "measuredW": "198", + "measuredH": "44", + "w": "198", + "h": "44", + "x": "610", + "y": "1813", + "properties": { + "controlName": "ext_link:roadmap.sh/frontend" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "198", + "h": "44", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0", + "properties": { + "color": "16770457" + } + }, + { + "ID": "1", + "typeID": "Label", + "zOrder": "1", + "measuredW": "149", + "measuredH": "25", + "x": "24", + "y": "9", + "properties": { + "size": "17", + "text": "Frontend Roadmap" + } + } + ] + } + } + }, + { + "ID": "15258", + "typeID": "__group__", + "zOrder": "8", + "measuredW": "251", + "measuredH": "28", + "w": "251", + "h": "28", + "x": "301", + "y": "472", + "properties": { + "controlName": "minimize-iframe-count" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "Label", + "zOrder": "0", "measuredW": "251", "measuredH": "28", - "w": "251", - "h": "28", - "x": "46", - "y": "1", + "x": "0", + "y": "0", "properties": { - "controlName": "100-minimize-iframe-count" - }, - "children": { - "controls": { - "control": [ - { - "ID": "0", - "typeID": "Label", - "zOrder": "0", - "measuredW": "251", - "measuredH": "28", - "x": "0", - "y": "0", - "properties": { - "size": "20", - "text": "Minimize number of iframes" - } - } - ] - } + "size": "20", + "text": "Minimize number of iframes" } } ] } } + }, + { + "ID": "15261", + "typeID": "__group__", + "zOrder": "7", + "measuredW": "30", + "measuredH": "30", + "w": "30", + "h": "30", + "x": "255", + "y": "471", + "properties": { + "controlName": "check:minimize-iframe-count" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "30", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15262", + "typeID": "__group__", + "zOrder": "26", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "511", + "properties": { + "controlName": "check:minify-css" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15263", + "typeID": "__group__", + "zOrder": "30", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "550", + "properties": { + "controlName": "check:make-css-files-non-blocking" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15264", + "typeID": "__group__", + "zOrder": "34", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "589", + "properties": { + "controlName": "check:inline-critical-css" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15265", + "typeID": "__group__", + "zOrder": "36", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "629", + "properties": { + "controlName": "check:avoid-inline-css" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15266", + "typeID": "__group__", + "zOrder": "38", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "668", + "properties": { + "controlName": "check:analyse-stylesheets-complexity" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15267", + "typeID": "__group__", + "zOrder": "48", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "706", + "properties": { + "controlName": "check:compress-your-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15268", + "typeID": "__group__", + "zOrder": "50", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "746", + "properties": { + "controlName": "check:choose-image-format-approprietly" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15269", + "typeID": "__group__", + "zOrder": "62", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "787", + "properties": { + "controlName": "check:minify-your-javascript" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15270", + "typeID": "__group__", + "zOrder": "66", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "826", + "properties": { + "controlName": "check:use-non-blocking-javascript" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15271", + "typeID": "__group__", + "zOrder": "76", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "870", + "properties": { + "controlName": "check:use-https-on-your-website" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15272", + "typeID": "__group__", + "zOrder": "78", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "911", + "properties": { + "controlName": "check:page-weight-below-1500" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15273", + "typeID": "__group__", + "zOrder": "80", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "951", + "properties": { + "controlName": "check:page-load-time-below-3s" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15274", + "typeID": "__group__", + "zOrder": "82", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "992", + "properties": { + "controlName": "check:keep-ttfb-less-1-3s" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15275", + "typeID": "__group__", + "zOrder": "88", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "1035", + "properties": { + "controlName": "check:minimize-http-requests" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15276", + "typeID": "__group__", + "zOrder": "90", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "1075", + "properties": { + "controlName": "check:use-same-protocol" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15277", + "typeID": "__group__", + "zOrder": "92", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "1115", + "properties": { + "controlName": "check:avoid-404-files" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15278", + "typeID": "__group__", + "zOrder": "94", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "1156", + "properties": { + "controlName": "check:use-http-cache-headers" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15279", + "typeID": "__group__", + "zOrder": "96", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "255", + "y": "1196", + "properties": { + "controlName": "check:enable-compression" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15280", + "typeID": "__group__", + "zOrder": "20", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "471", + "properties": { + "controlName": "check:minify-html" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15282", + "typeID": "__group__", + "zOrder": "22", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "510", + "properties": { + "controlName": "check:use-cdn" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15283", + "typeID": "__group__", + "zOrder": "52", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "550", + "properties": { + "controlName": "check:prefer-vector-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15284", + "typeID": "__group__", + "zOrder": "54", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "590", + "properties": { + "controlName": "check:set-width-height-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15285", + "typeID": "__group__", + "zOrder": "56", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "630", + "properties": { + "controlName": "check:avoid-base64-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15286", + "typeID": "__group__", + "zOrder": "58", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "670", + "properties": { + "controlName": "check:load-offscreen-images-lazily" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15287", + "typeID": "__group__", + "zOrder": "60", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "710", + "properties": { + "controlName": "check:serve-exact-size-images" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15288", + "typeID": "__group__", + "zOrder": "64", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "750", + "properties": { + "controlName": "check:avoid-multiple-inline-js-snippets" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15289", + "typeID": "__group__", + "zOrder": "68", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "791", + "properties": { + "controlName": "check:keep-dependencies-up-to-date" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15290", + "typeID": "__group__", + "zOrder": "72", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "834", + "properties": { + "controlName": "check:analyze-js-for-perf-issues" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15291", + "typeID": "__group__", + "zOrder": "74", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "875", + "properties": { + "controlName": "check:use-service-workers-for-caching" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15292", + "typeID": "__group__", + "zOrder": "84", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "859", + "y": "916", + "properties": { + "controlName": "check:cookie-size-less-4096-bytes" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15293", + "typeID": "__group__", + "zOrder": "86", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "959", + "properties": { + "controlName": "check:keep-cookie-count-below-20" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15294", + "typeID": "__group__", + "zOrder": "24", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "1118", + "properties": { + "controlName": "check:pre-load-urls-where-possible" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15295", + "typeID": "__group__", + "zOrder": "28", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "1157", + "properties": { + "controlName": "check:concatenate-css-single-file" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15296", + "typeID": "__group__", + "zOrder": "32", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "1200", + "properties": { + "controlName": "check:remove-unused-css" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15297", + "typeID": "__group__", + "zOrder": "40", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "1242", + "properties": { + "controlName": "check:use-woff2-font-format" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15298", + "typeID": "__group__", + "zOrder": "42", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "1282", + "properties": { + "controlName": "check:use-preconnect-to-load-fonts" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15299", + "typeID": "__group__", + "zOrder": "44", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "1321", + "properties": { + "controlName": "check:keep-web-font-under-300k" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15300", + "typeID": "__group__", + "zOrder": "46", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "1361", + "properties": { + "controlName": "check:prevent-flash-text" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } + }, + { + "ID": "15301", + "typeID": "__group__", + "zOrder": "70", + "measuredW": "29", + "measuredH": "30", + "w": "29", + "h": "30", + "x": "860", + "y": "1401", + "properties": { + "controlName": "check:check-dependency-size" + }, + "children": { + "controls": { + "control": [ + { + "ID": "0", + "typeID": "TextArea", + "zOrder": "0", + "w": "29", + "h": "30", + "measuredW": "200", + "measuredH": "140", + "x": "0", + "y": "0" + } + ] + } + } } ] }, @@ -2993,8 +3756,8 @@ "resourceID": "13C27694-0370-442D-AECD-EFA2B687DD15", "mockupH": "1790", "mockupW": "1361", - "measuredW": "1532", - "measuredH": "1914", + "measuredW": "1542", + "measuredH": "1924", "version": "1.0" }, "groupOffset": { diff --git a/src/best-practices/frontend-performance/content/105-analyse-stylesheets-complexity.md b/src/best-practices/frontend-performance/content/analyse-stylesheets-complexity.md similarity index 100% rename from src/best-practices/frontend-performance/content/105-analyse-stylesheets-complexity.md rename to src/best-practices/frontend-performance/content/analyse-stylesheets-complexity.md diff --git a/src/best-practices/frontend-performance/content/128-analyze-js-for-perf-issues.md b/src/best-practices/frontend-performance/content/analyze-js-for-perf-issues.md similarity index 100% rename from src/best-practices/frontend-performance/content/128-analyze-js-for-perf-issues.md rename to src/best-practices/frontend-performance/content/analyze-js-for-perf-issues.md diff --git a/src/best-practices/frontend-performance/content/116-avoid-404-files.md b/src/best-practices/frontend-performance/content/avoid-404-files.md similarity index 100% rename from src/best-practices/frontend-performance/content/116-avoid-404-files.md rename to src/best-practices/frontend-performance/content/avoid-404-files.md diff --git a/src/best-practices/frontend-performance/content/123-avoid-base64-images.md b/src/best-practices/frontend-performance/content/avoid-base64-images.md similarity index 100% rename from src/best-practices/frontend-performance/content/123-avoid-base64-images.md rename to src/best-practices/frontend-performance/content/avoid-base64-images.md diff --git a/src/best-practices/frontend-performance/content/104-avoid-inline-css.md b/src/best-practices/frontend-performance/content/avoid-inline-css.md similarity index 100% rename from src/best-practices/frontend-performance/content/104-avoid-inline-css.md rename to src/best-practices/frontend-performance/content/avoid-inline-css.md diff --git a/src/best-practices/frontend-performance/content/126-avoid-multiple-inline-js-snippets.md b/src/best-practices/frontend-performance/content/avoid-multiple-inline-js-snippets.md similarity index 100% rename from src/best-practices/frontend-performance/content/126-avoid-multiple-inline-js-snippets.md rename to src/best-practices/frontend-performance/content/avoid-multiple-inline-js-snippets.md diff --git a/src/best-practices/frontend-performance/content/144-bundlephobia.md b/src/best-practices/frontend-performance/content/bundlephobia.md similarity index 100% rename from src/best-practices/frontend-performance/content/144-bundlephobia.md rename to src/best-practices/frontend-performance/content/bundlephobia.md diff --git a/src/best-practices/frontend-performance/content/139-check-dependency-size.md b/src/best-practices/frontend-performance/content/check-dependency-size.md similarity index 100% rename from src/best-practices/frontend-performance/content/139-check-dependency-size.md rename to src/best-practices/frontend-performance/content/check-dependency-size.md diff --git a/src/best-practices/frontend-performance/content/107-choose-image-format-approprietly.md b/src/best-practices/frontend-performance/content/choose-image-format-approprietly.md similarity index 100% rename from src/best-practices/frontend-performance/content/107-choose-image-format-approprietly.md rename to src/best-practices/frontend-performance/content/choose-image-format-approprietly.md diff --git a/src/best-practices/frontend-performance/content/143-chrome-dev-tools.md b/src/best-practices/frontend-performance/content/chrome-dev-tools.md similarity index 100% rename from src/best-practices/frontend-performance/content/143-chrome-dev-tools.md rename to src/best-practices/frontend-performance/content/chrome-dev-tools.md diff --git a/src/best-practices/frontend-performance/content/106-compress-your-images.md b/src/best-practices/frontend-performance/content/compress-your-images.md similarity index 100% rename from src/best-practices/frontend-performance/content/106-compress-your-images.md rename to src/best-practices/frontend-performance/content/compress-your-images.md diff --git a/src/best-practices/frontend-performance/content/133-concatenate-css-single-file.md b/src/best-practices/frontend-performance/content/concatenate-css-single-file.md similarity index 100% rename from src/best-practices/frontend-performance/content/133-concatenate-css-single-file.md rename to src/best-practices/frontend-performance/content/concatenate-css-single-file.md diff --git a/src/best-practices/frontend-performance/content/130-cookie-size-less-4096-bytes.md b/src/best-practices/frontend-performance/content/cookie-size-less-4096-bytes.md similarity index 100% rename from src/best-practices/frontend-performance/content/130-cookie-size-less-4096-bytes.md rename to src/best-practices/frontend-performance/content/cookie-size-less-4096-bytes.md diff --git a/src/best-practices/frontend-performance/content/118-enable-compression.md b/src/best-practices/frontend-performance/content/enable-compression.md similarity index 100% rename from src/best-practices/frontend-performance/content/118-enable-compression.md rename to src/best-practices/frontend-performance/content/enable-compression.md diff --git a/src/best-practices/frontend-performance/content/146-framework-guides.md b/src/best-practices/frontend-performance/content/framework-guides.md similarity index 100% rename from src/best-practices/frontend-performance/content/146-framework-guides.md rename to src/best-practices/frontend-performance/content/framework-guides.md diff --git a/src/best-practices/frontend-performance/content/103-inline-critical-css.md b/src/best-practices/frontend-performance/content/inline-critical-css.md similarity index 100% rename from src/best-practices/frontend-performance/content/103-inline-critical-css.md rename to src/best-practices/frontend-performance/content/inline-critical-css.md diff --git a/src/best-practices/frontend-performance/content/131-keep-cookie-count-below-20.md b/src/best-practices/frontend-performance/content/keep-cookie-count-below-20.md similarity index 100% rename from src/best-practices/frontend-performance/content/131-keep-cookie-count-below-20.md rename to src/best-practices/frontend-performance/content/keep-cookie-count-below-20.md diff --git a/src/best-practices/frontend-performance/content/127-keep-dependencies-up-to-date.md b/src/best-practices/frontend-performance/content/keep-dependencies-up-to-date.md similarity index 100% rename from src/best-practices/frontend-performance/content/127-keep-dependencies-up-to-date.md rename to src/best-practices/frontend-performance/content/keep-dependencies-up-to-date.md diff --git a/src/best-practices/frontend-performance/content/113-keep-ttfb-less-1-3s.md b/src/best-practices/frontend-performance/content/keep-ttfb-less-1-3s.md similarity index 100% rename from src/best-practices/frontend-performance/content/113-keep-ttfb-less-1-3s.md rename to src/best-practices/frontend-performance/content/keep-ttfb-less-1-3s.md diff --git a/src/best-practices/frontend-performance/content/137-keep-web-font-under-300k.md b/src/best-practices/frontend-performance/content/keep-web-font-under-300k.md similarity index 100% rename from src/best-practices/frontend-performance/content/137-keep-web-font-under-300k.md rename to src/best-practices/frontend-performance/content/keep-web-font-under-300k.md diff --git a/src/best-practices/frontend-performance/content/141-lighthouse.md b/src/best-practices/frontend-performance/content/lighthouse.md similarity index 100% rename from src/best-practices/frontend-performance/content/141-lighthouse.md rename to src/best-practices/frontend-performance/content/lighthouse.md diff --git a/src/best-practices/frontend-performance/content/124-load-offscreen-images-lazily.md b/src/best-practices/frontend-performance/content/load-offscreen-images-lazily.md similarity index 100% rename from src/best-practices/frontend-performance/content/124-load-offscreen-images-lazily.md rename to src/best-practices/frontend-performance/content/load-offscreen-images-lazily.md diff --git a/src/best-practices/frontend-performance/content/102-make-css-files-non-blocking.md b/src/best-practices/frontend-performance/content/make-css-files-non-blocking.md similarity index 100% rename from src/best-practices/frontend-performance/content/102-make-css-files-non-blocking.md rename to src/best-practices/frontend-performance/content/make-css-files-non-blocking.md diff --git a/src/best-practices/frontend-performance/content/101-minify-css.md b/src/best-practices/frontend-performance/content/minify-css.md similarity index 100% rename from src/best-practices/frontend-performance/content/101-minify-css.md rename to src/best-practices/frontend-performance/content/minify-css.md diff --git a/src/best-practices/frontend-performance/content/119-minify-html.md b/src/best-practices/frontend-performance/content/minify-html.md similarity index 100% rename from src/best-practices/frontend-performance/content/119-minify-html.md rename to src/best-practices/frontend-performance/content/minify-html.md diff --git a/src/best-practices/frontend-performance/content/108-minify-your-javascript.md b/src/best-practices/frontend-performance/content/minify-your-javascript.md similarity index 100% rename from src/best-practices/frontend-performance/content/108-minify-your-javascript.md rename to src/best-practices/frontend-performance/content/minify-your-javascript.md diff --git a/src/best-practices/frontend-performance/content/114-minimize-http-requests.md b/src/best-practices/frontend-performance/content/minimize-http-requests.md similarity index 100% rename from src/best-practices/frontend-performance/content/114-minimize-http-requests.md rename to src/best-practices/frontend-performance/content/minimize-http-requests.md diff --git a/src/best-practices/frontend-performance/content/100-minimize-iframe-count.md b/src/best-practices/frontend-performance/content/minimize-iframe-count.md similarity index 100% rename from src/best-practices/frontend-performance/content/100-minimize-iframe-count.md rename to src/best-practices/frontend-performance/content/minimize-iframe-count.md diff --git a/src/best-practices/frontend-performance/content/112-page-load-time-below-3s.md b/src/best-practices/frontend-performance/content/page-load-time-below-3s.md similarity index 100% rename from src/best-practices/frontend-performance/content/112-page-load-time-below-3s.md rename to src/best-practices/frontend-performance/content/page-load-time-below-3s.md diff --git a/src/best-practices/frontend-performance/content/140-page-speed-insights.md b/src/best-practices/frontend-performance/content/page-speed-insights.md similarity index 100% rename from src/best-practices/frontend-performance/content/140-page-speed-insights.md rename to src/best-practices/frontend-performance/content/page-speed-insights.md diff --git a/src/best-practices/frontend-performance/content/111-page-weight-below-1500.md b/src/best-practices/frontend-performance/content/page-weight-below-1500.md similarity index 100% rename from src/best-practices/frontend-performance/content/111-page-weight-below-1500.md rename to src/best-practices/frontend-performance/content/page-weight-below-1500.md diff --git a/src/best-practices/frontend-performance/content/132-pre-load-urls-where-possible.md b/src/best-practices/frontend-performance/content/pre-load-urls-where-possible.md similarity index 100% rename from src/best-practices/frontend-performance/content/132-pre-load-urls-where-possible.md rename to src/best-practices/frontend-performance/content/pre-load-urls-where-possible.md diff --git a/src/best-practices/frontend-performance/content/121-prefer-vector-images.md b/src/best-practices/frontend-performance/content/prefer-vector-images.md similarity index 100% rename from src/best-practices/frontend-performance/content/121-prefer-vector-images.md rename to src/best-practices/frontend-performance/content/prefer-vector-images.md diff --git a/src/best-practices/frontend-performance/content/138-prevent-flash-text.md b/src/best-practices/frontend-performance/content/prevent-flash-text.md similarity index 100% rename from src/best-practices/frontend-performance/content/138-prevent-flash-text.md rename to src/best-practices/frontend-performance/content/prevent-flash-text.md diff --git a/src/best-practices/frontend-performance/content/147-recommended-guides.md b/src/best-practices/frontend-performance/content/recommended-guides.md similarity index 100% rename from src/best-practices/frontend-performance/content/147-recommended-guides.md rename to src/best-practices/frontend-performance/content/recommended-guides.md diff --git a/src/best-practices/frontend-performance/content/134-remove-unused-css.md b/src/best-practices/frontend-performance/content/remove-unused-css.md similarity index 100% rename from src/best-practices/frontend-performance/content/134-remove-unused-css.md rename to src/best-practices/frontend-performance/content/remove-unused-css.md diff --git a/src/best-practices/frontend-performance/content/125-serve-exact-size-images.md b/src/best-practices/frontend-performance/content/serve-exact-size-images.md similarity index 100% rename from src/best-practices/frontend-performance/content/125-serve-exact-size-images.md rename to src/best-practices/frontend-performance/content/serve-exact-size-images.md diff --git a/src/best-practices/frontend-performance/content/122-set-width-height-images.md b/src/best-practices/frontend-performance/content/set-width-height-images.md similarity index 100% rename from src/best-practices/frontend-performance/content/122-set-width-height-images.md rename to src/best-practices/frontend-performance/content/set-width-height-images.md diff --git a/src/best-practices/frontend-performance/content/145-squoosh-ap.md b/src/best-practices/frontend-performance/content/squoosh-ap.md similarity index 100% rename from src/best-practices/frontend-performance/content/145-squoosh-ap.md rename to src/best-practices/frontend-performance/content/squoosh-ap.md diff --git a/src/best-practices/frontend-performance/content/120-use-cdn.md b/src/best-practices/frontend-performance/content/use-cdn.md similarity index 100% rename from src/best-practices/frontend-performance/content/120-use-cdn.md rename to src/best-practices/frontend-performance/content/use-cdn.md diff --git a/src/best-practices/frontend-performance/content/117-use-http-cache-headers.md b/src/best-practices/frontend-performance/content/use-http-cache-headers.md similarity index 100% rename from src/best-practices/frontend-performance/content/117-use-http-cache-headers.md rename to src/best-practices/frontend-performance/content/use-http-cache-headers.md diff --git a/src/best-practices/frontend-performance/content/110-use-https-on-your-website.md b/src/best-practices/frontend-performance/content/use-https-on-your-website.md similarity index 100% rename from src/best-practices/frontend-performance/content/110-use-https-on-your-website.md rename to src/best-practices/frontend-performance/content/use-https-on-your-website.md diff --git a/src/best-practices/frontend-performance/content/109-use-non-blocking-javascript.md b/src/best-practices/frontend-performance/content/use-non-blocking-javascript.md similarity index 100% rename from src/best-practices/frontend-performance/content/109-use-non-blocking-javascript.md rename to src/best-practices/frontend-performance/content/use-non-blocking-javascript.md diff --git a/src/best-practices/frontend-performance/content/136-use-preconnect-to-load-fonts.md b/src/best-practices/frontend-performance/content/use-preconnect-to-load-fonts.md similarity index 100% rename from src/best-practices/frontend-performance/content/136-use-preconnect-to-load-fonts.md rename to src/best-practices/frontend-performance/content/use-preconnect-to-load-fonts.md diff --git a/src/best-practices/frontend-performance/content/115-use-same-protocol.md b/src/best-practices/frontend-performance/content/use-same-protocol.md similarity index 100% rename from src/best-practices/frontend-performance/content/115-use-same-protocol.md rename to src/best-practices/frontend-performance/content/use-same-protocol.md diff --git a/src/best-practices/frontend-performance/content/129-use-service-workers-for-caching.md b/src/best-practices/frontend-performance/content/use-service-workers-for-caching.md similarity index 100% rename from src/best-practices/frontend-performance/content/129-use-service-workers-for-caching.md rename to src/best-practices/frontend-performance/content/use-service-workers-for-caching.md diff --git a/src/best-practices/frontend-performance/content/135-use-woff2-font-format.md b/src/best-practices/frontend-performance/content/use-woff2-font-format.md similarity index 100% rename from src/best-practices/frontend-performance/content/135-use-woff2-font-format.md rename to src/best-practices/frontend-performance/content/use-woff2-font-format.md diff --git a/src/best-practices/frontend-performance/content/142-web-page-test.md b/src/best-practices/frontend-performance/content/web-page-test.md similarity index 100% rename from src/best-practices/frontend-performance/content/142-web-page-test.md rename to src/best-practices/frontend-performance/content/web-page-test.md