diff --git a/app/node_views/results.html b/app/node_views/results.html index 6ed9c28..07c7e3c 100644 --- a/app/node_views/results.html +++ b/app/node_views/results.html @@ -21,7 +21,7 @@
New test
- +
@@ -116,7 +116,7 @@
-

Javascript Spaghetti Timeline

+

Javascript Timeline

This graph gives a quick view of when the Javascript interactions with the DOM occur during the loading of the page.

@@ -127,6 +127,8 @@ class="interval" ng-class="{ domCreation: $index * timelineIntervalDuration < phantomasResults.metrics.domInteractive, + domInteractive: $index * timelineIntervalDuration >= phantomasResults.metrics.domInteractive + && $index * timelineIntervalDuration < phantomasResults.metrics.domContentLoaded, domContentLoaded: $index * timelineIntervalDuration >= phantomasResults.metrics.domContentLoaded && $index * timelineIntervalDuration < phantomasResults.metrics.domContentLoadedEnd, domContentLoadedEnd: $index * timelineIntervalDuration >= phantomasResults.metrics.domContentLoadedEnd @@ -145,12 +147,14 @@
DOM creation
+
DOM interactive
DOM content loaded event
Page completion
Page is complete
Executing Javascript and DOM queries here is a bad practice and slows down the DOM construction.
+
Some frameworks do things here, but it's not reliable and should be avoided.
Also known as "document ready". This is where you should execute top-priority scripts, like binding action buttons or launch a video player.
Here you can execute mid-priority tasks. Loading a script with createElement('script') is one way to do so.
The page is considered loaded, it's time for low priority things : trackers, social plugins, easter egg...
@@ -158,7 +162,7 @@
-

Javascript Spaghetti Profiler

+

Javascript Profiler

The table below shows the interactions between Javascript and the DOM. It is usefull to understand what's going on when the page loads.
@@ -277,6 +281,8 @@

\ No newline at end of file + \ No newline at end of file diff --git a/app/public/styles/less/icons.less b/app/public/styles/less/icons.less index f32401e..d1f20b7 100644 --- a/app/public/styles/less/icons.less +++ b/app/public/styles/less/icons.less @@ -1,24 +1,24 @@ @list-font-family: "fontsmith-icons"; -@list-value: "\e003"; -@list: '"fontsmith-icons"' '"\\e003"'; -@drawer3-font-family: "fontsmith-icons"; -@drawer3-value: "\e005"; -@drawer3: '"fontsmith-icons"' '"\\e005"'; -@question-font-family: "fontsmith-icons"; -@question-value: "\e002"; -@question: '"fontsmith-icons"' '"\\e002"'; -@warning-font-family: "fontsmith-icons"; -@warning-value: "\e000"; -@warning: '"fontsmith-icons"' '"\\e000"'; -@lab-font-family: "fontsmith-icons"; -@lab-value: "\e004"; -@lab: '"fontsmith-icons"' '"\\e004"'; +@list-value: "\e002"; +@list: '"fontsmith-icons"' '"\\e002"'; @arrow-left3-font-family: "fontsmith-icons"; @arrow-left3-value: "\e006"; @arrow-left3: '"fontsmith-icons"' '"\\e006"'; -@tree-font-family: "fontsmith-icons"; -@tree-value: "\e001"; -@tree: '"fontsmith-icons"' '"\\e001"'; +@question-font-family: "fontsmith-icons"; +@question-value: "\e001"; +@question: '"fontsmith-icons"' '"\\e001"'; +@warning-font-family: "fontsmith-icons"; +@warning-value: "\e000"; +@warning: '"fontsmith-icons"' '"\\e000"'; +@bars-font-family: "fontsmith-icons"; +@bars-value: "\e005"; +@bars: '"fontsmith-icons"' '"\\e005"'; +@drawer3-font-family: "fontsmith-icons"; +@drawer3-value: "\e004"; +@drawer3: '"fontsmith-icons"' '"\\e004"'; +@lab-font-family: "fontsmith-icons"; +@lab-value: "\e003"; +@lab: '"fontsmith-icons"' '"\\e003"'; .icon-font-family(@char) { font-family: ~`@{char}[0]`; diff --git a/app/public/styles/less/main.less b/app/public/styles/less/main.less index ced353a..4d8d27b 100644 --- a/app/public/styles/less/main.less +++ b/app/public/styles/less/main.less @@ -63,7 +63,7 @@ h1 span { .icon(@list); } .icon-spaghetti { - .icon(@tree); + .icon(@bars); } .icon-metrics { .icon(@drawer3); diff --git a/app/public/styles/less/results.less b/app/public/styles/less/results.less index 6b03fea..490a3bc 100644 --- a/app/public/styles/less/results.less +++ b/app/public/styles/less/results.less @@ -8,7 +8,8 @@ @domContentLoadedEndBg: #D8F0F0; @domCompleteColor: #C2A3FF; @domCompleteBg: #EDE3FF; - +@domInteractiveColor: #FFE433; +@domInteractiveBg: #FFFCCC; .resultsMenu { @@ -188,6 +189,12 @@ h4 { .timeline .domContentLoaded .color { background: @domContentLoadedColor; } +.timeline .domInteractive.interval { + background: @domInteractiveBg; +} +.timeline .domInteractive .color { + background: @domInteractiveColor; +} .timeline .domCreation.interval { background: @domCreationBg; } @@ -215,26 +222,29 @@ h4 { display: table-row; } .timeline .legend > div > div { + position: relative; display: table-cell; margin-top: 1em; } .timeline .titles { font-weight: bold; } +.timeline .titles > div { + padding: 0 1em 0 2em; +} .timeline .tips { font-size: 0.7em; } .timeline .tips > div { - padding: 1em 1.5em; + padding: 1em 1em 0 0; } .timeline .legend .color { - display: inline-block; - position: relative; - top: 0.4em; + display: block; + position: absolute; + left: 0; height: 1.5em; width: 1.5em; border-radius: 0.2em; - margin: 0 0.4em 0 1em; } @@ -312,7 +322,7 @@ input.textFilter { color: #e74c3c; font-weight: bold; } -.table > div.windowPerformance > div { +.table > div.windowPerformance > div, .table > div.windowPerformance > div.startTime { background: #EBD8E2; } .table > div.showingDetails > div { @@ -385,6 +395,9 @@ input.textFilter { .table > div > .startTime.domContentLoaded { background: @domContentLoadedBg; } +.table > div > .startTime.domInteractive { + background: @domInteractiveBg; +} .table > div > .startTime.domCreation { background: @domCreationBg; } diff --git a/app/public/styles/main.css b/app/public/styles/main.css index 32ac6eb..143b63d 100644 --- a/app/public/styles/main.css +++ b/app/public/styles/main.css @@ -56,7 +56,7 @@ h1 span { -webkit-font-smoothing: antialiased; } .icon-lab:before { - content: "\e004"; + content: "\e003"; } .icon-question { font-family: "fontsmith-icons"; @@ -69,7 +69,7 @@ h1 span { -webkit-font-smoothing: antialiased; } .icon-question:before { - content: "\e002"; + content: "\e001"; } .icon-warning { font-family: "fontsmith-icons"; @@ -108,7 +108,7 @@ h1 span { -webkit-font-smoothing: antialiased; } .icon-summary:before { - content: "\e003"; + content: "\e002"; } .icon-spaghetti { font-family: "fontsmith-icons"; @@ -121,7 +121,7 @@ h1 span { -webkit-font-smoothing: antialiased; } .icon-spaghetti:before { - content: "\e001"; + content: "\e005"; } .icon-metrics { font-family: "fontsmith-icons"; @@ -134,5 +134,5 @@ h1 span { -webkit-font-smoothing: antialiased; } .icon-metrics:before { - content: "\e005"; + content: "\e004"; } diff --git a/app/public/styles/results.css b/app/public/styles/results.css index 65df968..bdcbb47 100644 --- a/app/public/styles/results.css +++ b/app/public/styles/results.css @@ -179,6 +179,12 @@ h4 { .timeline .domContentLoaded .color { background: #a7e846; } +.timeline .domInteractive.interval { + background: #fffccc; +} +.timeline .domInteractive .color { + background: #ffe433; +} .timeline .domCreation.interval { background: #ffe0cc; } @@ -205,26 +211,29 @@ h4 { display: table-row; } .timeline .legend > div > div { + position: relative; display: table-cell; margin-top: 1em; } .timeline .titles { font-weight: bold; } +.timeline .titles > div { + padding: 0 1em 0 2em; +} .timeline .tips { font-size: 0.7em; } .timeline .tips > div { - padding: 1em 1.5em; + padding: 1em 1em 0 0; } .timeline .legend .color { - display: inline-block; - position: relative; - top: 0.4em; + display: block; + position: absolute; + left: 0; height: 1.5em; width: 1.5em; border-radius: 0.2em; - margin: 0 0.4em 0 1em; } .metrics h4 { padding-left: 2em; @@ -289,7 +298,8 @@ input.textFilter { color: #e74c3c; font-weight: bold; } -.table > div.windowPerformance > div { +.table > div.windowPerformance > div, +.table > div.windowPerformance > div.startTime { background: #EBD8E2; } .table > div.showingDetails > div { @@ -357,6 +367,9 @@ input.textFilter { .table > div > .startTime.domContentLoaded { background: #e0ffd1; } +.table > div > .startTime.domInteractive { + background: #fffccc; +} .table > div > .startTime.domCreation { background: #ffe0cc; }