Merge branch 'main' into video-tutorials

This commit is contained in:
Peter Hedenskog 2022-04-26 06:21:55 +02:00 committed by GitHub
commit 2ac19b79b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
97 changed files with 9871 additions and 3357 deletions

View File

@ -2,4 +2,6 @@
!bin
!lib
!package.json
!LICENSE
!npm-shrinkwrap.json
!docker

View File

@ -4,3 +4,4 @@ assets/*
sitespeed-result/*
lib/plugins/yslow/scripts/*
lib/plugins/html/assets/js/*
test/data/*

13
.github/budget.json vendored Normal file
View File

@ -0,0 +1,13 @@
{
"budget": {
"thirdParty": {
"requests": 0
},
"score": {
"bestpractice": 100,
"privacy": 100,
"performance": 98
}
}
}

View File

@ -7,6 +7,9 @@ jobs:
docker:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
@ -29,6 +32,7 @@ jobs:
name: Build and push sitespeed.io
uses: docker/build-push-action@v2
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: sitespeedio/sitespeed.io:${{steps.tag.outputs.tag}},sitespeedio/sitespeed.io:latest
@ -36,6 +40,7 @@ jobs:
name: Build and push sitespeed.io+1
uses: docker/build-push-action@v2
with:
context: .
platforms: linux/amd64,linux/arm64
file: ./docker/Dockerfile-plus1
build-args: version=${{steps.tag.outputs.tag}}
@ -45,6 +50,7 @@ jobs:
name: Build and push sitespeed.io+wpt
uses: docker/build-push-action@v2
with:
context: .
platforms: linux/amd64,linux/arm64
file: ./docker/Dockerfile-webpagetest
build-args: version=${{steps.tag.outputs.tag}}
@ -54,6 +60,7 @@ jobs:
name: Build and push sitespeed.io-slim
uses: docker/build-push-action@v2
with:
context: .
platforms: linux/amd64,linux/arm64
file: ./Dockerfile-slim
build-args: version=${{steps.tag.outputs.tag}}

View File

@ -10,9 +10,9 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install sitespeed.io

View File

@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-18.04
steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: Build an image from Dockerfile
run: |

View File

@ -10,21 +10,25 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Build Docker containers
run: |
docker buildx install
docker buildx build --load --platform linux/amd64 -t sitespeedio/sitespeed.io .
docker buildx build --load --platform linux/amd64 -t sitespeedio/sitespeed.io:slim --file Dockerfile-slim .
- name: Install local HTTP server
run: npm install serve -g
- name: Start local HTTP server
run: (serve test/data/html/ -l 3001&)
- name: Run test on default container for Chrome
run: docker run --rm sitespeedio/sitespeed.io https://www.sitespeed.io -n 1 -b chrome
run: docker run --rm --network=host sitespeedio/sitespeed.io http://127.0.0.1:3001 -n 1 -b chrome
- name: Run test on default container for Firefox
run: docker run --rm sitespeedio/sitespeed.io https://www.sitespeed.io -n 1 -b firefox
run: docker run --rm --network=host sitespeedio/sitespeed.io http://127.0.0.1:3001 -n 1 -b firefox
- name: Run test on default container for Edge
run: docker run --rm sitespeedio/sitespeed.io https://www.sitespeed.io -n 1 -b edge
run: docker run --rm --network=host sitespeedio/sitespeed.io http://127.0.0.1:3001 -n 1 -b edge
- name: Run test on slim container
run: docker run --rm sitespeedio/sitespeed.io:slim https://www.sitespeed.io -n 1
run: docker run --rm --network=host sitespeedio/sitespeed.io:slim http://127.0.0.1:3001 -n 1 --browsertime.firefox.preference "devtools.netmonitor.persistlog:true"
- name: Test WebPageReplay with Chrome
run: docker run --cap-add=NET_ADMIN --rm -e REPLAY=true -e LATENCY=100 sitespeedio/sitespeed.io https://www.sitespeed.io -n 3 -b chrome
run: docker run --cap-add=NET_ADMIN --rm -e REPLAY=true -e LATENCY=100 sitespeedio/sitespeed.io https://www.sitespeed.io -n 3 -b chrome
- name: Test WebPageReplay with Firefox
run: docker run --cap-add=NET_ADMIN --rm -e REPLAY=true -e LATENCY=100 sitespeedio/sitespeed.io https://www.sitespeed.io -n 3 -b firefox --browsertime.firefox.acceptInsecureCerts true
run: docker run --cap-add=NET_ADMIN --rm --network=host -e REPLAY=true -e LATENCY=100 sitespeedio/sitespeed.io https://www.sitespeed.io -n 3 -b firefox --browsertime.firefox.acceptInsecureCerts true

View File

@ -10,9 +10,9 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install sitespeed.io
@ -34,25 +34,29 @@ jobs:
run: |
google-chrome --version
firefox --version
- name: Install local HTTP server
run: npm install serve -g
- name: Start local HTTP server
run: (serve test/data/html/ -l 3001&)
- name: Test old budget
run: bin/sitespeed.js -b firefox -n 2 --budget.configPath test/oldBudget.json --summary --xvfb https://www.sitespeed.io/
run: bin/sitespeed.js -b firefox -n 2 --budget.configPath test/oldBudget.json --summary --xvfb http://127.0.0.1:3001/simple/
- name: Test new budget file
run: bin/sitespeed.js --useHash -n 1 --budget.configPath test/budget.json --xvfb https://www.sitespeed.io/#heybaberia
run: bin/sitespeed.js --useHash -n 1 --budget.configPath test/budget.json --xvfb http://127.0.0.1:3001/simple/#heybaberia
- name: Use AXE
run: bin/sitespeed.js --useAlias start --mobile -n 1 --utc --axe.enable --xvfb https://www.sitespeed.io/
run: bin/sitespeed.js --useAlias start --mobile -n 1 --utc --axe.enable --xvfb http://127.0.0.1:3001/simple/
- name: Use Fireefox with --mobile
run: bin/sitespeed.js -b firefox --metrics.list --mobile -n 1 https://www.sitespeed.io/ --sustainable.enable --xvfb
run: bin/sitespeed.js -b firefox --metrics.list --mobile -n 1 http://127.0.0.1:3001/simple/ --sustainable.enable --xvfb
- name: Test --multi
run: bin/sitespeed.js --multi -b chrome -n 1 test/prepostscripts/preSample.js https://www.sitespeed.io/documentation/ test/prepostscripts/postSample.js --xvfb
run: bin/sitespeed.js --multi -b chrome -n 1 test/prepostscripts/preSample.js http://127.0.0.1:3001/simple/ test/prepostscripts/postSample.js --xvfb
- name: Test --multi and --tcpdump
run: bin/sitespeed.js --multi -n 1 https://www.sitespeed.io/ https://www.sitespeed.io/documentation/ --tcpdump --xvfb
run: bin/sitespeed.js --multi -n 1 http://127.0.0.1:3001/simple/ http://127.0.0.1:3001/dimple/ --tcpdump --xvfb
- name: Test --multi with one file
run: bin/sitespeed.js --multi -n 3 test/prepostscripts/multi.js --xvfb
- name: Test setting HTML output pageSummaries
run: bin/sitespeed.js https://www.sitespeed.io/ https://www.google.com -v -n 1 --html.pageSummaryMetrics transferSize.css --html.pageSummaryMetrics requests.httpErrors --html.pageSummaryMetrics score.performance --xvfb
run: bin/sitespeed.js http://127.0.0.1:3001/simple/ http://127.0.0.1:3001/dimple/ -v -n 1 --html.pageSummaryMetrics transferSize.css --html.pageSummaryMetrics requests.httpErrors --html.pageSummaryMetrics score.performance --xvfb
- name: Test setting HTML output summary boxes
run: bin/sitespeed.js https://www.sitespeed.io/ -v -n 1 --html.summaryBoxes score.performance --html.summaryBoxes timings.firstPaint --xvfb
run: bin/sitespeed.js http://127.0.0.1:3001/simple/ -v -n 1 --html.summaryBoxes score.performance --html.summaryBoxes timings.firstPaint --xvfb
- name: Run test with Graphite
run: bin/sitespeed.js https://www.sitespeed.io/ -n 1 --graphite.host 127.0.0.1 --xvfb
run: bin/sitespeed.js http://127.0.0.1:3001/simple/ -n 1 --graphite.host 127.0.0.1 --xvfb
- name: Run test without a CLI
run: xvfb-run node test/runWithoutCli.js

View File

@ -10,14 +10,18 @@ jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install dependencies
run: |
sudo safaridriver --enable
npm ci
- name: Install local HTTP server
run: npm install serve -g
- name: Start local HTTP server
run: (serve test/data/html/ -l 3001&)
- name: Run test
run: bin/sitespeed.js -b safari https://www.sitespeed.io/
run: bin/sitespeed.js -b safari http://127.0.0.1:3001/

View File

@ -0,0 +1,21 @@
name: sitespeed.io action example
on:
push:
branches:
- main
jobs:
run-sitespeed:
runs-on: ubuntu-latest
name: running sitespeed.io
steps:
- name: code checkout
uses: actions/checkout@v3
# Here we build our own container to make sure we test against our latest code
# but YOU can just used the latest version by specifying
# sitespeedio/sitespeed.io:VERSION
- name: Build Docker containers
run: |
docker buildx install
docker buildx build --load --platform linux/amd64 -t sitespeedio/sitespeed.io .
- name: running sitespeed.io container with arguments and optional Docker options
run: docker run -v "$(pwd):/sitespeed.io" sitespeedio/sitespeed.io https://www.sitespeed.io --budget.configPath .github/budget.json -n 1

View File

@ -13,9 +13,9 @@ jobs:
matrix:
node-version: [14.x, 16.x]
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies and Chrome

View File

@ -10,9 +10,9 @@ jobs:
build:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install sitespeed.io
@ -24,6 +24,6 @@ jobs:
- name: Install dependencies
run: choco install microsoft-edge --force
- name: Run Edge test
run: node bin/sitespeed.js -b edge https://www.sitespeed.io/
run: node bin/sitespeed.js -b edge https://www.sitespeed.io/
shell: cmd

View File

@ -1,5 +1,76 @@
# CHANGELOG - sitespeed.io (we use [semantic versioning](https://semver.org))
## UNRELEASED
### Added
* Updated base Docker image to use Ubuntu 22.04 [#3636](https://github.com/sitespeedio/sitespeed.io/pull/3636).
## 24.1.0 - 2022-04-22
### Added
* Update Grafana auth settings to allow api token or basic auth, thank you [Vladimir Stepanov](https://github.com/vs-odessa) for PR [#3627](https://github.com/sitespeedio/sitespeed.io/pull/3627).
* Add TTFB to the metrics page [#3630](https://github.com/sitespeedio/sitespeed.io/pull/3630).
* Use latest Coach core with updated PageXray and Third party web [#3629](https://github.com/sitespeedio/sitespeed.io/pull/3629).
* Make it possible to disable annotations for Graphite. Set `--graphite.sendAnnotation false` to disable sending annotations [#3625](https://github.com/sitespeedio/sitespeed.io/pull/3625).
* Show which run that is used in the metrics tab [#3631](https://github.com/sitespeedio/sitespeed.io/pull/3631).
* Updated to [Browsertime 16.1.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1610---2022-04-20).
### Updated
* Update dependencies: google-cloud/storage, aws-sdk, dayjs, yargs [#3635](https://github.com/sitespeedio/sitespeed.io/pull/3635).
## 24.0.0 - 2022-04-06
### Changed
* Upgraded to [Browsertime 16.0.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1600---2022-04-05) that changed how the DNS is flushed. You need to add `--flushDNS` to your conifguration to flush the DNS between runs.
### Added
* Use Firefox 99 and Edge/Edgedriver 100 in the Dockker container.
### Fixed
* Better catch if Visual Metrics fails [#3619](https://github.com/sitespeedio/sitespeed.io/pull/3619)
* Fixed JUnit/alias bug [#3620](https://github.com/sitespeedio/sitespeed.io/pull/3620)
## 23.7.0 - 2022-03-31
### Added
* Updated to Chrome/Chromedriver 100 and [Browsertime 15.4.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1540---2022-03-30).
* Updated the +1 container to use Lighthouse 9.5.0.
* Updated to [Axe-core 4.4.1](https://github.com/sitespeedio/sitespeed.io/pull/3615).
## 23.6.1 - 2022-03-25
### Fixed
* Fixing text formatting in the JSON from latest run and make sure we display the time with UTC[#3611](https://github.com/sitespeedio/sitespeed.io/pull/3611).
## 23.6.0 - 2022-03-25
### Added
* Various fixes to add more content to the JSON stored from the latest run, making it easier to show more meta data for a run in Grafana [#3607](https://github.com/sitespeedio/sitespeed.io/pull/3607), [#3609](https://github.com/sitespeedio/sitespeed.io/pull/3609) and [#3610](https://github.com/sitespeedio/sitespeed.io/pull/3610).
## 23.5.2 - 2022-03-22
### Fixed
* Updated to latest NodeJS and Ubuntu updates in the Docker container with some security updates[#3306](https://github.com/sitespeedio/sitespeed.io/pull/3606). Also updated the slim container with latest NodeJS.
* Make sure the shrinkwrap file is used when building the container [#3604](https://github.com/sitespeedio/sitespeed.io/pull/3604) and (hopefully) fix so that .dockerignore is not ignored when Github Actions build the containers.
## 23.5.0 - 2022-03-11
### Added
* The -slim Docker container now uses Firefox 98.
* Updated Grafana to latest 8.4.3 in the Docker compose file.
* Updated [Graphite dashboards](https://github.com/sitespeedio/grafana-bootstrap-docker/tree/main/dashboards/graphite) to use Timeseries graphs instead of old "Graph".
* You can use `-o` or `--open` or `--view` to open the result page after you run sitespeed.io on Mac and Linux [#3569](https://github.com/sitespeedio/sitespeed.io/pull/3596).
* Open the result with `-o` on Linux using xdg-open [#3597](https://github.com/sitespeedio/sitespeed.io/pull/3597).
## 23.4.0 - 2022-03-09
### Added
* Firefox 98 in the Docker container [#3592](https://github.com/sitespeedio/sitespeed.io/pull/3592).
* Added link to each run in the side by side metric page, making it easier to go to the correct run [#3593](https://github.com/sitespeedio/sitespeed.io/pull/3593).
## 23.3.0 - 2022-03-07
### Added
* The +1 container is upgraded to use Lighthouse 9.4.0.
* Updated to [Browsertime 15.3.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1530---2022-03-07).
## 23.2.0 - 2022-03-05
### Added
* Updated to Chrome and Edge 99 in the Docker container. Updated to Chromedriver and Edgedriver 99 [#3590](https://github.com/sitespeedio/sitespeed.io/pull/3590).
### Fixed
* If you use alias and budget files, the outcome (result budget json and others) should use the alias of the URL instead of the URL [#3582](https://github.com/sitespeedio/sitespeed.io/pull/3582).
* Ignore sustainable.setup messages when storing analysistorer [#3578](https://github.com/sitespeedio/sitespeed.io/pull/3587).
## 23.1.0 - 2022-02-24
### Added
* Updated [Browsertime](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1510---2022-02-24) that collect timings from main document. The result includes a field named mainDocumentTimings and contains blocked, dns, connect, send, wait, receive, ssl as long as you get a HAR file from the browser.

View File

@ -1,4 +1,4 @@
FROM sitespeedio/webbrowsers:chrome-98.0-firefox-97.0-edge-98.0
FROM sitespeedio/webbrowsers:chrome-100.0-firefox-99.0-edge-100.0-b
ARG TARGETPLATFORM=linux/amd64
@ -26,7 +26,8 @@ RUN wpr installroot --https_cert_file /webpagereplay/certs/wpr_cert.pem --https_
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.* /usr/src/app/
COPY package.json /usr/src/app/
COPY npm-shrinkwrap.json /usr/src/app/
RUN npm install --production && npm cache clean --force
COPY . /usr/src/app
@ -37,7 +38,6 @@ RUN mkdir -m 0750 /root/.android
ADD docker/adb/insecure_shared_adbkey /root/.android/adbkey
ADD docker/adb/insecure_shared_adbkey.pub /root/.android/adbkey.pub
# Allow all users to run commands needed by sitespeedio/throttle via sudo
# See https://github.com/sitespeedio/throttle/blob/main/lib/tc.js
RUN echo 'ALL ALL=NOPASSWD: /usr/sbin/tc, /usr/sbin/route, /usr/sbin/ip' > /etc/sudoers.d/tc

View File

@ -1,4 +1,4 @@
FROM node:16.14.0-bullseye-slim
FROM node:16.14.2-bullseye-slim
ARG TARGETPLATFORM=linux/amd64

View File

@ -29,6 +29,8 @@ async function run(options) {
if ((options.open || options.o) && os.platform() === 'darwin') {
execSync('open ' + result.localPath + '/index.html');
} else if ((options.open || options.o) && os.platform() === 'linux') {
execSync('xdg-open ' + result.localPath + '/index.html');
}
if (

View File

@ -1,7 +1,7 @@
version: '3'
services:
grafana:
image: grafana/grafana:8.2.3
image: grafana/grafana:8.4.3
hostname: grafana
depends_on:
- graphite
@ -40,7 +40,7 @@ services:
# - /absolute/path/to/graphite/conf/storage-aggregation.conf:/opt/graphite/conf/storage-aggregation.conf
# - /absolute/path/to/graphite/conf/carbon.conf:/opt/graphite/conf/carbon.conf
grafana-setup:
image: sitespeedio/grafana-bootstrap:20.4.0
image: sitespeedio/grafana-bootstrap:23.5.0
links:
- grafana
environment:

View File

@ -4,7 +4,7 @@ markdown: kramdown
compress_html:
clippings: all
endings: all
include: ["_headers"]
include: ["_headers", "_redirects"]
highlighter: none
kramdown:
syntax_highlighter_opts:

View File

@ -22,4 +22,6 @@
/js/*
Cache-Control: public, max-age=3600000
/css/*
Cache-Control: public, max-age=3600000
Cache-Control: public, max-age=3600000
/feed/*
Access-Control-Allow-Origin: *

View File

@ -1 +1 @@
15.1.1
16.1.0

View File

@ -1 +1 @@
7.1.0
7.1.1

View File

@ -1 +1 @@
4.4.0
4.4.1

View File

@ -1 +1 @@
23.1.0
24.1.0

View File

@ -1 +1 @@
3.1.0
4.0.0

View File

@ -42,8 +42,18 @@ layout: compress
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{site.baseurl}}/img/ico/sitespeed.io-72.png">
<link rel="apple-touch-icon-precomposed" href="{{site.baseurl}}/img/ico/sitespeed.io-57.png">
<link rel="shortcut icon" href="{{site.baseurl}}/img/ico/sitespeed.io.ico">
<link type="application/atom+xml" href="https://www.sitespeed.io/feed/atom.xml" rel="alternate" />
<link type="application/rss+xml" href="https://www.sitespeed.io/feed/rss.xml" rel="alternate" />
<link type="application/atom+xml" title="RSS Changelog for all sitespeed.io tools" href="https://www.sitespeed.io/feed/atom.xml" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for all sitespeed.io tools" href="https://www.sitespeed.io/feed/rss.xml" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for Browsertime" href="https://www.sitespeed.io/feed/browsertime.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for PageXray" href="https://www.sitespeed.io/feed/pagexray.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for Compare" href="https://www.sitespeed.io/feed/compare.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for PageXray" href="https://www.sitespeed.io/feed/pagexray.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for sitespeed.io" href="https://www.sitespeed.io/feed/sitespeed.io.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for Throttle" href="https://www.sitespeed.io/feed/throttle.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for Humble" href="https://www.sitespeed.io/feed/humble.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for Coach Core" href="https://www.sitespeed.io/feed/coach-core.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for Chrome HAR" href="https://www.sitespeed.io/feed/chrome-har.rss" rel="alternate" />
<link type="application/rss+xml" title="RSS Changelog for Chrome trace" href="https://www.sitespeed.io/feed/chrome-trace.rss" rel="alternate" />
<style>
{% include css/default.css %}
</style>

5
docs/_redirects Normal file
View File

@ -0,0 +1,5 @@
# Redirects from what the browser requests to what we serve
/feed/index.xml /feed/blog.xml
/feeds /feed/rss.xml
/feed /feed/rss.xml 302
/rss /feed/rss.xml

View File

@ -31,6 +31,7 @@ chrome
--chrome.collectConsoleLog Collect Chromes console log and save to disk. [boolean]
--chrome.appendToUserAgent Append to the user agent. [string]
--chrome.noDefaultOptions Prevent Browsertime from setting its default options for Chrome [boolean]
--chrome.cleanUserDataDir If you use --user-data-dir as an argument to Chrome and want to clean that directory between each iteration you should use --chrome.cleanUserDataDir true. [boolean]
--chrome.CPUThrottlingRate Enables CPU throttling to emulate slow CPUs. Throttling rate as a slowdown factor (1 is no throttle, 2 is 2x slowdown, etc) [number]
--chrome.includeResponseBodies Include response bodies in the HAR file. [choices: "none", "all", "html"] [default: "none"]
--chrome.cdp.performance Collect Chrome perfromance metrics from Chrome DevTools Protocol [boolean] [default: true]
@ -136,6 +137,7 @@ Options:
--visualElements, --visuaElements Collect Visual Metrics from elements. Works only with --visualMetrics turned on. By default you will get visual metrics from the largest image within the view port and the largest h1. You can also configure to pickup your own defined elements with --scriptInput.visualElements [boolean]
--visualMetricsPerceptual Collect Perceptual Speed Index when you run --visualMetrics. [boolean]
--visualMetricsContentful Collect Contentful Speed Index when you run --visualMetrics. [boolean]
--visualMetricsPortable Use the portable visual-metrics processing script (no ImageMagick dependencies). [boolean]
--scriptInput.visualElements Include specific elements in visual elements. Give the element a name and select it with document.body.querySelector. Use like this: --scriptInput.visualElements name:domSelector see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors. Add multiple instances to measure multiple elements. Visual Metrics will use these elements and calculate when they are visible and fully rendered.
--scriptInput.longTask, --minLongTaskLength Set the minimum length of a task to be categorised as a CPU Long Task. It can never be smaller than 50. The value is in ms and only works in Chromium browsers at the moment. [number] [default: 50]
-b, --browser Specify browser. Safari only works on OS X/iOS. Edge only work on OS that supports Edge. [choices: "chrome", "firefox", "edge", "safari"] [default: "chrome"]
@ -161,7 +163,7 @@ Options:
-r, --requestheader Request header that will be added to the request. Add multiple instances to add multiple request headers. Works for Firefox and Chrome. Use the following format key:value
--cookie Cookie that will be added to the request. Add multiple instances to add multiple request cookies. Works for Firefox and Chrome. Use the following format cookieName=cookieValue
--injectJs Inject JavaScript into the current page at document_start. Works for Firefox and Chrome. More info: https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/contentScripts
--block Domain to block. Add multiple instances to add multiple domains that will be blocked. If you use Chrome you can also use --blockDomainsExcept (that is more performant). Works for Firefox and Chrome.
--block Domain to block or URL or URL pattern to block. If you use Chrome you can also use --blockDomainsExcept (that is more performant). Works in Chrome/Edge. For Firefox you can only block domains.
--percentiles The percentile values within the data browsertime will calculate and report. This argument uses Yargs arrays and you you to set them correctly it is recommended to use a configuraration file instead. [array] [default: [0,10,90,99,100]]
--decimals The decimal points browsertime statistics round to. [number] [default: 0]
--iqr Use IQR, or Inter Quartile Range filtering filters data based on the spread of the data. See https://en.wikipedia.org/wiki/Interquartile_range. In some cases, IQR filtering may not filter out anything. This can happen if the acceptable range is wider than the bounds of your dataset. [boolean] [default: false]
@ -191,6 +193,7 @@ Options:
--userTimingWhitelist All userTimings are captured by default this option takes a regex that will whitelist which userTimings to capture in the results.
--headless Run the browser in headless mode. Works for Firefox and Chrome. [boolean] [default: false]
--gnirehtet Start gnirehtet and reverse tethering the traffic from your Android phone. [boolean] [default: false]
--flushDNS Flush DNS between runs, works on Mac OS and Linux. Your user needs sudo rights to be able to flush the DNS. [boolean] [default: false]
--extension Path to a WebExtension to be installed in the browser. Note that --extension can be passed multiple times.
--spa Convenient parameter to use if you test a SPA application: will automatically wait for X seconds after last network activity and use hash in file names. Read more: https://www.sitespeed.io/documentation/sitespeed.io/spa/ [boolean] [default: false]
--browserRestartTries If the browser fails to start, you can retry to start it this amount of times. [number] [default: 3]

View File

@ -1,6 +1,6 @@
---
layout: default
title: Documentation Browsertime 15
title: Documentation Browsertime 16
description: Read about all you can do with Browsertime.
keywords: tools, documentation, web performance
nav: documentation
@ -9,7 +9,7 @@ image: https://www.sitespeed.io/img/sitespeed-2.0-twitter.png
twitterdescription: Documentation for Browsertime.
---
# Documentation v15
# Documentation v16
<img src="{{site.baseurl}}/img/logos/browsertime.png" class="pull-right img-big" alt="Browsertime logo" width="200" height="175">

View File

@ -44,8 +44,9 @@ Browser
--axe.enable Run axe tests. Axe will run after all other metrics is collected and will add some extra time to each test. [boolean]
-r, --browsertime.requestheader, --requestheader Request header that will be added to the request. Add multiple instances to add multiple request headers. Use the following format key:value. Only works in Chrome and Firefox.
--browsertime.cookie, --cookie Cookie that will be added to the request. Add multiple instances to add multiple cookies. Use the following format cookieName=cookieValue. Only works in Chrome and Firefox.
--browsertime.block, --block Domain to block. Add multiple instances to add multiple domains that will be blocked. Only works in Chrome and Firefox.
--browsertime.block, --block Domain or URL or URL pattern to block. If you use Chrome you can also use --blockDomainsExcept (that is more performant). Works in Chrome/Edge. For Firefox you can only block domains.
--browsertime.basicAuth, --basicAuth Use it if your server is behind Basic Auth. Format: username@password. Only works in Chrome and Firefox.
--browsertime.flushDNS, --flushDNS Flush the DNS between runs (works on Mac OS and Linux). The user needs sudo rights to flush the DNS.
--browsertime.headless, --headless Run the browser in headless mode. This is the browser internal headless mode, meaning you cannot collect Visual Metrics or in Chrome run any WebExtension (this means you cannot add cookies, requestheaders or use basic auth for headless Chrome). Only works in Chrome and Firefox. [boolean] [default: false]
video
@ -133,7 +134,7 @@ Crawler
Grafana
--grafana.host The Grafana host used when sending annotations.
--grafana.port The Grafana port used when sending annotations to Grafana. [default: 80]
--grafana.auth The Grafana auth/bearer value used when sending annotations to Grafana. See http://docs.grafana.org/http_api/auth/#authentication-api
--grafana.auth The Grafana auth/bearer value used when sending annotations to Grafana. If you do not set Bearer/Auth, Bearer is automatically set. See http://docs.grafana.org/http_api/auth/#authentication-api
--grafana.annotationTitle Add a title to the annotation sent for a run.
--grafana.annotationMessage Add an extra message that will be attached to the annotation sent for a run. The message is attached after the default message and can contain HTML.
--grafana.annotationTag Add a extra tag to the annotation sent for a run. Repeat the --grafana.annotationTag option for multiple tags. Make sure they do not collide with the other tags.
@ -151,6 +152,7 @@ Graphite
--graphite.annotationTitle Add a title to the annotation sent for a run.
--graphite.annotationMessage Add an extra message that will be attached to the annotation sent for a run. The message is attached after the default message and can contain HTML.
--graphite.annotationScreenshot Include screenshot (from Browsertime/WebPageTest) in the annotation. You need to specify a --resultBaseURL for this to work. [boolean] [default: false]
--graphite.sendAnnotation Send annotations when a run is finished. You need to specify a --resultBaseURL for this to work. However if you for example use a Prometheus exporter, you may want to make sure annotations are not sent, then set it to false. [boolean] [default: true]
--graphite.annotationRetentionMinutes The retention in minutes, to make annotation match the retention in Graphite. [number]
--graphite.statsd Uses the StatsD interface [boolean] [default: false]
--graphite.annotationTag Add a extra tag to the annotation sent for a run. Repeat the --graphite.annotationTag option for multiple tags. Make sure they do not collide with the other tags.
@ -291,7 +293,7 @@ Options:
--useHash If your site uses # for URLs and # give you unique URLs you need to turn on useHash. By default is it turned off, meaning URLs with hash and without hash are treated as the same URL [boolean] [default: false]
--multi Test multiple URLs within the same browser session (same cache etc). Only works with Browsertime. Use this if you want to test multiple pages (use journey) or want to test multiple pages with scripts. You can mix URLs and scripts (the order will matter): login.js https://www.sitespeed.io/ logout.js - More details: https://www.sitespeed.io/documentation/sitespeed.io/scripting/ [boolean] [default: false]
--name Give your test a name.
-o, --open Open your test result in your default browser (Mac OS only).
-o, --open, --view Open your test result in your default browser (Mac OS or Linux with xdg-open).
--slug Give your test a slug. The slug is used when you send the metrics to your data storage to identify the test and the folder of the tests. The max length of the slug is 200 characters and it can only contain a-z A-Z 0-9 and -_ characters.
--config Path to JSON config file
-h, --help Show help [boolean]

View File

@ -196,4 +196,9 @@ Enter any password. This will start your VNC server which you can use by any VNC
- Download VNC client like RealVNC
- Enter VNC server : `0.0.0.0:5900`
- When prompted for password, enter the password you entered while creating the vnc server.
- You should be able to view the contents of `Xvfb`.
- You should be able to view the contents of `Xvfb`.
## Security
In our build process we [run Trivy vulnerability scanner](https://github.com/sitespeedio/sitespeed.io/blob/main/.github/workflows/docker-scan.yml) on the docker image and we break builds on *CRITICAL* issues. The reason for that is that if should break in *HIGH* issues we would probably never be able to release any containers. We update the OS in Docker continously but it can happen that sometimes have HIGH issues.
If you need to have a container that do not have lower security issues, you can do that by building your own containers and manage it yourself.

View File

@ -1,6 +1,6 @@
---
layout: default
title: Documentation sitespeed.io 23.x
title: Documentation sitespeed.io 24.x
description: Read about all you can do with sitespeed.io.
keywords: tools, documentation, web performance
nav: documentation
@ -9,7 +9,7 @@ image: https://www.sitespeed.io/img/sitespeed-2.0-twitter.png
twitterdescription: Documentation for sitespeed.io.
---
# Documentation v23
# Documentation v24
<img src="{{site.baseurl}}/img/logos/sitespeed.io.png" class="pull-right img-big" alt="sitespeed.io logo" width="200" height="214">

View File

@ -31,6 +31,13 @@ The log will look something like this:
[2019-01-20 19:58:18] INFO: Budget: 3 working and 2 failing tests
~~~
And if you check the return code after your run and you have failing budgets the exit code will be larger than zero.
~~~shell
echo $?
1
~~~
The report looks like this.
![Example of the budget]({{site.baseurl}}/img/budget.png)

View File

@ -67,7 +67,7 @@ You can also track CPU spent per tool/third party. It's turned off by default an
## Block all 3rd parties
We have two ways to block requests when you use sitespeed.io. Either you can use block `--block` that blocks a specific request (works in Chrome/Edge/Firefox) or you can use `--chrome.blockDomainsExcept` (Chrome/Edge) to block all domains except the ones you choose (you can use wildcard like *.sitespeed.io). You can use both multiple times to keep multiple domains/block multiple requests.
We have two ways to block requests when you use sitespeed.io. Either you can use block `--block` that blocks a specific request and request patterns (works in Chrome/Edge) or domain (works in Chrome/Edge/Firefox) or you can use `--chrome.blockDomainsExcept` (Chrome/Edge) to block all domains except the ones you choose (you can use wildcard like *.sitespeed.io). You can use both multiple times to keep multiple domains/block multiple requests.
With the block parameter you block specific requests. Here's an example from Wikipedia that blocks the first JavaScript request:
@ -75,6 +75,11 @@ With the block parameter you block specific requests. Here's an example from Wik
docker run --rm -v "$(pwd):/sitespeed.io" sitespeedio/sitespeed.io:{% include version/sitespeed.io.txt %} --block "https://en.wikipedia.org/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector" https://en.wikipedia.org/wiki/Barack_Obama
~~~
Block all requests that ends with .js:
~~~bash
docker run --rm -v "$(pwd):/sitespeed.io" sitespeedio/sitespeed.io:{% include version/sitespeed.io.txt %} https://www.sitespeed.io -n 1 -o --browsertime.block "*.js"
~~~
Here's an example from a user that use WebPageReplay and want to block all domains except one:

View File

@ -113,7 +113,7 @@ throttle --stop --localhost
```javascript
const throttle = require('@sitespeed.io/throttle');
import throttle from '@sitespeed.io/throttle'
// Returns a promise
throttle.start({up: 360, down: 780, rtt: 200}).then(() => ...
```
@ -121,7 +121,7 @@ throttle.start({up: 360, down: 780, rtt: 200}).then(() => ...
or
```javascript
const throttle = require('@sitespeed.io/throttle');
import throttle from '@sitespeed.io/throttle'
// Returns a promise
const options = {up: 360, down: 780, rtt: 200};
await throttle.start(options);

File diff suppressed because it is too large Load Diff

217
docs/feed/browsertime.atom Normal file
View File

@ -0,0 +1,217 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>browsertime-release-feed</id>
<title>browsertime release feed</title>
<updated>2022-04-20T11:40:17.588Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/browsertime.atom"/>
<subtitle>New releases and changelog feed of browsertime</subtitle>
<logo>https://www.sitespeed.io/img/logos/browsertime.png</logo>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[browsertime 16.1.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.1.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.1.0"/>
<updated>2022-04-20T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Added blocking of Chrome and Edge phone home domains <a href="https://github.com/sitespeedio/browsertime/pull/1763">#1763</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Handle negative x/y offsets when cropping images in the new portable visual metrocs script, thank you <a href="https://github.com/gmierz">Gregory Mierzwinski</a> for PR <a href="https://github.com/sitespeedio/browsertime/pull/1770">#1770</a>.</li>
</ul>
<ul>
<li>Bumped Throttle dependency <a href="https://github.com/sitespeedio/browsertime/pull/1769">#1769</a>.</li>
</ul>
<ul>
<li>Bumped chrome-har, chrome-remote-interface, dayjs and yargs dependencies <a href="https://github.com/sitespeedio/browsertime/pull/1771">#1771</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 16.0.1]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.0.1</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.0.1"/>
<updated>2022-04-06T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>If visual metrics fails and you also use --visualElements, make sure that file is also stored so we can reporduce the issue <a href="https://github.com/sitespeedio/browsertime/pull/1757">#1757</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 16.0.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.0.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.0.0"/>
<updated>2022-04-05T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Firefox 99 in the Docker container</li>
</ul>
<ul>
<li>Edge and Edgedriver 100</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Automatically save the original video if visual metrics fails <a href="https://github.com/sitespeedio/browsertime/pull/1755">#1755</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>When I introduced flushing of the DNS per run I missed that it makes you need to run sudo to do it (Mac/Linux). That sucks so instead of being able to disable the flushing <code>--disableDNSFlush</code> you now enables it with <code>--flushDNS</code> <a href="https://github.com/sitespeedio/browsertime/pull/1752">#1752</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 15.4.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.4.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.4.0"/>
<updated>2022-03-30T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome and Chromedriver 100 <a href="https://github.com/sitespeedio/browsertime/pull/1743">#1743</a>.</li>
</ul>
<ul>
<li>There&#39;s a new version of the visual metrics script contributed by <a href="https://github.com/gmierz">Gregory Mierzwinski</a> that removed the dependency of ImageMagick and instead needs the Python dependencies <em>OpenCV-Python</em> and <em>Numpy</em>. The long term goal is to use this as default but for now you can test it with <code>--visualMetricsPortable</code>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 15.3.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.3.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.3.0"/>
<updated>2022-03-07T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Chrome: If you set --user-data-dir you can clean the directory between each iteration using <code>--chrome.cleanUserDataDir</code> <a href="https://github.com/sitespeedio/browsertime/pull/1739">#1739</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 15.2.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.2.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.2.0"/>
<updated>2022-03-04T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chromedriver and Edgedriver 99.</li>
</ul>
<ul>
<li>Updated Docker container to use Chrome and Edge 99 <a href="https://github.com/sitespeedio/browsertime/pull/1738">#1738</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Added more view ports for emulated mobile in Chrome <a href="https://github.com/sitespeedio/browsertime/pull/1736">#1736</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 15.1.1]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.1.1</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.1.1"/>
<updated>2022-02-24T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated Chromedriver dependency that fixes installation on M1 and <a href="https://chromedriver.storage.googleapis.com/98.0.4758.102/notes.txt">some send keys issues</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 15.1.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.1.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.1.0"/>
<updated>2022-02-24T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Collect timings from main document. The result includes a field named mainDocumentTimings and contains blocked, dns, connect, send, wait, receive, ssl as long as you get a HAR file from the browser <a href="https://github.com/sitespeedio/browsertime/pull/1735">#1735</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 15.0.1]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.0.1</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.0.1"/>
<updated>2022-02-21T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Make sure connectivity is only set before the test begins <a href="https://github.com/sitespeedio/browsertime/pull/1733">#1733</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 15.0.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.0.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.0.0"/>
<updated>2022-02-20T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>New alias for getting the Chrome trace log: <code>--chrome.trace</code> <a href="https://github.com/sitespeedio/browsertime/pull/1728">#1728</a>.</li>
</ul>
<ul>
<li>On OS X and Linux the DNS will be flushed between runs. You can disable that with <code>--disableDNSFlush true</code> <a href="https://github.com/sitespeedio/browsertime/pull/1732">#1732</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Code cleanup: <a href="https://github.com/sitespeedio/browsertime/pull/1720">#1720</a></li>
</ul>
<ul>
<li>Moved test to <a href="https://avajs.dev">Ava</a> instead of mocha and moved most testing against a local HTTP server instead of internet <a href="https://github.com/sitespeedio/browsertime/pull/1725">#1725</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Removed the built in support for TSProxy <a href="https://github.com/sitespeedio/browsertime/pull/1718">#1718</a>. TSProxy only worked with Python 2.7 and we want to remove that dependency.</li>
</ul>
<ul>
<li>Removed support for using speedline and the CLI arg <code>--chrome.visualMetricsUsingTrace</code> <a href="https://github.com/sitespeedio/browsertime/pull/1727">#1727</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

188
docs/feed/browsertime.rss Normal file
View File

@ -0,0 +1,188 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>browsertime release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of browsertime</description>
<lastBuildDate>Wed, 20 Apr 2022 11:40:17 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<image>
<title>browsertime release feed</title>
<url>https://www.sitespeed.io/img/logos/browsertime.png</url>
<link>https://www.sitespeed.io</link>
</image>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/browsertime.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[browsertime 16.1.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.1.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.1.0</guid>
<pubDate>Wed, 20 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Added blocking of Chrome and Edge phone home domains <a href="https://github.com/sitespeedio/browsertime/pull/1763">#1763</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Handle negative x/y offsets when cropping images in the new portable visual metrocs script, thank you <a href="https://github.com/gmierz">Gregory Mierzwinski</a> for PR <a href="https://github.com/sitespeedio/browsertime/pull/1770">#1770</a>.</li>
</ul>
<ul>
<li>Bumped Throttle dependency <a href="https://github.com/sitespeedio/browsertime/pull/1769">#1769</a>.</li>
</ul>
<ul>
<li>Bumped chrome-har, chrome-remote-interface, dayjs and yargs dependencies <a href="https://github.com/sitespeedio/browsertime/pull/1771">#1771</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 16.0.1]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.0.1</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.0.1</guid>
<pubDate>Wed, 06 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>If visual metrics fails and you also use --visualElements, make sure that file is also stored so we can reporduce the issue <a href="https://github.com/sitespeedio/browsertime/pull/1757">#1757</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 16.0.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.0.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16.0.0</guid>
<pubDate>Tue, 05 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Firefox 99 in the Docker container</li>
</ul>
<ul>
<li>Edge and Edgedriver 100</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Automatically save the original video if visual metrics fails <a href="https://github.com/sitespeedio/browsertime/pull/1755">#1755</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>When I introduced flushing of the DNS per run I missed that it makes you need to run sudo to do it (Mac/Linux). That sucks so instead of being able to disable the flushing <code>--disableDNSFlush</code> you now enables it with <code>--flushDNS</code> <a href="https://github.com/sitespeedio/browsertime/pull/1752">#1752</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 15.4.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.4.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.4.0</guid>
<pubDate>Wed, 30 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome and Chromedriver 100 <a href="https://github.com/sitespeedio/browsertime/pull/1743">#1743</a>.</li>
</ul>
<ul>
<li>There&#39;s a new version of the visual metrics script contributed by <a href="https://github.com/gmierz">Gregory Mierzwinski</a> that removed the dependency of ImageMagick and instead needs the Python dependencies <em>OpenCV-Python</em> and <em>Numpy</em>. The long term goal is to use this as default but for now you can test it with <code>--visualMetricsPortable</code>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 15.3.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.3.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.3.0</guid>
<pubDate>Mon, 07 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Chrome: If you set --user-data-dir you can clean the directory between each iteration using <code>--chrome.cleanUserDataDir</code> <a href="https://github.com/sitespeedio/browsertime/pull/1739">#1739</a></li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 15.2.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.2.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.2.0</guid>
<pubDate>Fri, 04 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chromedriver and Edgedriver 99.</li>
</ul>
<ul>
<li>Updated Docker container to use Chrome and Edge 99 <a href="https://github.com/sitespeedio/browsertime/pull/1738">#1738</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Added more view ports for emulated mobile in Chrome <a href="https://github.com/sitespeedio/browsertime/pull/1736">#1736</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 15.1.1]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.1.1</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.1.1</guid>
<pubDate>Thu, 24 Feb 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated Chromedriver dependency that fixes installation on M1 and <a href="https://chromedriver.storage.googleapis.com/98.0.4758.102/notes.txt">some send keys issues</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 15.1.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.1.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.1.0</guid>
<pubDate>Thu, 24 Feb 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Collect timings from main document. The result includes a field named mainDocumentTimings and contains blocked, dns, connect, send, wait, receive, ssl as long as you get a HAR file from the browser <a href="https://github.com/sitespeedio/browsertime/pull/1735">#1735</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 15.0.1]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.0.1</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.0.1</guid>
<pubDate>Mon, 21 Feb 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Make sure connectivity is only set before the test begins <a href="https://github.com/sitespeedio/browsertime/pull/1733">#1733</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 15.0.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.0.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#15.0.0</guid>
<pubDate>Sun, 20 Feb 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>New alias for getting the Chrome trace log: <code>--chrome.trace</code> <a href="https://github.com/sitespeedio/browsertime/pull/1728">#1728</a>.</li>
</ul>
<ul>
<li>On OS X and Linux the DNS will be flushed between runs. You can disable that with <code>--disableDNSFlush true</code> <a href="https://github.com/sitespeedio/browsertime/pull/1732">#1732</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Code cleanup: <a href="https://github.com/sitespeedio/browsertime/pull/1720">#1720</a></li>
</ul>
<ul>
<li>Moved test to <a href="https://avajs.dev">Ava</a> instead of mocha and moved most testing against a local HTTP server instead of internet <a href="https://github.com/sitespeedio/browsertime/pull/1725">#1725</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Removed the built in support for TSProxy <a href="https://github.com/sitespeedio/browsertime/pull/1718">#1718</a>. TSProxy only worked with Python 2.7 and we want to remove that dependency.</li>
</ul>
<ul>
<li>Removed support for using speedline and the CLI arg <code>--chrome.visualMetricsUsingTrace</code> <a href="https://github.com/sitespeedio/browsertime/pull/1727">#1727</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
</channel>
</rss>

136
docs/feed/chrome-har.atom Normal file
View File

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>chrome-har-release-feed</id>
<title>chrome-har release feed</title>
<updated>2022-02-24T13:43:37.431Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/chrome-har.atom"/>
<subtitle>New releases and changelog feed of chrome-har</subtitle>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[chrome-har 0.13.0]]></title>
<id>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.13.0</id>
<link href="https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.13.0"/>
<updated>2022-02-04T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Add _isLinkPreload on the request object if it is isLinkPreload <a href="https://github.com/sitespeedio/chrome-har/pull/94">#94</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[chrome-har 0.12.0]]></title>
<id>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.12.0</id>
<link href="https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.12.0"/>
<updated>2020-10-29T00:00:00.000Z</updated>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[chrome-har 0.11.12]]></title>
<id>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.12</id>
<link href="https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.12"/>
<updated>2020-09-09T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Removed test directory from the release, thank you <a href="https://github.com/yurynix">Yury Michurin</a> for the PR <a href="https://github.com/sitespeedio/chrome-har/pull/75">#75</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[chrome-har 0.11.11]]></title>
<id>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.11</id>
<link href="https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.11"/>
<updated>2020-08-06T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix: Optional cookie object, see PR <a href="https://github.com/sitespeedio/chrome-har/pull/73">73</a>. Thank you <a href="https://github.com/mikedijkstra">Michael Dijkstra</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[chrome-har 0.11.10]]></title>
<id>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.10</id>
<link href="https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.10"/>
<updated>2020-07-29T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Parse extra info events (parse extra request data from the Network.requestWillBeSentExtraInfo event and parse extra response data from the Network.responseReceivedExtraInfo event), thank you <a href="https://github.com/mikedijkstra">Michael Dijkstra</a> for the PR <a href="https://github.com/sitespeedio/chrome-har/pull/71">#71</a>.</li>
</ul>
<ul>
<li>Update to day-js 1.8.31.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[chrome-har 0.11.9]]></title>
<id>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.9</id>
<link href="https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.9"/>
<updated>2020-05-26T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated dependencies: dayjs - 1.8.27, debug: 4.1.1, tough-cookie - 4.0.0, uuid - 8.0.0</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[chrome-har 0.11.7]]></title>
<id>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.7</id>
<link href="https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.7"/>
<updated>2020-03-09T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>And excluded the shrinkwrap file again.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[chrome-har 0.11.6]]></title>
<id>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.6</id>
<link href="https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.6"/>
<updated>2020-03-09T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Exclude the test folder from the release.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

101
docs/feed/chrome-har.rss Normal file
View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>chrome-har release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of chrome-har</description>
<lastBuildDate>Thu, 24 Feb 2022 13:43:37 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/chrome-har.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[chrome-har 0.13.0]]></title>
<link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.13.0</link>
<guid>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.13.0</guid>
<pubDate>Fri, 04 Feb 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Add _isLinkPreload on the request object if it is isLinkPreload <a href="https://github.com/sitespeedio/chrome-har/pull/94">#94</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[chrome-har 0.12.0]]></title>
<link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.12.0</link>
<guid>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.12.0</guid>
<pubDate>Thu, 29 Oct 2020 00:00:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[chrome-har 0.11.12]]></title>
<link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.12</link>
<guid>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.12</guid>
<pubDate>Wed, 09 Sep 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Removed test directory from the release, thank you <a href="https://github.com/yurynix">Yury Michurin</a> for the PR <a href="https://github.com/sitespeedio/chrome-har/pull/75">#75</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[chrome-har 0.11.11]]></title>
<link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.11</link>
<guid>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.11</guid>
<pubDate>Thu, 06 Aug 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix: Optional cookie object, see PR <a href="https://github.com/sitespeedio/chrome-har/pull/73">73</a>. Thank you <a href="https://github.com/mikedijkstra">Michael Dijkstra</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[chrome-har 0.11.10]]></title>
<link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.10</link>
<guid>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.10</guid>
<pubDate>Wed, 29 Jul 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Parse extra info events (parse extra request data from the Network.requestWillBeSentExtraInfo event and parse extra response data from the Network.responseReceivedExtraInfo event), thank you <a href="https://github.com/mikedijkstra">Michael Dijkstra</a> for the PR <a href="https://github.com/sitespeedio/chrome-har/pull/71">#71</a>.</li>
</ul>
<ul>
<li>Update to day-js 1.8.31.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[chrome-har 0.11.9]]></title>
<link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.9</link>
<guid>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.9</guid>
<pubDate>Tue, 26 May 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated dependencies: dayjs - 1.8.27, debug: 4.1.1, tough-cookie - 4.0.0, uuid - 8.0.0</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[chrome-har 0.11.7]]></title>
<link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.7</link>
<guid>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.7</guid>
<pubDate>Mon, 09 Mar 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>And excluded the shrinkwrap file again.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[chrome-har 0.11.6]]></title>
<link>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.6</link>
<guid>https://github.com/sitespeedio/chrome-har/blob/main/CHANGELOG.md#0.11.6</guid>
<pubDate>Mon, 09 Mar 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Exclude the test folder from the release.</li>
</ul>
]]></description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>chrome-trace-release-feed</id>
<title>chrome-trace release feed</title>
<updated>2021-10-29T18:25:09.435Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/chrome-trace.atom"/>
<subtitle>New releases and changelog feed of chrome-trace</subtitle>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
</feed>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>chrome-trace release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of chrome-trace</description>
<lastBuildDate>Fri, 29 Oct 2021 18:25:09 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/chrome-trace.rss" rel="self" type="application/rss+xml"/>
</channel>
</rss>

232
docs/feed/coach-core.atom Normal file
View File

@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>coach-core-release-feed</id>
<title>coach-core release feed</title>
<updated>2022-04-13T19:14:16.196Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/coach-core.atom"/>
<subtitle>New releases and changelog feed of coach-core</subtitle>
<logo>https://www.sitespeed.io/img/logos/coach.png</logo>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[coach-core 7.1.1]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.1</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.1"/>
<updated>2022-04-13T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgraded to PageXray 4.4.1 and Third Party Web 0.15.0.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 7.1.0]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.0</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.0"/>
<updated>2022-02-06T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Upgraded to PageXray 4.0.0.</li>
</ul>
<ul>
<li>Upgraded to third party web 0.13.0.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 7.0.0]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.0.0</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.0.0"/>
<updated>2021-12-01T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated third-party-web to 0.12.6.</li>
</ul>
<ul>
<li>Use Chrome(ium) render blocking information to know if a request is render blocking or not <a href="https://github.com/sitespeedio/coach-core/pull/66">#66</a>.</li>
</ul>
<ul>
<li>Report offending JavaScript assets if the JavaScript max limits kicks in <a href="https://github.com/sitespeedio/coach-core/pull/70">#70</a>.</li>
</ul>
<ul>
<li>New largest contentful paint advice <a href="https://github.com/sitespeedio/coach-core/pull/76">#76</a>.</li>
</ul>
<ul>
<li>New first contentful paint advice <a href="https://github.com/sitespeedio/coach-core/pull/77">#77</a>.</li>
</ul>
<ul>
<li>Added TBT in the CPU longtask advice <a href="https://github.com/sitespeedio/coach-core/pull/80">#80</a>.</li>
</ul>
<ul>
<li>Report content and transfer size for offending URLs <a href="https://github.com/sitespeedio/coach-core/pull/81">#81</a>.</li>
</ul>
<ul>
<li>Report offending assets with transfer/content size for page size limit <a href="https://github.com/sitespeedio/coach-core/pull/82">#82</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fix cases when JQuery is undefined. Thank you <a href="https://github.com/jajo-shubham">shubham jajodia</a> for PR <a href="https://github.com/sitespeedio/coach-core/pull/64">#64</a>.</li>
</ul>
<ul>
<li>A better way to find offending layout shifters. Thank you <a href="https://github.com/jajo-shubham">shubham jajodia</a> for PR <a href="https://github.com/sitespeedio/coach-core/pull/65">#65</a>.</li>
</ul>
<ul>
<li>Removed mentions aboout server push <a href="https://github.com/sitespeedio/coach-core/pull/69">#69</a></li>
</ul>
<ul>
<li>Added more information on how to debug CPU advice <a href="https://github.com/sitespeedio/coach-core/pull/71">#71</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Moved AMP advice to best practice instead of privacy <a href="https://github.com/sitespeedio/coach-core/pull/67">#67</a>.</li>
</ul>
<ul>
<li>Increased favicon max size advice from 5 to 10 kb <a href="https://github.com/sitespeedio/coach-core/pull/68">#68</a></li>
</ul>
<ul>
<li>Renamed the fastRender advice to avoidRenderBlocking <a href="https://github.com/sitespeedio/coach-core/pull/73">#73</a></li>
</ul>
<ul>
<li>Remove the third party async advice <a href="https://github.com/sitespeedio/coach-core/pull/74">#74</a></li>
</ul>
<ul>
<li>Updated the layout shift advice to use cumulative layout shift <a href="https://github.com/sitespeedio/coach-core/pull/75">#75</a></li>
</ul>
<ul>
<li>Changed id of the Google Tag Manager advice <a href="https://github.com/sitespeedio/coach-core/pull/79">#79</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 6.4.3]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.3</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.3"/>
<updated>2021-07-21T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated to latest PageXray and Third patrty web 0.12.4.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 6.4.2]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.2</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.2"/>
<updated>2021-07-05T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Make sure JQuery refs are set back to original ref <a href="https://github.com/sitespeedio/coach-core/pull/62">#62</a> see <a href="https://github.com/sitespeedio/coach-core/issues/61">#61</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 6.4.1]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.1</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.1"/>
<updated>2021-06-23T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Use all headers for Wappalyzer (before only the main document was used) <a href="https://github.com/sitespeedio/coach-core/pull/60">#60</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 6.4.0]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.0</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.0"/>
<updated>2021-06-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to PageXray 4.2.0 that adds support for getting render blocking info in Chrome.</li>
</ul>
<ul>
<li>Update wappalyzer-core from 6.5.32 to 6.6.0 <a href="https://github.com/sitespeedio/coach-core/pull/57">#57</a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Only look for GET request for private and caching headers <a href="https://github.com/sitespeedio/coach-core/pull/55">#55</a>. See <a href="https://github.com/sitespeedio/coach-core/issues/53">#53</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 6.3.3]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.3</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.3"/>
<updated>2021-04-14T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated the link about FLOC to use <a href="https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea">https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 6.3.2]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.2</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.2"/>
<updated>2021-04-13T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Catch when you test a URL without a domain see <a href="https://github.com/sitespeedio/sitespeed.io/issues/3043">https://github.com/sitespeedio/sitespeed.io/issues/3043</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 6.3.1]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.1</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.1"/>
<updated>2021-04-09T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Better check for the new FLoC privacy advice.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

203
docs/feed/coach-core.rss Normal file
View File

@ -0,0 +1,203 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>coach-core release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of coach-core</description>
<lastBuildDate>Wed, 13 Apr 2022 19:14:16 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<image>
<title>coach-core release feed</title>
<url>https://www.sitespeed.io/img/logos/coach.png</url>
<link>https://www.sitespeed.io</link>
</image>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/coach-core.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[coach-core 7.1.1]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.1</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.1</guid>
<pubDate>Wed, 13 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgraded to PageXray 4.4.1 and Third Party Web 0.15.0.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 7.1.0]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.0</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.0</guid>
<pubDate>Sun, 06 Feb 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Upgraded to PageXray 4.0.0.</li>
</ul>
<ul>
<li>Upgraded to third party web 0.13.0.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 7.0.0]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.0.0</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.0.0</guid>
<pubDate>Wed, 01 Dec 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated third-party-web to 0.12.6.</li>
</ul>
<ul>
<li>Use Chrome(ium) render blocking information to know if a request is render blocking or not <a href="https://github.com/sitespeedio/coach-core/pull/66">#66</a>.</li>
</ul>
<ul>
<li>Report offending JavaScript assets if the JavaScript max limits kicks in <a href="https://github.com/sitespeedio/coach-core/pull/70">#70</a>.</li>
</ul>
<ul>
<li>New largest contentful paint advice <a href="https://github.com/sitespeedio/coach-core/pull/76">#76</a>.</li>
</ul>
<ul>
<li>New first contentful paint advice <a href="https://github.com/sitespeedio/coach-core/pull/77">#77</a>.</li>
</ul>
<ul>
<li>Added TBT in the CPU longtask advice <a href="https://github.com/sitespeedio/coach-core/pull/80">#80</a>.</li>
</ul>
<ul>
<li>Report content and transfer size for offending URLs <a href="https://github.com/sitespeedio/coach-core/pull/81">#81</a>.</li>
</ul>
<ul>
<li>Report offending assets with transfer/content size for page size limit <a href="https://github.com/sitespeedio/coach-core/pull/82">#82</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fix cases when JQuery is undefined. Thank you <a href="https://github.com/jajo-shubham">shubham jajodia</a> for PR <a href="https://github.com/sitespeedio/coach-core/pull/64">#64</a>.</li>
</ul>
<ul>
<li>A better way to find offending layout shifters. Thank you <a href="https://github.com/jajo-shubham">shubham jajodia</a> for PR <a href="https://github.com/sitespeedio/coach-core/pull/65">#65</a>.</li>
</ul>
<ul>
<li>Removed mentions aboout server push <a href="https://github.com/sitespeedio/coach-core/pull/69">#69</a></li>
</ul>
<ul>
<li>Added more information on how to debug CPU advice <a href="https://github.com/sitespeedio/coach-core/pull/71">#71</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Moved AMP advice to best practice instead of privacy <a href="https://github.com/sitespeedio/coach-core/pull/67">#67</a>.</li>
</ul>
<ul>
<li>Increased favicon max size advice from 5 to 10 kb <a href="https://github.com/sitespeedio/coach-core/pull/68">#68</a></li>
</ul>
<ul>
<li>Renamed the fastRender advice to avoidRenderBlocking <a href="https://github.com/sitespeedio/coach-core/pull/73">#73</a></li>
</ul>
<ul>
<li>Remove the third party async advice <a href="https://github.com/sitespeedio/coach-core/pull/74">#74</a></li>
</ul>
<ul>
<li>Updated the layout shift advice to use cumulative layout shift <a href="https://github.com/sitespeedio/coach-core/pull/75">#75</a></li>
</ul>
<ul>
<li>Changed id of the Google Tag Manager advice <a href="https://github.com/sitespeedio/coach-core/pull/79">#79</a></li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 6.4.3]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.3</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.3</guid>
<pubDate>Wed, 21 Jul 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated to latest PageXray and Third patrty web 0.12.4.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 6.4.2]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.2</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.2</guid>
<pubDate>Mon, 05 Jul 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Make sure JQuery refs are set back to original ref <a href="https://github.com/sitespeedio/coach-core/pull/62">#62</a> see <a href="https://github.com/sitespeedio/coach-core/issues/61">#61</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 6.4.1]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.1</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.1</guid>
<pubDate>Wed, 23 Jun 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Use all headers for Wappalyzer (before only the main document was used) <a href="https://github.com/sitespeedio/coach-core/pull/60">#60</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 6.4.0]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.0</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.4.0</guid>
<pubDate>Wed, 02 Jun 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to PageXray 4.2.0 that adds support for getting render blocking info in Chrome.</li>
</ul>
<ul>
<li>Update wappalyzer-core from 6.5.32 to 6.6.0 <a href="https://github.com/sitespeedio/coach-core/pull/57">#57</a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Only look for GET request for private and caching headers <a href="https://github.com/sitespeedio/coach-core/pull/55">#55</a>. See <a href="https://github.com/sitespeedio/coach-core/issues/53">#53</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 6.3.3]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.3</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.3</guid>
<pubDate>Wed, 14 Apr 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated the link about FLOC to use <a href="https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea">https://www.eff.org/deeplinks/2021/03/googles-floc-terrible-idea</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 6.3.2]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.2</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.2</guid>
<pubDate>Tue, 13 Apr 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Catch when you test a URL without a domain see <a href="https://github.com/sitespeedio/sitespeed.io/issues/3043">https://github.com/sitespeedio/sitespeed.io/issues/3043</a></li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 6.3.1]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.1</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#6.3.1</guid>
<pubDate>Fri, 09 Apr 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Better check for the new FLoC privacy advice.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
</channel>
</rss>

141
docs/feed/coach.atom Normal file
View File

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>coach-release-feed</id>
<title>coach release feed</title>
<updated>2022-02-24T13:43:37.432Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/coach.atom"/>
<subtitle>New releases and changelog feed of coach</subtitle>
<logo>https://www.sitespeed.io/img/logos/coach.png</logo>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[coach 7.0.0]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#7.0.0</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#7.0.0"/>
<updated>2021-12-01T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to use latest Coach core and Browertime.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach 6.4.3]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#6.4.3</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#6.4.3"/>
<updated>2021-10-15T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to use latest Browsertime with latest Chromedriver</li>
</ul>
<ul>
<li>Updated Docker container to use latest Chrome/Firefox</li>
</ul>
<ul>
<li>Use Browsertime 11.0.0</li>
</ul>
<ul>
<li>Use Coach-code 6.0</li>
</ul>
<ul>
<li>Use latest Firefox and Chrome</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach 5.0.0]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#5.0.0</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#5.0.0"/>
<updated>2020-03-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Changed</h3>
<ul>
<li>We moved out the core functionality to <a href="https://github.com/sitespeedio/coach-core">coach-core</a>. This makes it easy to use the Coach in your own code.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach 4.5.0]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.5.0</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.5.0"/>
<updated>2020-02-20T00:00:00.000Z</updated>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach 4.4.1]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.1</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.1"/>
<updated>2020-02-07T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgraded to Browsertime 8.0.1</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach 4.4.0]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.0</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.0"/>
<updated>2020-02-05T00:00:00.000Z</updated>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach 4.3.1]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.1</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.1"/>
<updated>2020-01-10T00:00:00.000Z</updated>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach 4.3.0]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.0</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.0"/>
<updated>2019-12-12T00:00:00.000Z</updated>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach 4.2.0]]></title>
<id>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.2.0</id>
<link href="https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.2.0"/>
<updated>2019-11-02T00:00:00.000Z</updated>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

115
docs/feed/coach.rss Normal file
View File

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>coach release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of coach</description>
<lastBuildDate>Thu, 24 Feb 2022 13:43:37 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<image>
<title>coach release feed</title>
<url>https://www.sitespeed.io/img/logos/coach.png</url>
<link>https://www.sitespeed.io</link>
</image>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/coach.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[coach 7.0.0]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#7.0.0</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#7.0.0</guid>
<pubDate>Wed, 01 Dec 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to use latest Coach core and Browertime.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach 6.4.3]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#6.4.3</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#6.4.3</guid>
<pubDate>Fri, 15 Oct 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to use latest Browsertime with latest Chromedriver</li>
</ul>
<ul>
<li>Updated Docker container to use latest Chrome/Firefox</li>
</ul>
<ul>
<li>Use Browsertime 11.0.0</li>
</ul>
<ul>
<li>Use Coach-code 6.0</li>
</ul>
<ul>
<li>Use latest Firefox and Chrome</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach 5.0.0]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#5.0.0</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#5.0.0</guid>
<pubDate>Wed, 11 Mar 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Changed</h3>
<ul>
<li>We moved out the core functionality to <a href="https://github.com/sitespeedio/coach-core">coach-core</a>. This makes it easy to use the Coach in your own code.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach 4.5.0]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.5.0</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.5.0</guid>
<pubDate>Thu, 20 Feb 2020 00:00:00 GMT</pubDate>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach 4.4.1]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.1</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.1</guid>
<pubDate>Fri, 07 Feb 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgraded to Browsertime 8.0.1</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach 4.4.0]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.0</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.4.0</guid>
<pubDate>Wed, 05 Feb 2020 00:00:00 GMT</pubDate>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach 4.3.1]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.1</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.1</guid>
<pubDate>Fri, 10 Jan 2020 00:00:00 GMT</pubDate>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach 4.3.0]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.0</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.3.0</guid>
<pubDate>Thu, 12 Dec 2019 00:00:00 GMT</pubDate>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach 4.2.0]]></title>
<link>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.2.0</link>
<guid>https://github.com/sitespeedio/coach/blob/main/CHANGELOG.md#4.2.0</guid>
<pubDate>Sat, 02 Nov 2019 00:00:00 GMT</pubDate>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
</channel>
</rss>

210
docs/feed/compare.atom Normal file
View File

@ -0,0 +1,210 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>compare-release-feed</id>
<title>compare release feed</title>
<updated>2021-10-29T18:25:09.436Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/compare.atom"/>
<subtitle>New releases and changelog feed of compare</subtitle>
<logo>https://www.sitespeed.io/img/logos/compare.png</logo>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[compare 1.0.0]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#1.0.0</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#1.0.0"/>
<updated>2018-11-28T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Added support for using Github gists see <a href="https://github.com/sitespeedio/compare/issues/34">#34</a>.</li>
</ul>
<ul>
<li>Added support for using a config file to configure which HARs to test.</li>
</ul>
<ul>
<li>Added support for copy/paste directly you HAR, configuration file or a gist URL or id.</li>
</ul>
<ul>
<li>Refactor the CSS into Sass, development build process now uses BrowserSync.</li>
</ul>
<ul>
<li>Service worker added for offline support. Workbox is used to achieve this.</li>
</ul>
<ul>
<li>Added support for showing changes in request/responses if you compare the same page <a href="https://github.com/sitespeedio/compare/pull/63">#63</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>New internal structure and use the new configuration object all the way.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[compare 0.6.0]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.6.0</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.6.0"/>
<updated>2018-10-17T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Sort CPU events by name to make it easier to spot regressions</li>
</ul>
<ul>
<li>Upgraded to latest release of template7</li>
</ul>
<ul>
<li>Added more Visual Metrics.</li>
</ul>
<ul>
<li>Upgrad to PageXray 2.4.0</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[compare 0.5.1]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.1</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.1"/>
<updated>2018-06-01T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Layout -&gt; Rendering in latest Browsertime.</li>
</ul>
<ul>
<li>Upgraded to PerfCascade 2.5.2 fixiing Edge tab bug</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[compare 0.5.0]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.0</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.0"/>
<updated>2018-04-05T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>CPU metrics are now showed automatically.</li>
</ul>
<ul>
<li>Styled the PageXray info table to make it easier to read.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[compare 0.4.1]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.1</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.1"/>
<updated>2018-04-04T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Major code refactoring to make it easier to do changes in the future.</li>
</ul>
<ul>
<li>Uploading files failed on Firefox.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[compare 0.4.0]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.0</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.0"/>
<updated>2018-04-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Upgraded to PerfCascade 2.4.1</li>
</ul>
<ul>
<li>You can change/upload HAR files when you already compare two HARs.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>The layout in the PageXray table was dependent of the length of the URL. That could make some pages look really bad.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[compare 0.3.0]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.3.0</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.3.0"/>
<updated>2018-03-30T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Automatically load the HAR files if both files are given in the URL . Thanks <a href="https://github.com/Ivru">Ivru</a> for the PR <a href="https://github.com/sitespeedio/compare/pull/15">#15</a>.</li>
</ul>
<ul>
<li>You can automatically load one HAR file by adding ?har1=URL&amp;compare=1 as the full URL.</li>
</ul>
<ul>
<li>Updated to PageXray 2.2.1</li>
</ul>
<ul>
<li>You can now drag and drop one HAR file with multiple pages and compare the pages with each others <a href="https://github.com/sitespeedio/compare/issues/16">#16</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[compare 0.2.1]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.1</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.1"/>
<updated>2018-02-03T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgraded to PerfCascade 2.2.2 that makes HAR files from WebPageTest Linux render</li>
</ul>
<ul>
<li>Log errors to the console</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[compare 0.2.0]]></title>
<id>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.0</id>
<link href="https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.0"/>
<updated>2018-02-01T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Upgraded to PageXray 2.1.0 and added more CPU metrics</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

184
docs/feed/compare.rss Normal file
View File

@ -0,0 +1,184 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>compare release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of compare</description>
<lastBuildDate>Fri, 29 Oct 2021 18:25:09 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<image>
<title>compare release feed</title>
<url>https://www.sitespeed.io/img/logos/compare.png</url>
<link>https://www.sitespeed.io</link>
</image>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/compare.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[compare 1.0.0]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#1.0.0</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#1.0.0</guid>
<pubDate>Wed, 28 Nov 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Added support for using Github gists see <a href="https://github.com/sitespeedio/compare/issues/34">#34</a>.</li>
</ul>
<ul>
<li>Added support for using a config file to configure which HARs to test.</li>
</ul>
<ul>
<li>Added support for copy/paste directly you HAR, configuration file or a gist URL or id.</li>
</ul>
<ul>
<li>Refactor the CSS into Sass, development build process now uses BrowserSync.</li>
</ul>
<ul>
<li>Service worker added for offline support. Workbox is used to achieve this.</li>
</ul>
<ul>
<li>Added support for showing changes in request/responses if you compare the same page <a href="https://github.com/sitespeedio/compare/pull/63">#63</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>New internal structure and use the new configuration object all the way.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[compare 0.6.0]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.6.0</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.6.0</guid>
<pubDate>Wed, 17 Oct 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Sort CPU events by name to make it easier to spot regressions</li>
</ul>
<ul>
<li>Upgraded to latest release of template7</li>
</ul>
<ul>
<li>Added more Visual Metrics.</li>
</ul>
<ul>
<li>Upgrad to PageXray 2.4.0</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[compare 0.5.1]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.1</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.1</guid>
<pubDate>Fri, 01 Jun 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Layout -&gt; Rendering in latest Browsertime.</li>
</ul>
<ul>
<li>Upgraded to PerfCascade 2.5.2 fixiing Edge tab bug</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[compare 0.5.0]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.0</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.5.0</guid>
<pubDate>Thu, 05 Apr 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>CPU metrics are now showed automatically.</li>
</ul>
<ul>
<li>Styled the PageXray info table to make it easier to read.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[compare 0.4.1]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.1</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.1</guid>
<pubDate>Wed, 04 Apr 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Major code refactoring to make it easier to do changes in the future.</li>
</ul>
<ul>
<li>Uploading files failed on Firefox.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[compare 0.4.0]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.0</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.4.0</guid>
<pubDate>Mon, 02 Apr 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Upgraded to PerfCascade 2.4.1</li>
</ul>
<ul>
<li>You can change/upload HAR files when you already compare two HARs.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>The layout in the PageXray table was dependent of the length of the URL. That could make some pages look really bad.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[compare 0.3.0]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.3.0</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.3.0</guid>
<pubDate>Fri, 30 Mar 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Automatically load the HAR files if both files are given in the URL . Thanks <a href="https://github.com/Ivru">Ivru</a> for the PR <a href="https://github.com/sitespeedio/compare/pull/15">#15</a>.</li>
</ul>
<ul>
<li>You can automatically load one HAR file by adding ?har1=URL&amp;compare=1 as the full URL.</li>
</ul>
<ul>
<li>Updated to PageXray 2.2.1</li>
</ul>
<ul>
<li>You can now drag and drop one HAR file with multiple pages and compare the pages with each others <a href="https://github.com/sitespeedio/compare/issues/16">#16</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[compare 0.2.1]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.1</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.1</guid>
<pubDate>Sat, 03 Feb 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgraded to PerfCascade 2.2.2 that makes HAR files from WebPageTest Linux render</li>
</ul>
<ul>
<li>Log errors to the console</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[compare 0.2.0]]></title>
<link>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.0</link>
<guid>https://github.com/sitespeedio/compare/blob/main/CHANGELOG.md#0.2.0</guid>
<pubDate>Thu, 01 Feb 2018 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Upgraded to PageXray 2.1.0 and added more CPU metrics</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/compare.png" length="0" type="image/png"/>
</item>
</channel>
</rss>

33
docs/feed/humble.atom Normal file
View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>humble-release-feed</id>
<title>humble release feed</title>
<updated>2022-02-24T13:43:37.433Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/humble.atom"/>
<subtitle>New releases and changelog feed of humble</subtitle>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[humble 0.2.0]]></title>
<id>https://github.com/sitespeedio/humble/blob/main/CHANGELOG.md#0.2.0</id>
<link href="https://github.com/sitespeedio/humble/blob/main/CHANGELOG.md#0.2.0"/>
<updated>2020-01-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated throttle frontend to latest version where you can see throttling profiles set by using the API and with custom throttling support.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

26
docs/feed/humble.rss Normal file
View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>humble release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of humble</description>
<lastBuildDate>Thu, 24 Feb 2022 13:43:37 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/humble.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[humble 0.2.0]]></title>
<link>https://github.com/sitespeedio/humble/blob/main/CHANGELOG.md#0.2.0</link>
<guid>https://github.com/sitespeedio/humble/blob/main/CHANGELOG.md#0.2.0</guid>
<pubDate>Sat, 11 Jan 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated throttle frontend to latest version where you can see throttling profiles set by using the API and with custom throttling support.</li>
</ul>
]]></description>
</item>
</channel>
</rss>

180
docs/feed/pagexray.atom Normal file
View File

@ -0,0 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>pagexray-release-feed</id>
<title>pagexray release feed</title>
<updated>2022-04-05T17:59:28.824Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/pagexray.atom"/>
<subtitle>New releases and changelog feed of pagexray</subtitle>
<logo>https://www.sitespeed.io/img/logos/pagexray.png</logo>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[pagexray 4.4.1]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.1</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.1"/>
<updated>2022-04-05T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Bumped minimist to 1.2.6</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 4.4.0]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.0</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.0"/>
<updated>2022-02-04T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Fallback if mime types aren&#39;t mapped and use file endings. At the moment we fallback for some of the font types <a href="https://github.com/sitespeedio/pagexray/pull/109">#109</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 4.3.1]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.1</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.1"/>
<updated>2021-07-21T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Added missing in_body_parser_blocking render blocking info for Chrome.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 4.3.0]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.0</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.0"/>
<updated>2021-06-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Include request method per asset <a href="https://github.com/sitespeedio/pagexray/pull/105">#105</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 4.2.0]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.2.0</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.2.0"/>
<updated>2021-05-28T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Attach info about render blocking assets coming/working in Chrome 92 <a href="https://github.com/sitespeedio/pagexray/pull/104">#104</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 4.1.0]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.1.0</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.1.0"/>
<updated>2021-04-08T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Attach Google Web Vitals data from Browsertime <a href="https://github.com/sitespeedio/pagexray/pull/101">#101</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 4.0.0]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.0.0</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.0.0"/>
<updated>2020-12-12T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Changed</h3>
<ul>
<li>The new header structure actually sucked. Instead follow other tools and flatten headers returning an array <a href="https://github.com/sitespeedio/pagexray/pull/98">#98</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 3.1.1]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.1.1</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.1.1"/>
<updated>2020-12-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Ooops, missed to expose the third party cookie data <a href="https://github.com/sitespeedio/pagexray/pull/97">#97</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 3.1.0]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.1.0</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.1.0"/>
<updated>2020-12-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Get third party domains for cookies <a href="https://github.com/sitespeedio/pagexray/pull/96">#96</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[pagexray 3.0.0]]></title>
<id>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.0.0</id>
<link href="https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.0.0"/>
<updated>2020-12-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>PageXray can categorise connections as H3 <a href="https://github.com/sitespeedio/pagexray/pull/95">#95</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Getting cookies was broken. Fixed in <a href="https://github.com/sitespeedio/pagexray/pull/92">#92</a>, <a href="https://github.com/sitespeedio/pagexray/pull/93">#93</a> and <a href="https://github.com/sitespeedio/pagexray/pull/94">#94</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Request/response headers are now returned with name/value keys to handle headers with the same name. This will only affect you if you get assets from PageXray <a href="https://github.com/sitespeedio/pagexray/pull/93">#93</a>.</li>
</ul>
<ul>
<li>Removed cookie statistics field since it was broken. Report number of first and third party cookies instead.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

151
docs/feed/pagexray.rss Normal file
View File

@ -0,0 +1,151 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>pagexray release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of pagexray</description>
<lastBuildDate>Tue, 05 Apr 2022 17:59:28 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<image>
<title>pagexray release feed</title>
<url>https://www.sitespeed.io/img/logos/pagexray.png</url>
<link>https://www.sitespeed.io</link>
</image>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/pagexray.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[pagexray 4.4.1]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.1</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.1</guid>
<pubDate>Tue, 05 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Bumped minimist to 1.2.6</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 4.4.0]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.0</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.4.0</guid>
<pubDate>Fri, 04 Feb 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Fallback if mime types aren&#39;t mapped and use file endings. At the moment we fallback for some of the font types <a href="https://github.com/sitespeedio/pagexray/pull/109">#109</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 4.3.1]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.1</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.1</guid>
<pubDate>Wed, 21 Jul 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Added missing in_body_parser_blocking render blocking info for Chrome.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 4.3.0]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.0</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.3.0</guid>
<pubDate>Wed, 02 Jun 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Include request method per asset <a href="https://github.com/sitespeedio/pagexray/pull/105">#105</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 4.2.0]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.2.0</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.2.0</guid>
<pubDate>Fri, 28 May 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Attach info about render blocking assets coming/working in Chrome 92 <a href="https://github.com/sitespeedio/pagexray/pull/104">#104</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 4.1.0]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.1.0</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.1.0</guid>
<pubDate>Thu, 08 Apr 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Attach Google Web Vitals data from Browsertime <a href="https://github.com/sitespeedio/pagexray/pull/101">#101</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 4.0.0]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.0.0</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#4.0.0</guid>
<pubDate>Sat, 12 Dec 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Changed</h3>
<ul>
<li>The new header structure actually sucked. Instead follow other tools and flatten headers returning an array <a href="https://github.com/sitespeedio/pagexray/pull/98">#98</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 3.1.1]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.1.1</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.1.1</guid>
<pubDate>Fri, 11 Dec 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Ooops, missed to expose the third party cookie data <a href="https://github.com/sitespeedio/pagexray/pull/97">#97</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 3.1.0]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.1.0</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.1.0</guid>
<pubDate>Fri, 11 Dec 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Get third party domains for cookies <a href="https://github.com/sitespeedio/pagexray/pull/96">#96</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[pagexray 3.0.0]]></title>
<link>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.0.0</link>
<guid>https://github.com/sitespeedio/pagexray/blob/main/CHANGELOG.md#3.0.0</guid>
<pubDate>Fri, 11 Dec 2020 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>PageXray can categorise connections as H3 <a href="https://github.com/sitespeedio/pagexray/pull/95">#95</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Getting cookies was broken. Fixed in <a href="https://github.com/sitespeedio/pagexray/pull/92">#92</a>, <a href="https://github.com/sitespeedio/pagexray/pull/93">#93</a> and <a href="https://github.com/sitespeedio/pagexray/pull/94">#94</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Request/response headers are now returned with name/value keys to handle headers with the same name. This will only affect you if you get assets from PageXray <a href="https://github.com/sitespeedio/pagexray/pull/93">#93</a>.</li>
</ul>
<ul>
<li>Removed cookie statistics field since it was broken. Report number of first and third party cookies instead.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/pagexray.png" length="0" type="image/png"/>
</item>
</channel>
</rss>

File diff suppressed because it is too large Load Diff

229
docs/feed/sitespeed.io.atom Normal file
View File

@ -0,0 +1,229 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>sitespeed.io-release-feed</id>
<title>sitespeed.io release feed</title>
<updated>2022-04-22T06:29:42.461Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/atom.xml"/>
<subtitle>New releases and changelog feed of sitespeed.io</subtitle>
<logo>https://www.sitespeed.io/img/logos/sitespeed.io.png</logo>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[sitespeed.io 24.1.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#24.1.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#24.1.0"/>
<updated>2022-04-22T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Update Grafana auth settings to allow api token or basic auth, thank you <a href="https://github.com/vs-odessa">Vladimir Stepanov</a> for PR <a href="https://github.com/sitespeedio/sitespeed.io/pull/3627">#3627</a>.</li>
</ul>
<ul>
<li>Add TTFB to the metrics page <a href="https://github.com/sitespeedio/sitespeed.io/pull/3630">#3630</a>.</li>
</ul>
<ul>
<li>Use latest Coach core with updated PageXray and Third party web <a href="https://github.com/sitespeedio/sitespeed.io/pull/3629">#3629</a>.</li>
</ul>
<ul>
<li>Make it possible to disable annotations for Graphite. Set <code>--graphite.sendAnnotation false</code> to disable sending annotations <a href="https://github.com/sitespeedio/sitespeed.io/pull/3625">#3625</a>.</li>
</ul>
<ul>
<li>Show which run that is used in the metrics tab <a href="https://github.com/sitespeedio/sitespeed.io/pull/3631">#3631</a>.</li>
</ul>
<ul>
<li>Updated to <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1610---2022-04-20">Browsertime 16.1.0</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 24.0.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#24.0.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#24.0.0"/>
<updated>2022-04-06T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Use Firefox 99 and Edge/Edgedriver 100 in the Dockker container.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Better catch if Visual Metrics fails <a href="https://github.com/sitespeedio/sitespeed.io/pull/3619">#3619</a></li>
</ul>
<ul>
<li>Fixed JUnit/alias bug <a href="https://github.com/sitespeedio/sitespeed.io/pull/3620">#3620</a></li>
</ul>
<h3>Changed</h3>
<ul>
<li>Upgraded to <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1600---2022-04-05">Browsertime 16.0.0</a> that changed how the DNS is flushed. You need to add <code>--flushDNS</code> to your conifguration to flush the DNS between runs.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 23.7.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.7.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.7.0"/>
<updated>2022-03-31T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome/Chromedriver 100 and <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1540---2022-03-30">Browsertime 15.4.0</a>.</li>
</ul>
<ul>
<li>Updated the +1 container to use Lighthouse 9.5.0.</li>
</ul>
<ul>
<li>Updated to <a href="https://github.com/sitespeedio/sitespeed.io/pull/3615">Axe-core 4.4.1</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 23.6.1]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.6.1</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.6.1"/>
<updated>2022-03-25T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fixing text formatting in the JSON from latest run and make sure we display the time with UTC<a href="https://github.com/sitespeedio/sitespeed.io/pull/3611">#3611</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 23.6.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.6.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.6.0"/>
<updated>2022-03-25T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Various fixes to add more content to the JSON stored from the latest run, making it easier to show more meta data for a run in Grafana <a href="https://github.com/sitespeedio/sitespeed.io/pull/3607">#3607</a>, <a href="https://github.com/sitespeedio/sitespeed.io/pull/3609">#3609</a> and <a href="https://github.com/sitespeedio/sitespeed.io/pull/3610">#3610</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 23.5.2]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.5.2</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.5.2"/>
<updated>2022-03-22T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated to latest NodeJS and Ubuntu updates in the Docker container with some security updates<a href="https://github.com/sitespeedio/sitespeed.io/pull/3606">#3306</a>. Also updated the slim container with latest NodeJS.</li>
</ul>
<ul>
<li>Make sure the shrinkwrap file is used when building the container <a href="https://github.com/sitespeedio/sitespeed.io/pull/3604">#3604</a> and (hopefully) fix so that .dockerignore is not ignored when Github Actions build the containers.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 23.5.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.5.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.5.0"/>
<updated>2022-03-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>The -slim Docker container now uses Firefox 98.</li>
</ul>
<ul>
<li>Updated Grafana to latest 8.4.3 in the Docker compose file.</li>
</ul>
<ul>
<li>Updated <a href="https://github.com/sitespeedio/grafana-bootstrap-docker/tree/main/dashboards/graphite">Graphite dashboards</a> to use Timeseries graphs instead of old &quot;Graph&quot;.</li>
</ul>
<ul>
<li>You can use <code>-o</code> or <code>--open</code> or <code>--view</code> to open the result page after you run sitespeed.io on Mac and Linux <a href="https://github.com/sitespeedio/sitespeed.io/pull/3596">#3569</a>.</li>
</ul>
<ul>
<li>Open the result with <code>-o</code> on Linux using xdg-open <a href="https://github.com/sitespeedio/sitespeed.io/pull/3597">#3597</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 23.4.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.4.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.4.0"/>
<updated>2022-03-09T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Firefox 98 in the Docker container <a href="https://github.com/sitespeedio/sitespeed.io/pull/3592">#3592</a>.</li>
</ul>
<ul>
<li>Added link to each run in the side by side metric page, making it easier to go to the correct run <a href="https://github.com/sitespeedio/sitespeed.io/pull/3593">#3593</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 23.3.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.3.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.3.0"/>
<updated>2022-03-07T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>The +1 container is upgraded to use Lighthouse 9.4.0.</li>
</ul>
<ul>
<li>Updated to <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1530---2022-03-07">Browsertime 15.3.0</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 23.2.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.2.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.2.0"/>
<updated>2022-03-05T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome and Edge 99 in the Docker container. Updated to Chromedriver and Edgedriver 99 <a href="https://github.com/sitespeedio/sitespeed.io/pull/3590">#3590</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>If you use alias and budget files, the outcome (result budget json and others) should use the alias of the URL instead of the URL <a href="https://github.com/sitespeedio/sitespeed.io/pull/3582">#3582</a>.</li>
</ul>
<ul>
<li>Ignore sustainable.setup messages when storing analysistorer <a href="https://github.com/sitespeedio/sitespeed.io/pull/3587">#3578</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

200
docs/feed/sitespeed.io.rss Normal file
View File

@ -0,0 +1,200 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>sitespeed.io release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of sitespeed.io</description>
<lastBuildDate>Fri, 22 Apr 2022 06:29:42 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<image>
<title>sitespeed.io release feed</title>
<url>https://www.sitespeed.io/img/logos/sitespeed.io.png</url>
<link>https://www.sitespeed.io</link>
</image>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/rss.xml" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[sitespeed.io 24.1.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#24.1.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#24.1.0</guid>
<pubDate>Fri, 22 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Update Grafana auth settings to allow api token or basic auth, thank you <a href="https://github.com/vs-odessa">Vladimir Stepanov</a> for PR <a href="https://github.com/sitespeedio/sitespeed.io/pull/3627">#3627</a>.</li>
</ul>
<ul>
<li>Add TTFB to the metrics page <a href="https://github.com/sitespeedio/sitespeed.io/pull/3630">#3630</a>.</li>
</ul>
<ul>
<li>Use latest Coach core with updated PageXray and Third party web <a href="https://github.com/sitespeedio/sitespeed.io/pull/3629">#3629</a>.</li>
</ul>
<ul>
<li>Make it possible to disable annotations for Graphite. Set <code>--graphite.sendAnnotation false</code> to disable sending annotations <a href="https://github.com/sitespeedio/sitespeed.io/pull/3625">#3625</a>.</li>
</ul>
<ul>
<li>Show which run that is used in the metrics tab <a href="https://github.com/sitespeedio/sitespeed.io/pull/3631">#3631</a>.</li>
</ul>
<ul>
<li>Updated to <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1610---2022-04-20">Browsertime 16.1.0</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 24.0.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#24.0.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#24.0.0</guid>
<pubDate>Wed, 06 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Use Firefox 99 and Edge/Edgedriver 100 in the Dockker container.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Better catch if Visual Metrics fails <a href="https://github.com/sitespeedio/sitespeed.io/pull/3619">#3619</a></li>
</ul>
<ul>
<li>Fixed JUnit/alias bug <a href="https://github.com/sitespeedio/sitespeed.io/pull/3620">#3620</a></li>
</ul>
<h3>Changed</h3>
<ul>
<li>Upgraded to <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1600---2022-04-05">Browsertime 16.0.0</a> that changed how the DNS is flushed. You need to add <code>--flushDNS</code> to your conifguration to flush the DNS between runs.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 23.7.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.7.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.7.0</guid>
<pubDate>Thu, 31 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome/Chromedriver 100 and <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1540---2022-03-30">Browsertime 15.4.0</a>.</li>
</ul>
<ul>
<li>Updated the +1 container to use Lighthouse 9.5.0.</li>
</ul>
<ul>
<li>Updated to <a href="https://github.com/sitespeedio/sitespeed.io/pull/3615">Axe-core 4.4.1</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 23.6.1]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.6.1</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.6.1</guid>
<pubDate>Fri, 25 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fixing text formatting in the JSON from latest run and make sure we display the time with UTC<a href="https://github.com/sitespeedio/sitespeed.io/pull/3611">#3611</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 23.6.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.6.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.6.0</guid>
<pubDate>Fri, 25 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Various fixes to add more content to the JSON stored from the latest run, making it easier to show more meta data for a run in Grafana <a href="https://github.com/sitespeedio/sitespeed.io/pull/3607">#3607</a>, <a href="https://github.com/sitespeedio/sitespeed.io/pull/3609">#3609</a> and <a href="https://github.com/sitespeedio/sitespeed.io/pull/3610">#3610</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 23.5.2]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.5.2</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.5.2</guid>
<pubDate>Tue, 22 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated to latest NodeJS and Ubuntu updates in the Docker container with some security updates<a href="https://github.com/sitespeedio/sitespeed.io/pull/3606">#3306</a>. Also updated the slim container with latest NodeJS.</li>
</ul>
<ul>
<li>Make sure the shrinkwrap file is used when building the container <a href="https://github.com/sitespeedio/sitespeed.io/pull/3604">#3604</a> and (hopefully) fix so that .dockerignore is not ignored when Github Actions build the containers.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 23.5.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.5.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.5.0</guid>
<pubDate>Fri, 11 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>The -slim Docker container now uses Firefox 98.</li>
</ul>
<ul>
<li>Updated Grafana to latest 8.4.3 in the Docker compose file.</li>
</ul>
<ul>
<li>Updated <a href="https://github.com/sitespeedio/grafana-bootstrap-docker/tree/main/dashboards/graphite">Graphite dashboards</a> to use Timeseries graphs instead of old &quot;Graph&quot;.</li>
</ul>
<ul>
<li>You can use <code>-o</code> or <code>--open</code> or <code>--view</code> to open the result page after you run sitespeed.io on Mac and Linux <a href="https://github.com/sitespeedio/sitespeed.io/pull/3596">#3569</a>.</li>
</ul>
<ul>
<li>Open the result with <code>-o</code> on Linux using xdg-open <a href="https://github.com/sitespeedio/sitespeed.io/pull/3597">#3597</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 23.4.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.4.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.4.0</guid>
<pubDate>Wed, 09 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Firefox 98 in the Docker container <a href="https://github.com/sitespeedio/sitespeed.io/pull/3592">#3592</a>.</li>
</ul>
<ul>
<li>Added link to each run in the side by side metric page, making it easier to go to the correct run <a href="https://github.com/sitespeedio/sitespeed.io/pull/3593">#3593</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 23.3.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.3.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.3.0</guid>
<pubDate>Mon, 07 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>The +1 container is upgraded to use Lighthouse 9.4.0.</li>
</ul>
<ul>
<li>Updated to <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1530---2022-03-07">Browsertime 15.3.0</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 23.2.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.2.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#23.2.0</guid>
<pubDate>Sat, 05 Mar 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome and Edge 99 in the Docker container. Updated to Chromedriver and Edgedriver 99 <a href="https://github.com/sitespeedio/sitespeed.io/pull/3590">#3590</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>If you use alias and budget files, the outcome (result budget json and others) should use the alias of the URL instead of the URL <a href="https://github.com/sitespeedio/sitespeed.io/pull/3582">#3582</a>.</li>
</ul>
<ul>
<li>Ignore sustainable.setup messages when storing analysistorer <a href="https://github.com/sitespeedio/sitespeed.io/pull/3587">#3578</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
</channel>
</rss>

132
docs/feed/throttle.atom Normal file
View File

@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>throttle-release-feed</id>
<title>throttle release feed</title>
<updated>2022-04-20T11:37:49.769Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
<email>peter@soulgalore.com</email>
<uri>https://www.peterhedenskog.com</uri>
</author>
<link rel="alternate" href="https://www.sitespeed.io"/>
<link rel="self" href="https://www.sitespeed.io/feed/throttle.atom"/>
<subtitle>New releases and changelog feed of throttle</subtitle>
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[throttle 4.0.0]]></title>
<id>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.0</id>
<link href="https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.0"/>
<updated>2022-04-14T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated dev dependencies to latest versions <a href="https://github.com/sitespeedio/throttle/pull/68">#68</a></li>
</ul>
<h3>Changed</h3>
<ul>
<li>Converting the project to ES6 module. If you run Throttle by command line it will work exactly as before except that we dropped support for NodeJS 10 <a href="https://github.com/sitespeedio/throttle/pull/67">#67</a>. You can read <a href="https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c">Sindre Sorhus ESM package guide</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[throttle 3.1.1]]></title>
<id>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.1.1</id>
<link href="https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.1.1"/>
<updated>2022-04-19T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated minimist dependency.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[throttle 3.1.0]]></title>
<id>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.1.0</id>
<link href="https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.1.0"/>
<updated>2021-12-26T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Add support for setting packet loss. Add <code>--packetLoss</code> and set the loss in percentage.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[throttle 3.0.0]]></title>
<id>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.0.0</id>
<link href="https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.0.0"/>
<updated>2021-08-09T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Changed</h3>
<ul>
<li>When you run on Mac OS we changed so localhost traffic is not throttled by default. To throttle on localhost use <code>--localhost</code>. This makes sence if you use WebDriver to drive your browser on your local machine. And Mac OS now works the same as Linux.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[throttle 2.1.2]]></title>
<id>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.2</id>
<link href="https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.2"/>
<updated>2021-07-29T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix breakage when multiple default routes are declared , thank you <a href="https://github.com/andyrichardson">Andy Richardson</a> for PR <a href="https://github.com/sitespeedio/throttle/pull/62">#62</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[throttle 2.1.1]]></title>
<id>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.1</id>
<link href="https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.1"/>
<updated>2021-03-19T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>A better check for missing net-tools on Linux, thank you <a href="https://github.com/radum">Radu Micu</a> for the PR <a href="https://github.com/sitespeedio/throttle/pull/56">#56</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[throttle 2.1.0]]></title>
<id>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.0</id>
<link href="https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.0"/>
<updated>2021-03-10T00:00:00.000Z</updated>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[throttle 2.0.2]]></title>
<id>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.0.2</id>
<link href="https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.0.2"/>
<updated>2020-09-10T00:00:00.000Z</updated>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
</feed>

97
docs/feed/throttle.rss Normal file
View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>throttle release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of throttle</description>
<lastBuildDate>Wed, 20 Apr 2022 11:37:49 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/throttle.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[throttle 4.0.0]]></title>
<link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.0</link>
<guid>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#4.0.0</guid>
<pubDate>Thu, 14 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated dev dependencies to latest versions <a href="https://github.com/sitespeedio/throttle/pull/68">#68</a></li>
</ul>
<h3>Changed</h3>
<ul>
<li>Converting the project to ES6 module. If you run Throttle by command line it will work exactly as before except that we dropped support for NodeJS 10 <a href="https://github.com/sitespeedio/throttle/pull/67">#67</a>. You can read <a href="https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c">Sindre Sorhus ESM package guide</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[throttle 3.1.1]]></title>
<link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.1.1</link>
<guid>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.1.1</guid>
<pubDate>Tue, 19 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated minimist dependency.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[throttle 3.1.0]]></title>
<link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.1.0</link>
<guid>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.1.0</guid>
<pubDate>Sun, 26 Dec 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Add support for setting packet loss. Add <code>--packetLoss</code> and set the loss in percentage.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[throttle 3.0.0]]></title>
<link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.0.0</link>
<guid>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#3.0.0</guid>
<pubDate>Mon, 09 Aug 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Changed</h3>
<ul>
<li>When you run on Mac OS we changed so localhost traffic is not throttled by default. To throttle on localhost use <code>--localhost</code>. This makes sence if you use WebDriver to drive your browser on your local machine. And Mac OS now works the same as Linux.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[throttle 2.1.2]]></title>
<link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.2</link>
<guid>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.2</guid>
<pubDate>Thu, 29 Jul 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix breakage when multiple default routes are declared , thank you <a href="https://github.com/andyrichardson">Andy Richardson</a> for PR <a href="https://github.com/sitespeedio/throttle/pull/62">#62</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[throttle 2.1.1]]></title>
<link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.1</link>
<guid>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.1</guid>
<pubDate>Fri, 19 Mar 2021 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>A better check for missing net-tools on Linux, thank you <a href="https://github.com/radum">Radu Micu</a> for the PR <a href="https://github.com/sitespeedio/throttle/pull/56">#56</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[throttle 2.1.0]]></title>
<link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.0</link>
<guid>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.1.0</guid>
<pubDate>Wed, 10 Mar 2021 00:00:00 GMT</pubDate>
</item>
<item>
<title><![CDATA[throttle 2.0.2]]></title>
<link>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.0.2</link>
<guid>https://github.com/sitespeedio/throttle/blob/main/CHANGELOG.md#2.0.2</guid>
<pubDate>Thu, 10 Sep 2020 00:00:00 GMT</pubDate>
</item>
</channel>
</rss>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -970,7 +970,7 @@ module.exports.parseCommandLine = function parseCommandLine() {
.option('browsertime.block', {
alias: 'block',
describe:
'Domain to block. Add multiple instances to add multiple domains that will be blocked. Only works in Chrome and Firefox.',
'Domain or URL or URL pattern to block. If you use Chrome you can also use --blockDomainsExcept (that is more performant). Works in Chrome/Edge. For Firefox you can only block domains.',
group: 'Browser'
})
.option('browsertime.basicAuth', {
@ -991,6 +991,12 @@ module.exports.parseCommandLine = function parseCommandLine() {
describe: 'Https proxy (host:port)',
group: 'proxy'
})
.option('browsertime.flushDNS', {
alias: 'flushDNS',
describe:
'Flush the DNS between runs (works on Mac OS and Linux). The user needs sudo rights to flush the DNS.',
group: 'Browser'
})
.option('browsertime.headless', {
alias: 'headless',
type: 'boolean',
@ -1487,8 +1493,9 @@ module.exports.parseCommandLine = function parseCommandLine() {
describe: 'Give your test a name.'
})
.option('open', {
alias: 'o',
describe: 'Open your test result in your default browser (Mac OS only).'
alias: ['o', 'view'],
describe:
'Open your test result in your default browser (Mac OS or Linux with xdg-open).'
})
.option('slug', {
describe:

View File

@ -29,7 +29,8 @@ function shouldIgnoreMessage(message) {
'ftp.finished',
'graphite.setup',
'influxdb.setup',
'grafana.setup'
'grafana.setup',
'sustainable.setup'
].indexOf(message.type) >= 0
);
}

View File

@ -11,24 +11,29 @@ exports.writeJunit = function (results, dir, options) {
const urls = Object.keys(merge({}, results.failing, results.working));
for (const url of urls) {
const parsedUrl = urlParser.parse(url);
const fineUrl =
// The URL can be an alias
let name = url;
if (url.startsWith('http')) {
const parsedUrl = urlParser.parse(url);
name = url.startsWith('http') ? url : url;
parsedUrl.hostname.replace(/\./g, '_') +
'.' +
parsedUrl.path.replace(/\./g, '_').replace(/\//g, '_');
'.' +
parsedUrl.path.replace(/\./g, '_').replace(/\//g, '_');
}
const suite = builder
.testSuite()
.name(
options.budget.friendlyName
? options.budget.friendlyName
: 'sitespeed.io' + '.' + fineUrl
: 'sitespeed.io' + '.' + name
);
if (results.failing[url]) {
for (const result of results.failing[url]) {
suite
.testCase()
.className(fineUrl)
.className(name)
.name(result.type + '.' + result.metric)
.failure(
result.metric + ' is ' + result.friendlyValue ||
@ -46,7 +51,7 @@ exports.writeJunit = function (results, dir, options) {
for (const result of results.working[url]) {
suite
.testCase()
.className(fineUrl)
.className(name)
.name(result.type + '.' + result.metric)
.standardOutput(
result.metric + ' is ' + result.friendlyValue ||

View File

@ -166,14 +166,18 @@ module.exports = {
}
// group working/failing per URL
if (failing.length > 0) {
result.failing[message.url] = result.failing[message.url]
? result.failing[message.url].concat(failing)
result.failing[alias || message.url] = result.failing[
alias || message.url
]
? result.failing[alias || message.url].concat(failing)
: failing;
}
if (working.length > 0) {
result.working[message.url] = result.working[message.url]
? result.working[message.url].concat(working)
result.working[alias || message.url] = result.working[
alias || message.url
]
? result.working[alias || message.url].concat(working)
: working;
}
}

View File

@ -10,7 +10,7 @@ module.exports = {
},
auth: {
describe:
'The Grafana auth/bearer value used when sending annotations to Grafana. See http://docs.grafana.org/http_api/auth/#authentication-api',
'The Grafana auth/bearer value used when sending annotations to Grafana. If you do not set Bearer/Auth, Bearer is automatically set. See http://docs.grafana.org/http_api/auth/#authentication-api',
group: 'Grafana'
},
annotationTitle: {

View File

@ -98,7 +98,14 @@ module.exports = {
// If Grafana is behind auth, use it!
if (options.grafana.auth) {
log.debug('Using auth for Grafana');
postOptions.headers.Authorization = 'Bearer ' + options.grafana.auth;
if (
options.grafana.auth.startsWith('Bearer') ||
options.grafana.auth.startsWith('Basic')
) {
postOptions.headers.Authorization = options.grafana.auth;
} else {
postOptions.headers.Authorization = 'Bearer ' + options.grafana.auth;
}
}
log.verbose('Send annotation to Grafana: %j', postData);
return new Promise((resolve, reject) => {

View File

@ -59,6 +59,13 @@ module.exports = {
'Include screenshot (from Browsertime/WebPageTest) in the annotation. You need to specify a --resultBaseURL for this to work.',
group: 'Graphite'
},
sendAnnotation: {
default: true,
type: 'boolean',
describe:
'Send annotations when a run is finished. You need to specify a --resultBaseURL for this to work. However if you for example use a Prometheus exporter, you may want to make sure annotations are not sent, then set it to false.',
group: 'Graphite'
},
annotationRetentionMinutes: {
type: 'number',
describe:

View File

@ -60,7 +60,7 @@ module.exports = {
this.messageTypesToFireAnnotations = [];
this.receivedTypesThatFireAnnotations = {};
this.make = context.messageMaker('graphite').make;
this.sendAnnotation = true;
this.sendAnnotation = opts.sendAnnotation || true;
this.alias = {};
this.wptExtras = {};
this.usingBrowsertime = false;

View File

@ -160,13 +160,17 @@ class HTMLBuilder {
for (const url of Object.keys(budget.working)) {
totalWorking = totalWorking + budget.working[url].length;
}
const aliasToUrl = {};
for (let url of Object.keys(options.urlsMetaData)) {
aliasToUrl[options.urlsMetaData[url].urlAlias] = url;
}
this.summary.budget = {
pageTitle: `Performance budget for ${name} with ${totalWorking} working and ${totalFailing} failing budgets.`,
pageDescription: 'The list of failing and working performance budgets.',
budget,
totalFailing,
totalWorking,
alias: options.urlsMetaData
aliasToUrl
};
}

View File

@ -4,7 +4,7 @@ module.exports = {
pickMedianRun(runs, pageInfo) {
// Choose the median run. Early first version, in the future we can make
// this configurable through the CLI
// If we have SpeedIndex use that else backup with RUM SpeedIndex
// If we have SpeedIndex use that else backup with loadEventEnd
const speedIndexMedian = get(
pageInfo,
@ -17,6 +17,8 @@ module.exports = {
if (speedIndexMedian) {
for (let run of runs) {
if (
// https://github.com/sitespeedio/sitespeed.io/issues/3618
run.data.browsertime.run.visualMetrics &&
speedIndexMedian === run.data.browsertime.run.visualMetrics.SpeedIndex
) {
return {

View File

@ -2,12 +2,15 @@ extends ./layout.pug
include _tableMixins
mixin row(budget)
each results, url in budget
each results, urlOrAlias in budget
each result in results
tr
td
a(href=url)= alias[url] ? alias[url].urlAlias : url
p #{alias[url] ? url : ''}
if (urlOrAlias && urlOrAlias.startsWith('http'))
a(href=urlOrAlias)= urlOrAlias
else
a(href=aliasToUrl[urlOrAlias])= urlOrAlias
p #{aliasToUrl[urlOrAlias]}
td #{result.metric} with value #{result.friendlyValue || result.value} limit #{result.limitType} #{result.friendlyLimit || result.limit}
block content

View File

@ -38,6 +38,9 @@ if browsertime
a(href='#server-timings') Server timings
| &nbsp;|&nbsp;
p
small #{ medianRun ? 'Data from run ' + medianRun.runIndex : ''}
- baseHelpURL = rootPath + 'help.html#';
- const defaultVisualMetrics = ['SpeedIndex','FirstVisualChange','LastVisualChange','VisualProgress', 'PerceptualSpeedIndexProgress', 'ContentfulSpeedIndexProgress', 'videoRecordingStart', 'PerceptualSpeedIndex', 'ContentfulSpeedIndex', 'LastMeaningfulPaint', 'LargestImage', 'Heading' ,'VisualReadiness','VisualComplete85', 'VisualComplete95','VisualComplete99'];
@ -156,6 +159,10 @@ if browsertime
table
tr
th(colspan='2') Extra timings
tr
td
a(href=baseHelpURL + 'ttfb') TTFB
td.number #{h.time.ms(timings.ttfb.toFixed(0))}
if (timings.paintTiming && Object.keys(timings.paintTiming).length > 0)
- const paintTimingHelper = { "first-contentful-paint": {"name": 'First Contentful Paint (FCP)', "friendly": "first-contentful-paint"}, "first-paint": {"name": 'First Paint', "friendly": "firstPaint" }};
each value, name in timings.paintTiming
@ -289,7 +296,10 @@ if browsertime
td #{element.name}
if (element.filename)
| (#{element.filename})
td #{visualMetrics[element.name] ? h.time.ms(visualMetrics[element.name].toFixed(0)): ''}
if element && visualMetrics && visualMetrics[element.name]
td #{visualMetrics[element.name] ? h.time.ms(visualMetrics[element.name].toFixed(0)): ''}
else
td
td #{element.x}
td #{element.y}
td #{element.width}

View File

@ -52,8 +52,11 @@ block content
tr
td
b #{friendly.name}
- let pageIndex = 1
each page in runPages
td #{friendly.format(get (page, 'data.' + tool + '.run.' + (friendly.runPath || friendly.path)))}
td
a(href=pageIndex + '.html') #{friendly.format(get (page, 'data.' + tool + '.run.' + (friendly.runPath || friendly.path)))}
- pageIndex++
td #{friendly.format(get (mySummary, 'data.' + tool + '.pageSummary.statistics.' + friendly.runPath + '.median', ''))}
td #{friendly.format(get (mySummary, 'data.' + tool + '.pageSummary.statistics.' + friendly.runPath + '.mean', ''))}
td #{friendly.format(get (mySummary, 'data.' + tool + '.pageSummary.statistics.' + friendly.runPath + '.stddev', ''))}

View File

@ -1,13 +1,21 @@
'use strict';
const path = require('path');
const osName = require('os-name');
const getos = require('getos');
const { promisify } = require('util');
const getOS = promisify(getos);
const os = require('os');
const get = require('lodash.get');
const graphiteUtil = require('../../support/tsdbUtil');
const helpers = require('../../support/helpers');
module.exports = {
open(context, options) {
this.storageManager = context.storageManager;
this.alias = {};
this.options = options;
this.context = context;
},
async processMessage(message) {
switch (message.type) {
@ -17,6 +25,11 @@ module.exports = {
break;
}
case 'browsertime.browser': {
this.browserData = message.data;
break;
}
case 'browsertime.config': {
if (message.data.screenshot) {
this.useScreenshots = message.data.screenshot;
@ -29,6 +42,7 @@ module.exports = {
// Only use the first one for now
if (message.iteration === 1 && this.options.copyLatestFilesToBase) {
const options = this.options;
const browserData = this.browserData;
const baseDir = this.storageManager.getBaseDir();
// Hack to get out of the date dir
const newPath = path.resolve(baseDir, '..');
@ -95,11 +109,14 @@ module.exports = {
);
}
const timestamp = this.context.timestamp.format(
'YYYY-MM-DD HH:mm:ss Z'
);
// Also store a JSON with data that we can use later
const json = {
url: message.url,
alias: this.alias[message.url],
timestamp: message.data.timestamp,
timestamp,
iterations: options.browsertime.iterations,
name: options.name
};
@ -122,6 +139,64 @@ module.exports = {
json.android.androidVersion = message.data.android.androidVersion;
}
json.browser = {};
json.browser.name = helpers.cap(get(browserData, 'browser.name'));
json.browser.version = get(browserData, 'browser.version', 'unknown');
json.friendlyHTML = `<b><a href="${message.url}">${
json.alias ? json.alias : message.url
}</a></b> ${helpers.plural(
options.browsertime.iterations,
'iteration'
)} at <i>${json.timestamp}</i> using ${json.browser.name} ${
json.browser.version
}`;
if (options.mobile) {
json.friendlyHTML += ` (emulating mobile)`;
}
if (options.multi) {
json.friendlyHTML += ` as a multi page test`;
}
if (options.replay) {
json.friendlyHTML += ' using a replay proxy';
}
if (!options.mobile && !options.ios && !browserData.android) {
json.friendlyHTML += ' with viewport ' + options.viewPort;
}
if (browserData.android) {
json.friendlyHTML += ` on ${browserData.android.model} Android version ${browserData.android.androidVersion} [${browserData.android.id}].`;
} else if (message.data.ios) {
json.friendlyHTML += ` ${message.data.ios.deviceName} [${message.data.ios.deviceUDID}].`;
} else {
// We are testing on desktop
let osInfo = osName();
if (os.platform() === 'linux') {
const linux = await getOS();
osInfo = `${linux.dist} ${linux.release}`;
}
json.friendlyHTML += options.browsertime.docker
? ' using Docker ' + osInfo
: ' on ' + osInfo;
}
// Hack to add a result URL
if (this.context.resultUrls.hasBaseUrl()) {
let resultURL =
this.context.resultUrls.absoluteSummaryPageUrl(
message.url,
this.alias[message.url]
) + 'index.html';
json.friendlyHTML +=
' [<b><a href="' + resultURL + '">result</a></b>].';
json.result = resultURL;
}
const data = JSON.stringify(json, null, 0);
return this.storageManager.writeDataToDir(
data,

4710
npm-shrinkwrap.json generated

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
"sitespeed.io": "./bin/sitespeed.js",
"sitespeed.io-wpr": "./bin/browsertimeWebPageReplay.js"
},
"version": "23.1.0",
"version": "24.1.0",
"description": "Analyze the web performance of your site",
"keywords": [
"performance",
@ -37,24 +37,30 @@
"bugs": {
"url": "https://github.com/sitespeedio/sitespeed.io/issues"
},
"ava": {
"files": [
"test/**/*",
"!test/prepostscripts",
"!test/runWithoutCli.js",
"!test/data"
]
},
"scripts": {
"lint": "eslint . && npm run pug-lint",
"lint:fix": "eslint . --fix",
"eslint-check": "eslint --print-config .eslintrc.json | eslint-config-prettier-check",
"pug-lint": "pug-lint lib/plugins/html/templates",
"test": "mocha",
"test": "ava",
"check-licenses": "tools/check-licenses.js",
"build:css": "sass lib/plugins/html/src/sass/main.scss > lib/plugins/html/assets/css/index.css && cleancss -o lib/plugins/html/assets/css/index.min.css lib/plugins/html/assets/css/index.css && rm lib/plugins/html/assets/css/index.css",
"generate:assets": "mkdir -p assets/$npm_package_version && cp -R lib/plugins/html/assets/ assets/$npm_package_version/"
},
"engines": {
"node": ">=10.13.0"
"node": ">=14.19.1"
},
"devDependencies": {
"bluebird": "3.5.5",
"chai": "4.2.0",
"chai-as-promised": "7.1.1",
"changelog-parser": "2.8.0",
"ava": "4.0.1",
"changelog-parser": "2.8.1",
"clean-css-cli": "4.3.0",
"eslint": "8.0.0",
"eslint-config-prettier": "8.3.0",
@ -62,7 +68,7 @@
"feed": "4.2.2",
"jsdoc": "^3.6.7",
"license-checker": "^16.0.0",
"mocha": "^5.0.4",
"marked": "4.0.12",
"sass": "1.34.0",
"prettier": "2.4.1",
"pug-lint": "^2.6.0",
@ -70,15 +76,15 @@
},
"main": "./lib/sitespeed.js",
"dependencies": {
"@google-cloud/storage": "5.8.3",
"@google-cloud/storage": "5.19.3",
"@tgwf/co2": "0.8.0",
"aws-sdk": "2.882.0",
"axe-core": "4.3.5",
"browsertime": "15.1.1",
"coach-core": "7.1.0",
"aws-sdk": "2.1118.0",
"axe-core": "4.4.1",
"browsertime": "16.1.0",
"coach-core": "7.1.1",
"cli-color": "2.0.0",
"concurrent-queue": "7.0.2",
"dayjs": "1.10.4",
"dayjs": "1.11.1",
"fast-crc32c": "2.0.0",
"fast-stats": "0.0.6",
"find-up": "5.0.0",
@ -110,6 +116,6 @@
"tape": "4.13.0",
"text-table": "0.2.0",
"uuid": "8.3.2",
"yargs": "17.2.1"
"yargs": "17.4.1"
}
}

View File

@ -2,6 +2,22 @@ const Feed = require('feed').Feed;
const fs = require('fs');
const path = require('path');
const parseChangelog = require('changelog-parser');
const { marked } = require('marked');
const allFeeds = [];
const images = {
'sitespeed.io': 'https://www.sitespeed.io/img/logos/sitespeed.io.png',
browsertime: 'https://www.sitespeed.io/img/logos/browsertime.png',
'coach-core': 'https://www.sitespeed.io/img/logos/coach.png',
pagexray: 'https://www.sitespeed.io/img/logos/pagexray.png',
throttle: '',
coach: 'https://www.sitespeed.io/img/logos/coach.png',
'chrome-har': '',
'chrome-trace': '',
compare: 'https://www.sitespeed.io/img/logos/compare.png',
humble: ''
};
const getSortedFiles = dir => {
const files = fs.readdirSync(dir);
@ -16,52 +32,26 @@ const getSortedFiles = dir => {
.sort((a, b) => b.time - a.time);
};
function getResult(result) {
let allData = '';
if (result.parsed) {
if (result.parsed.Added) {
for (let added of result.parsed.Added) {
allData += ' ' + added;
}
}
if (result.parsed.Fixed) {
for (let fixed of result.parsed.Fixed) {
allData += ' ' + fixed;
}
}
if (result.parsed.Changed) {
for (let changed of result.parsed.Changed) {
allData += ' ' + changed;
}
}
if (result.parsed['Breaking changes']) {
for (let breaking of result.parsed['Breaking changes']) {
allData += ' ' + breaking;
}
}
return allData;
}
}
async function generateFeed() {
const versionDir = './docs/_includes/version/';
const sortedVersionFiles = getSortedFiles(versionDir);
const feed = new Feed({
title: 'sitespeed.io release feed',
description: 'Follow new releases of sitespeed.io tools',
id: 'https://www.sitespeed.io',
function getFeed(tool, time) {
return new Feed({
title: `${tool} release feed`,
description: `New releases and changelog feed of ${tool}`,
id: `${tool}-release-feed`,
link: 'https://www.sitespeed.io',
language: 'en', // optional, used only in RSS 2.0, possible values: http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
image: 'https://www.sitespeed.io/img/logos/sitespeed.io.png',
image: images[tool],
favicon: 'http://www.sitespeed.io/favicon.ico',
copyright: 'All rights reserved 2021, Peter Hedenskog and team',
updated: new Date(sortedVersionFiles[0].time), // use the date from the latest updated version file
copyright: 'All rights reserved 2022, Peter Hedenskog and team',
updated: new Date(time),
feedLinks: {
atom: 'https://www.sitespeed.io/feed/atom.xml',
rss: 'https://www.sitespeed.io/feed/rss.xml'
atom:
tool === 'sitespeed.io'
? `https://www.sitespeed.io/feed/atom.xml`
: `https://www.sitespeed.io/feed/${tool}.atom`,
rss:
tool === 'sitespeed.io'
? `https://www.sitespeed.io/feed/rss.xml`
: `https://www.sitespeed.io/feed/${tool}.rss`
},
author: {
name: 'Peter Hedenskog',
@ -69,65 +59,135 @@ async function generateFeed() {
link: 'https://www.peterhedenskog.com'
}
});
}
const getContent = async () => {
const content = {};
for (let tool of sortedVersionFiles) {
const changelog =
tool.name === 'sitespeed.io'
? './CHANGELOG.md'
: '../' + tool.name + '/CHANGELOG.md';
const result = await parseChangelog(changelog);
if (result.versions[0].date !== null) {
content[tool.name] = getResult(result.versions[0]);
} else if (result.versions[1]) {
content[tool.name] = getResult(result.versions[1]);
} else {
// skip missing data
console.log(`Missing data for tool ${tool.name}`);
function addItemToFeed(feed, item, tool) {
feed.addItem({
title: `${tool} ${item.version}`,
id: `https://github.com/sitespeedio/${tool}/blob/main/CHANGELOG.md#${item.version}`,
link: `https://github.com/sitespeedio/${tool}/blob/main/CHANGELOG.md#${item.version}`,
description: getResultAsHTML(item),
author: [
{
name: 'Sitespeed.io',
link: 'https://www.sitespeed.io'
}
],
date: new Date(item.date),
image: images[tool]
});
}
function getResultAsHTML(result) {
let allData = '';
if (result.parsed) {
if (result.parsed.Added) {
allData += `<h3>Added</h3>\n`;
for (let added of result.parsed.Added) {
allData += ' ' + marked.parse(added);
}
}
if (result.parsed.Fixed) {
allData += `<h3>Fixed</h3>\n`;
for (let fixed of result.parsed.Fixed) {
allData += ' ' + marked.parse(fixed);
}
}
return content;
};
const descriptions = await getContent();
const images = {
'sitespeed.io': 'https://www.sitespeed.io/img/logos/sitespeed.io.png',
browsertime: 'https://www.sitespeed.io/img/logos/browsertime.png',
'coach-core': 'https://www.sitespeed.io/img/logos/coach.png',
pagexray: 'https://www.sitespeed.io/img/logos/pagexray.png',
throttle: '',
coach: 'https://www.sitespeed.io/img/logos/coach.png',
'chrome-har': '',
'chrome-trace': '',
compare: 'https://www.sitespeed.io/img/logos/compare.png',
humble: ''
};
if (result.parsed.Changed) {
allData += `<h3>Changed</h3>\n`;
for (let changed of result.parsed.Changed) {
allData += ' ' + marked.parse(changed);
}
}
sortedVersionFiles.forEach(file => {
feed.addItem({
title: `${file.name} ${file.version}`,
id: `https://github.com/sitespeedio/${file.name}/blob/main/CHANGELOG.md#${file.version}`,
link: `https://github.com/sitespeedio/${file.name}/blob/main/CHANGELOG.md#`,
description: descriptions[file.name],
// content: content[file.name],
author: [
{
name: 'Sitespeed.io',
link: 'https://www.sitespeed.io'
}
],
date: new Date(file.time),
image: images[file.name]
});
if (result.parsed['Breaking changes']) {
allData += `<h3>Breaking changes</h3>\n`;
for (let breaking of result.parsed['Breaking changes']) {
allData += ' ' + marked.parse(breaking);
}
}
if (result.parsed['Deprecated']) {
allData += `<h3>Deprecated</h3>\n`;
for (let deprecated of result.parsed['Deprecated']) {
allData += ' ' + marked.parse(deprecated);
}
}
if (result.parsed['Removed']) {
allData += `<h3>Removed</h3>\n`;
for (let removed of result.parsed['Removed']) {
allData += ' ' + marked.parse(removed);
}
}
if (result.parsed['Security']) {
allData += `<h3>Security</h3>\n`;
for (let security of result.parsed['Security']) {
allData += ' ' + marked.parse(security);
}
}
return allData;
}
}
const getContent = async tool => {
const content = [];
const changelog =
tool === 'sitespeed.io' ? './CHANGELOG.md' : '../' + tool + '/CHANGELOG.md';
const result = await parseChangelog({
filePath: changelog,
removeMarkdown: false
});
feed.addCategory('Performance');
for (let i = 0; i < 10; i++) {
// It's not unreleased
if (result.versions[i] && result.versions[i].date !== null) {
content.push(result.versions[i]);
allFeeds.push({ tool, item: result.versions[i] });
}
}
return content;
};
async function generateFeed() {
const versionDir = './docs/_includes/version/';
const sortedVersionFiles = getSortedFiles(versionDir);
for (let tool of sortedVersionFiles) {
const feed = getFeed(tool.name, tool.time);
feed.addCategory('Web Performance');
const items = await getContent(tool.name);
for (let item of items) {
addItemToFeed(feed, item, tool.name);
}
const docPath = './docs/';
fs.writeFileSync(
path.join(docPath, 'feed', `${tool.name}.rss`),
feed.rss2()
);
fs.writeFileSync(
path.join(docPath, 'feed', `${tool.name}.atom`),
feed.atom1()
);
}
allFeeds.sort(function (a, b) {
return new Date(b.item.date) - new Date(a.item.date);
});
const allFeed = getFeed('sitespeed.io', allFeeds[0].item.date);
for (let item of allFeeds) {
addItemToFeed(allFeed, item.item, item.tool);
}
const docPath = './docs/';
fs.writeFileSync(path.join(docPath, 'feed', 'rss.xml'), feed.rss2());
fs.writeFileSync(path.join(docPath, 'feed', 'atom.xml'), feed.atom1());
fs.writeFileSync(path.join(docPath, 'feed', `rss.xml`), allFeed.rss2());
fs.writeFileSync(path.join(docPath, 'feed', `atom.xml`), allFeed.atom1());
}
generateFeed();

View File

@ -1,6 +1,6 @@
'use strict';
const expect = require('chai').expect;
const test = require('ava');
const path = require('path');
const util = require('util');
const execFile = util.promisify(require('child_process').execFile);
@ -10,159 +10,25 @@ function runSitespeed(options = []) {
return execFile('node', [cli].concat(options));
}
describe('cli', () => {
context('no arguments', () => {
it('should report error', async () => {
let stderr;
let exitCode = 0;
try {
await runSitespeed();
} catch (err) {
stderr = err.stderr;
exitCode = err.code;
}
expect(stderr).not.to.be.undefined;
expect(exitCode).not.to.equal(0);
expect(stderr).to.include('sitespeed.js [options] <url>/<file>');
expect(stderr).to.include('One or multiple URLs or scripts');
});
});
describe('--help summary', async () => {
let stdout;
before(async () => {
const run = await runSitespeed(['--help']);
stdout = run.stdout;
});
it('should include banner in stdout with --help and not hard exit', async () => {
expect(stdout).not.to.be.undefined;
expect(stdout).to.include('sitespeed.js [options] <url>/<file>');
expect(stdout).to.not.include('One or multiple URLs or scripts');
});
it('should contain grafana options', () => {
expect(stdout).to.contain('--grafana.host');
expect(stdout).to.contain(
'The Grafana host used when sending annotations'
);
expect(stdout).to.contain('--grafana.port');
expect(stdout).to.contain(
'The Grafana port used when sending annotations to Grafana'
);
expect(stdout).to.contain('--grafana.auth');
expect(stdout).to.contain(
'The Grafana auth/bearer value used when sending annotations to Grafana. See http://docs.grafana.org/http_api/auth/#authentication-api'
);
expect(stdout).to.contain('--grafana.annotationTitle');
expect(stdout).to.contain(
'Add a title to the annotation sent for a run.'
);
expect(stdout).to.contain('--grafana.annotationMessage');
expect(stdout).to.contain(
'Add an extra message that will be attached to the annotation sent for a run. The message is attached after the default message and can contain HTML.'
);
expect(stdout).to.contain('--grafana.annotationTag');
expect(stdout).to.contain(
'Add a extra tag to the annotation sent for a run. Repeat the --grafana.annotationTag option for multiple tags. Make sure they do not collide with the other tags.'
);
expect(stdout).to.contain('--grafana.annotationScreenshot');
expect(stdout).to.contain(
'Include screenshot (from Browsertime/WebPageTest) in the annotation. You need to specify a --resultBaseURL for this to work.'
);
});
it('should contain graphite options', () => {
expect(stdout).to.contain('--graphite.host');
expect(stdout).to.contain(
'The Graphite host used to store captured metrics.'
);
expect(stdout).to.contain('--graphite.port');
expect(stdout).to.contain(
'The Graphite port used to store captured metrics.'
);
expect(stdout).to.contain('--graphite.auth');
expect(stdout).to.contain(
'The Graphite user and password used for authentication. Format: user:password'
);
expect(stdout).to.contain('--graphite.httpPort');
expect(stdout).to.contain(
'The Graphite port used to access the user interface and send annotations event'
);
expect(stdout).to.contain('--graphite.webHost');
expect(stdout).to.contain(
'The graphite-web host. If not specified graphite.host will be used.'
);
expect(stdout).to.contain('--graphite.namespace');
expect(stdout).to.contain(
'The namespace key added to all captured metrics.'
);
expect(stdout).to.contain('--graphite.includeQueryParams');
expect(stdout).to.contain(
'Whether to include query parameters from the URL in the Graphite keys or not'
);
expect(stdout).to.contain('--graphite.arrayTags');
expect(stdout).to.contain(
'Send the tags as Array or a String. In Graphite 1.0 the tags is a array. Before a String'
);
expect(stdout).to.contain('--graphite.annotationTitle');
expect(stdout).to.contain(
'Add a title to the annotation sent for a run.'
);
expect(stdout).to.contain('--graphite.annotationMessage');
expect(stdout).to.contain(
'Add an extra message that will be attached to the annotation sent for a run. The message is attached after the default message and can contain HTML.'
);
expect(stdout).to.contain('--graphite.annotationScreenshot');
expect(stdout).to.contain(
'Include screenshot (from Browsertime/WebPageTest) in the annotation. You need to specify a --resultBaseURL for this to work.'
);
expect(stdout).to.contain('--graphite.statsd');
expect(stdout).to.contain('Uses the StatsD interface');
expect(stdout).to.contain('--graphite.annotationTag');
expect(stdout).to.contain(
'Add a extra tag to the annotation sent for a run. Repeat the --graphite.annotationTag option for multiple tags. Make sure they do not collide with the other tags.'
);
expect(stdout).to.contain('--graphite.bulkSize');
expect(stdout).to.contain(
'Break up number of metrics to send with each request.'
);
expect(stdout).to.contain('--graphite.perIteration');
expect(stdout).to.contain(
'Send each iteration of metrics to Graphite. By default we only send page summaries (the summaries of all runs) but you can also send all the runs. Make sure to setup statsd or Graphite correctly to handle it.'
);
});
it('should contain influxdb options', () => {
expect(stdout).to.contain('--influxdb.protocol');
expect(stdout).to.contain('--influxdb.host');
expect(stdout).to.contain('--influxdb.port');
expect(stdout).to.contain('--influxdb.username');
expect(stdout).to.contain('--influxdb.database');
expect(stdout).to.contain('--influxdb.includeQueryParams');
expect(stdout).to.contain('--influxdb.groupSeparator');
expect(stdout).to.contain('--influxdb.annotationScreenshot');
});
});
test(`Test cli without any arguments`, async t => {
let stderr;
let exitCode = 0;
try {
await runSitespeed();
} catch (err) {
stderr = err.stderr;
exitCode = err.code;
}
t.not(stderr, undefined, 'Should output in standard error');
t.not(exitCode, 0, 'Should exit with error code');
t.true(stderr.includes('sitespeed.js [options] <url>/<file>'));
});
test(`CLI should support --help`, async t => {
const run = await runSitespeed(['--help']);
t.not(run.stdout, undefined, 'Should output in standard output');
t.true(
run.stdout.includes('--browsertime'),
'Should include Browsertime help'
);
});

View File

@ -1,248 +1,237 @@
'use strict';
const cliUtil = require('../lib/cli/util'),
expect = require('chai').expect;
const cliUtil = require('../lib/cli/util');
const test = require('ava');
describe('cliUtil', function () {
describe('getURLs', function () {
it('should extract urls', function () {
let urls = cliUtil.getURLs(['test/fixtures/sitespeed-urls.txt']);
expect(urls[0] === 'https://www.sitespeed.io');
expect(urls[3] === 'https://www.sitespeed.io/documentation/faq');
test(`getURLs should extract urls`, t => {
let urls = cliUtil.getURLs(['test/fixtures/sitespeed-urls.txt']);
t.is(urls[0], 'https://www.sitespeed.io');
t.is(urls[3], 'https://www.sitespeed.io/faq');
urls = cliUtil.getURLs(['test/fixtures/sitespeed-urls-aliases.txt']);
expect(urls[0] === 'https://www.sitespeed.io');
expect(urls[3] === 'https://www.sitespeed.io/documentation/faq');
});
});
describe('getAliases', function () {
it('should extract aliases', function () {
let aliases = cliUtil.getAliases(['test/fixtures/sitespeed-urls.txt']);
expect(aliases['https://www.sitespeed.io']).to.be.undefined;
expect(
aliases[
'https://www.sitespeed.io/documentation/sitespeed.io/webpagetest/'
]
).to.be.undefined;
aliases = cliUtil.getAliases([
'test/fixtures/sitespeed-urls-aliases.txt'
]);
expect(aliases['https://www.sitespeed.io'].urlAlias).to.equal(
'Home_Page'
);
expect(
aliases[
'https://www.sitespeed.io/documentation/sitespeed.io/webpagetest/'
]
).to.be.undefined;
});
});
describe('pluginDefaults', () => {
it('should yield an empty object for invalid values', () => {
expect(cliUtil.pluginDefaults()).to.eql({});
expect(cliUtil.pluginDefaults(null)).to.eql({});
expect(cliUtil.pluginDefaults(1)).to.eql({});
expect(cliUtil.pluginDefaults(true)).to.eql({});
expect(cliUtil.pluginDefaults(false)).to.eql({});
expect(cliUtil.pluginDefaults('trust me!')).to.eql({});
});
it('should yield a map of defaults based on config names and its defaults', () => {
const cliOptions = {
propName: {
default: 'value'
}
};
expect(cliUtil.pluginDefaults(cliOptions).propName).to.eql('value');
});
it('should not include options without an explicit default set', () => {
const cliOptions = {
propName: {
default: 'value'
},
otherProp: {
description: 'No default set'
}
};
expect(cliUtil.pluginDefaults(cliOptions).otherProp).to.be.undefined;
});
});
describe('registerPluginOptions', () => {
const mockYargs = () => ({
calls: [],
option() {
this.calls.push(Array.from(arguments));
}
});
it('should not setup options with invalid values', () => {
const plugin = {
name() {
return 'test';
}
};
const codeUnderTest = () =>
cliUtil.registerPluginOptions(mockYargs(), plugin);
// Undefined cliOptions
expect(codeUnderTest).to.throw(
`Invalid CLI options defined for plugin: undefined`
);
plugin.cliOptions = null;
expect(codeUnderTest).to.throw(
`Invalid CLI options defined for plugin: null`
);
plugin.cliOptions = true;
expect(codeUnderTest).to.throw(
`Invalid CLI options defined for plugin: true`
);
plugin.cliOptions = false;
expect(codeUnderTest).to.throw(
`Invalid CLI options defined for plugin: false`
);
plugin.cliOptions = 1;
expect(codeUnderTest).to.throw(
`Invalid CLI options defined for plugin: 1`
);
plugin.cliOptions =
'trust me! I am a valid options definition :puss_in_boots_eyes:';
expect(codeUnderTest).to.throw(
`Invalid CLI options defined for plugin: trust me! I am a valid options definition :puss_in_boots_eyes:`
);
});
it('must have an explicit name defined in the plugin', () => {
function codeUnderTest() {
cliUtil.registerPluginOptions(mockYargs(), {
processMessage() {
// Apparently a safe plugin definition
return undefined;
}
});
}
expect(codeUnderTest).to.throw(
`Missing name() method for plugin registering CLI options`
);
});
it('should call yargs.options() when cliOptions is defined as method', () => {
const fakeYargs = mockYargs();
const plugin = {
name() {
return 'test';
},
cliOptions() {
return {
prop1: {
default: 80
},
'nested.config': {
description: 'Any help text'
}
};
}
};
cliUtil.registerPluginOptions(fakeYargs, plugin);
expect(fakeYargs.calls).to.be.an('array').with.lengthOf(2);
const expectedProp1 = ['test.prop1', { default: 80 }];
expect(fakeYargs.calls.find(call => call[0] === 'test.prop1')).to.eql(
expectedProp1
);
const expectedNested = [
'test.nested.config',
{ description: 'Any help text' }
];
expect(
fakeYargs.calls.find(call => call[0] === 'test.nested.config')
).to.eql(expectedNested);
});
it('should call yargs.options() when cliOptions is defined as computed property', () => {
const fakeYargs = mockYargs();
const plugin = {
name() {
return 'test';
},
get cliOptions() {
return {
prop1: {
default: 80
},
'nested.config': {
description: 'Any help text'
}
};
}
};
cliUtil.registerPluginOptions(fakeYargs, plugin);
expect(fakeYargs.calls).to.be.an('array').with.lengthOf(2);
const expectedProp1 = ['test.prop1', { default: 80 }];
expect(fakeYargs.calls.find(call => call[0] === 'test.prop1')).to.eql(
expectedProp1
);
const expectedNested = [
'test.nested.config',
{ description: 'Any help text' }
];
expect(
fakeYargs.calls.find(call => call[0] === 'test.nested.config')
).to.eql(expectedNested);
});
it('should call yargs.options() when cliOptions is defined as regular property', () => {
const fakeYargs = mockYargs();
const plugin = {
name() {
return 'test';
},
cliOptions: {
prop1: {
default: 80
},
'nested.config': {
description: 'Any help text'
}
}
};
cliUtil.registerPluginOptions(fakeYargs, plugin);
expect(fakeYargs.calls).to.be.an('array').with.lengthOf(2);
const expectedProp1 = ['test.prop1', { default: 80 }];
expect(fakeYargs.calls.find(call => call[0] === 'test.prop1')).to.eql(
expectedProp1
);
const expectedNested = [
'test.nested.config',
{ description: 'Any help text' }
];
expect(
fakeYargs.calls.find(call => call[0] === 'test.nested.config')
).to.eql(expectedNested);
});
});
urls = cliUtil.getURLs(['test/fixtures/sitespeed-urls-aliases.txt']);
t.is(urls[0], 'https://www.sitespeed.io');
t.is(urls[3], 'https://www.sitespeed.io/faq');
});
test(`getAliases should extract aliases`, t => {
let aliases = cliUtil.getAliases(['test/fixtures/sitespeed-urls.txt']);
t.is(aliases['https://www.sitespeed.io'], undefined);
t.is(
aliases['https://www.sitespeed.io/documentation/sitespeed.io/webpagetest/'],
undefined
);
aliases = cliUtil.getAliases(['test/fixtures/sitespeed-urls-aliases.txt']);
t.is(aliases['https://www.sitespeed.io'].urlAlias, 'Home_Page');
t.is(
aliases['https://www.sitespeed.io/documentation/sitespeed.io/webpagetest/'],
undefined
);
});
test(`pluginDefaults should yield an empty object for invalid values`, t => {
t.deepEqual(cliUtil.pluginDefaults(), {});
t.deepEqual(cliUtil.pluginDefaults(null), {});
t.deepEqual(cliUtil.pluginDefaults(1), {});
t.deepEqual(cliUtil.pluginDefaults(true), {});
});
test(`pluginDefaults should yield a map of defaults based on config names and its defaults`, t => {
const cliOptions = {
propName: {
default: 'value'
}
};
t.is(cliUtil.pluginDefaults(cliOptions).propName, 'value');
});
test(`pluginDefaults should not include options without an explicit default set`, t => {
const cliOptions = {
propName: {
default: 'value'
},
otherProp: {
description: 'No default set'
}
};
t.is(cliUtil.pluginDefaults(cliOptions).otherProp, undefined);
});
test(`registerPluginOptions should not setup options with invalid values`, t => {
const mockYargs = () => ({
calls: [],
option() {
this.calls.push(Array.from(arguments));
}
});
const plugin = {
name() {
return 'test';
}
};
const codeUnderTest = () =>
cliUtil.registerPluginOptions(mockYargs(), plugin);
t.throws(codeUnderTest);
plugin.cliOptions = null;
t.throws(codeUnderTest);
plugin.cliOptions = true;
t.throws(codeUnderTest);
});
test(`registerPluginOptions must have an explicit name defined in the plugin`, t => {
const mockYargs = () => ({
calls: [],
option() {
this.calls.push(Array.from(arguments));
}
});
function codeUnderTest() {
cliUtil.registerPluginOptions(mockYargs(), {
processMessage() {
// Apparently a safe plugin definition
return undefined;
}
});
}
t.throws(codeUnderTest);
});
test(`registerPluginOptions should call yargs.options() when cliOptions is defined as method`, t => {
const mockYargs = () => ({
calls: [],
option() {
this.calls.push(Array.from(arguments));
}
});
const fakeYargs = mockYargs();
const plugin = {
name() {
return 'test';
},
cliOptions() {
return {
prop1: {
default: 80
},
'nested.config': {
description: 'Any help text'
}
};
}
};
cliUtil.registerPluginOptions(fakeYargs, plugin);
const expectedProp1 = ['test.prop1', { default: 80 }];
t.deepEqual(
fakeYargs.calls.find(call => call[0] === 'test.prop1'),
expectedProp1
);
const expectedNested = [
'test.nested.config',
{ description: 'Any help text' }
];
t.deepEqual(
fakeYargs.calls.find(call => call[0] === 'test.nested.config'),
expectedNested
);
});
test(`registerPluginOptions should call yargs.options() when cliOptions is defined as computed property`, t => {
const mockYargs = () => ({
calls: [],
option() {
this.calls.push(Array.from(arguments));
}
});
const fakeYargs = mockYargs();
const plugin = {
name() {
return 'test';
},
get cliOptions() {
return {
prop1: {
default: 80
},
'nested.config': {
description: 'Any help text'
}
};
}
};
cliUtil.registerPluginOptions(fakeYargs, plugin);
const expectedProp1 = ['test.prop1', { default: 80 }];
t.deepEqual(
fakeYargs.calls.find(call => call[0] === 'test.prop1'),
expectedProp1
);
const expectedNested = [
'test.nested.config',
{ description: 'Any help text' }
];
t.deepEqual(
fakeYargs.calls.find(call => call[0] === 'test.nested.config'),
expectedNested
);
});
test(`registerPluginOptions should call yargs.options() when cliOptions is defined as regular property`, t => {
const mockYargs = () => ({
calls: [],
option() {
this.calls.push(Array.from(arguments));
}
});
const fakeYargs = mockYargs();
const plugin = {
name() {
return 'test';
},
cliOptions: {
prop1: {
default: 80
},
'nested.config': {
description: 'Any help text'
}
}
};
cliUtil.registerPluginOptions(fakeYargs, plugin);
const expectedProp1 = ['test.prop1', { default: 80 }];
t.deepEqual(
fakeYargs.calls.find(call => call[0] === 'test.prop1'),
expectedProp1
);
const expectedNested = [
'test.nested.config',
{ description: 'Any help text' }
];
t.deepEqual(
fakeYargs.calls.find(call => call[0] === 'test.nested.config'),
expectedNested
);
});

View File

@ -1,19 +1,15 @@
'use strict';
const aggregator = require('../lib/plugins/coach/aggregator'),
fs = require('fs'),
path = require('path'),
expect = require('chai').expect;
const test = require('ava');
const aggregator = require('../lib/plugins/coach/aggregator');
const fs = require('fs');
const path = require('path');
const coachRunPath = path.resolve(__dirname, 'fixtures', 'coach.run-0.json');
const coachRun = JSON.parse(fs.readFileSync(coachRunPath, 'utf8'));
describe('coach', function () {
describe('aggregator', function () {
it('should summarize data', function () {
aggregator.addToAggregate(coachRun, 'www.sitespeed.io');
expect(aggregator.summarize()).to.not.be.empty;
});
});
test(`Should summarize Coach data`, t => {
aggregator.addToAggregate(coachRun, 'www.sitespeed.io');
const data = aggregator.summarize();
t.not(data, undefined);
});

View File

@ -0,0 +1,3 @@
body{
color: #B24926;
}

View File

@ -0,0 +1,15 @@
<!doctype html>
<html>
<head>
<title>This is a test site</title>
<link rel="stylesheet" href="/css/main.css">
</head>
<body>
<h1>Hello!</h1>
<p>This is a paragraph, we load one CSS, one JavaScript and one image.<p>
<p><a href="/simple/">Simple</a></p>
<p><a href="/search/">Search</a></p>
<img src="/img/pirate.png">
<script type="text/javascript" src="/js/jquery-2.1.4.min.js"></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

4
test/data/html/js/jquery-2.1.4.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,9 @@
<html>
<head>
<title>Search</title>
</head>
<body>
<h1>Super search</h1>
<input type="text" id="search-input" placeholder="Search ..." class="input-field">
</body>
</html>

View File

@ -0,0 +1,10 @@
<html>
<head>
<title>This is a super simple test page</title>
</head>
<body>
<h1>Welcome to the super simple and fast test page</h1>
<p>It will be hard to create a faster page than this page.</p>
<p><a href="/dimple/">Dimple</a></p>
</body>
</html>

View File

@ -1,36 +1,20 @@
'use strict';
let aggregator = require('../lib/plugins/domains/aggregator'),
fs = require('fs'),
path = require('path'),
Promise = require('bluebird'),
expect = require('chai').expect;
const test = require('ava');
const aggregator = require('../lib/plugins/domains/aggregator');
const fs = require('fs');
const path = require('path');
Promise.promisifyAll(fs);
const har = JSON.parse(
fs.readFileSync(
path.resolve(__dirname, 'fixtures', 'www-theverge-com.har'),
'utf8'
)
);
describe('domains', function () {
describe('aggregator', function () {
let har;
beforeEach(function () {
return fs
.readFileAsync(
path.resolve(__dirname, 'fixtures', 'www-theverge-com.har'),
'utf8'
)
.then(JSON.parse)
.tap(data => {
har = data;
});
});
describe('#addToAggregate', function () {
it('should add har to aggregate', function () {
aggregator.addToAggregate(har, 'http://www.vox.com');
const summary = aggregator.summarize();
const voxDomain = summary.groups.total['cdn1.vox-cdn.com'];
expect(voxDomain).to.have.nested.property('connect.max', 11);
});
});
});
test(`Should summarize data per domain`, t => {
aggregator.addToAggregate(har, 'http://www.vox.com');
const summary = aggregator.summarize();
const voxDomain = summary.groups.total['cdn1.vox-cdn.com'];
t.is(voxDomain.connect.max, 11);
});

View File

@ -1,19 +1,13 @@
const expect = require('chai').expect;
const test = require('ava');
describe('grafana', () => {
function plugin() {
return require('../lib/plugins/grafana');
}
function plugin() {
return require('../lib/plugins/grafana');
}
describe('plugin', () => {
it('should have a .config property with default host port value', () => {
// Regression: ensure the original interface is not broken
expect(plugin().config).to.have.property('port', 80);
});
it('should include missing annotationScreenshot default value', () => {
// Regression. All defaults should be exposed
expect(plugin().config).to.have.property('annotationScreenshot', false);
});
});
test(`Grafana plugin should have a .config property with default host port value`, t => {
t.is(plugin().config.port, 80);
});
test(`Grafana plugin should include missing annotationScreenshot default value`, t => {
t.is(plugin().config.annotationScreenshot, false);
});

View File

@ -1,260 +1,101 @@
'use strict';
const DataGenerator = require('../lib/plugins/graphite/data-generator'),
expect = require('chai').expect,
dayjs = require('dayjs');
const DataGenerator = require('../lib/plugins/graphite/data-generator');
const test = require('ava');
const dayjs = require('dayjs');
describe('graphite', function () {
describe('dataGenerator', function () {
it('should generate data for gpsi.pageSummary', function () {
const message = {
type: 'gpsi.pageSummary',
timestamp: '2016-01-08T12:59:06+01:00',
source: 'gpsi',
data: {
median: '13',
mean: '14.42',
min: '13',
p10: '13',
p70: '16',
p80: '16',
p90: '16',
p99: '16',
max: '16'
},
url: 'http://sub.domain.com/foo/bar'
};
test(`Test dataGenerator`, t => {
const message = {
type: 'gpsi.pageSummary',
timestamp: '2016-01-08T12:59:06+01:00',
source: 'gpsi',
data: {
median: '13',
mean: '14.42',
min: '13',
p10: '13',
p70: '16',
p80: '16',
p90: '16',
p99: '16',
max: '16'
},
url: 'http://sub.domain.com/foo/bar'
};
let generator = new DataGenerator('ns', false, {
_: ['filename'],
browser: 'chrome',
browsertime: {
connectivity: {
profile: 'cable'
}
}
});
const data = generator.dataFromMessage(message, dayjs());
expect(data).to.match(/ns.pageSummary.sub_domain_com/);
expect(data).to.match(/bar.gpsi.desktop.median/);
expect(data).to.match(/foo_bar/);
});
it('should generate data for domains.summary', function () {
const message = {
type: 'domains.summary',
timestamp: '2016-01-08T12:59:06+01:00',
source: 'domains',
data: {
'www.sitespeed.io': {
dns: {
median: '0',
mean: '13',
min: '0',
p10: '0',
p90: '40',
p99: '40',
max: '40'
}
}
},
group: 'sub_domain_com'
};
let generator = new DataGenerator('ns', false, {
_: ['sub_domain_com'],
browser: 'chrome',
browsertime: {
connectivity: {
profile: 'cable'
}
}
});
const data = generator.dataFromMessage(message, dayjs());
expect(data).to.match(
/ns.summary.sub_domain_com.chrome.cable.domains.www.sitespeed.io.dns.median [\d]{1,} [\d]*/
);
});
it('should generate data in statsD format', function () {
const message = {
type: 'domains.summary',
timestamp: '2016-01-08T12:59:06+01:00',
source: 'domains',
data: {
'www.sitespeed.io': {
dns: {
median: '0',
mean: '13',
min: '0',
p10: '0',
p90: '40',
p99: '40',
max: '40'
}
}
},
group: 'sub_domain_com'
};
let generator = new DataGenerator('ns', false, {
_: ['sub_domain_com'],
browser: 'chrome',
browsertime: {
connectivity: {
profile: 'cable'
}
},
graphite: { statsd: true }
});
const data = generator.dataFromMessage(message, dayjs());
data.forEach(function (line) {
expect(line).to.match(
/ns.summary.sub_domain_com.chrome.cable.domains.www.sitespeed.io.dns.(median|mean|min|p10|p90|p99|max):[\d]{1,}\|ms$/
);
});
});
});
describe('index', function () {
const messageMaker = require('../lib/support/messageMaker');
const filterRegistry = require('../lib/support/filterRegistry');
const intel = require('intel');
const statsHelpers = require('../lib/support/statsHelpers');
const context = { messageMaker, filterRegistry, intel, statsHelpers };
let plugin;
let options;
beforeEach(function () {
plugin = require('../lib/plugins/graphite');
options = {
graphite: {
host: '127.0.0.1'
}
};
});
it('Should use graphite interface by default', function () {
plugin.open(context, options);
expect(plugin.sender.facility).to.match(/graphite/i);
});
it('Should use statsd interface', function () {
Object.assign(options.graphite, {
statsd: true
});
plugin.open(context, options);
expect(plugin.sender.facility).to.match(/statsd/i);
});
it('Should use graphite interface by default', function () {
plugin.open(context, options);
expect(plugin.sender.facility).to.match(/graphite/i);
});
});
describe('helpers/is-statsd', function () {
const isStatsD = require('../lib/plugins/graphite/helpers/is-statsd');
it('Should be set to statsd', function () {
expect(isStatsD({ statsd: true })).to.be.true;
});
it('Should not be set to statsd', function () {
['true', 1, null, false, undefined].forEach(
value => expect(isStatsD({ statsd: value })).to.be.false
);
});
});
describe('helpers/format-entry', function () {
const formatEntry = require('../lib/plugins/graphite/helpers/format-entry');
it('Should retrieve the format of statsd', function () {
expect(formatEntry('statsd')).to.equal('%s:%s|ms');
});
it('Should retrieve the default format of graphite', function () {
['StatsD', 'stats', 'graphite', null, false, undefined].forEach(value =>
expect(formatEntry(value)).to.equal('%s %s %s')
);
});
});
describe('GraphiteSender', function () {
const GraphiteSender = require('../lib/plugins/graphite/graphite-sender');
const net = require('net');
const { connect } = net;
afterEach(function () {
net.connect = connect;
});
function mock(fn) {
net.connect = (host, port, callback) => {
setTimeout(callback, 0);
return { write: fn, end: () => null, on: () => null };
};
let generator = new DataGenerator('ns', false, {
_: ['filename'],
browser: 'chrome',
browsertime: {
connectivity: {
profile: 'cable'
}
}
it('Should send data to graphite via net', function (done) {
mock(() => done());
const sender = new GraphiteSender('127.0.0.1', '2003');
sender.send('some.data');
});
it('Should send data to graphite in bulks', function (done) {
let sent = 0;
mock(() => {
++sent === 2 && done();
});
const sender = new GraphiteSender('127.0.0.1', '2003', 2);
sender.send('some.data.1\nmore.data.2\nmore.data.3\nmore.data.4');
});
});
describe('StatsDSender', function () {
const StatsDSender = require('../lib/plugins/graphite/statsd-sender');
const dgram = require('dgram');
const { createSocket } = dgram;
afterEach(function () {
dgram.createSocket = createSocket;
});
function mock(fn) {
dgram.createSocket = () => ({ send: fn });
}
it('Should send data to statsd via dgram', function () {
let sent = false;
mock(() => {
sent = true;
});
const sender = new StatsDSender('127.0.0.1', '8125');
sender.send('some.data');
expect(sent).to.be.true;
});
it('Should send data to statsd in bulks', function () {
let sent = 0;
mock(() => {
sent++;
});
const sender = new StatsDSender('127.0.0.1', '8125', 2);
sender.send('some.data.1\nmore.data.2\nmore.data.3\nmore.data.4');
expect(sent).to.equal(2);
});
});
const data = generator.dataFromMessage(message, dayjs());
t.true(
data[0].startsWith(
'ns.pageSummary.sub_domain_com._foo_bar.gpsi.desktop.median 13'
)
);
});
test(`Test generate data in statsD format`, t => {
const message = {
type: 'domains.summary',
timestamp: '2016-01-08T12:59:06+01:00',
source: 'domains',
data: {
'www.sitespeed.io': {
dns: {
median: '0',
mean: '13',
min: '0',
p10: '0',
p90: '40',
p99: '40',
max: '40'
}
}
},
group: 'sub_domain_com'
};
let generator = new DataGenerator('ns', false, {
_: ['sub_domain_com'],
browser: 'chrome',
browsertime: {
connectivity: {
profile: 'cable'
}
},
graphite: { statsd: true }
});
const data = generator.dataFromMessage(message, dayjs());
const statsDFormat = new RegExp(
/ns.summary.sub_domain_com.chrome.cable.domains.www.sitespeed.io.dns.(median|mean|min|p10|p90|p99|max):[\d]{1,}\|ms$/
);
for (let line of data) {
t.true(statsDFormat.test(line));
}
});
test(`Use graphite interface by default`, t => {
const plugin = require('../lib/plugins/graphite');
const options = {
graphite: {
host: '127.0.0.1'
}
};
const messageMaker = require('../lib/support/messageMaker');
const filterRegistry = require('../lib/support/filterRegistry');
const intel = require('intel');
const statsHelpers = require('../lib/support/statsHelpers');
const context = { messageMaker, filterRegistry, intel, statsHelpers };
plugin.open(context, options);
console.log(plugin.sender.facility);
t.is(plugin.sender.facility, 'Graphite');
});

View File

@ -1,11 +0,0 @@
'use strict';
const Bluebird = require('bluebird'),
chai = require('chai'),
chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
chai.should();
Bluebird.longStackTraces();

View File

@ -1,367 +1,360 @@
'use strict';
const DataGenerator = require('../lib/plugins/influxdb/data-generator'),
dayjs = require('dayjs'),
expect = require('chai').expect;
const DataGenerator = require('../lib/plugins/influxdb/data-generator');
const dayjs = require('dayjs');
const test = require('ava');
describe('influxdb', function () {
describe('dataGenerator', function () {
it('should generate data for coach.summary', function () {
const message = {
uuid: '33774328-e781-4152-babe-a367cee27153',
type: 'coach.summary',
timestamp: '2017-04-04T09:55:59+02:00',
source: 'coach',
data: {
score: {
median: '96',
mean: '96',
min: '96',
p90: '96',
max: '96'
},
accessibility: {
score: {
median: '95',
mean: '95',
min: '95',
p90: '95',
max: '95'
},
altImages: {
median: '80',
mean: '80',
min: '80',
p90: '80',
max: '80'
},
headings: {
median: '90',
mean: '90',
min: '90',
p90: '90',
max: '90'
},
labelOnInput: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
landmarks: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
neverSuppressZoom: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
sections: {
median: '0',
mean: '0',
min: '0',
p90: '0',
max: '0'
},
table: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
}
},
bestpractice: {
score: {
median: '85',
mean: '85',
min: '85',
p90: '85',
max: '85'
},
charset: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
doctype: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
https: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
httpsH2: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
language: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
metaDescription: {
median: '50',
mean: '50',
min: '50',
p90: '50',
max: '50'
},
optimizely: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
pageTitle: {
median: '50',
mean: '50',
min: '50',
p90: '50',
max: '50'
},
spdy: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
url: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
}
},
performance: {
score: {
median: '98',
mean: '98',
min: '98',
p90: '98',
max: '98'
},
avoidScalingImages: {
median: '50',
mean: '50',
min: '50',
p90: '50',
max: '50'
},
cssPrint: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
fastRender: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
inlineCss: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
jquery: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
spof: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
thirdPartyAsyncJs: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
assetsRedirects: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
cacheHeaders: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
cacheHeadersLong: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
compressAssets: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
connectionKeepAlive: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
cssSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
documentRedirect: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
favicon: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
fewFonts: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
fewRequestsPerDomain: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
headerSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
imageSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
javascriptSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
mimeTypes: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
optimalCssSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
pageSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
privateAssets: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
responseOk: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
}
}
test(`Test influxdb dataGenerator`, t => {
const message = {
uuid: '33774328-e781-4152-babe-a367cee27153',
type: 'coach.summary',
timestamp: '2017-04-04T09:55:59+02:00',
source: 'coach',
data: {
score: {
median: '96',
mean: '96',
min: '96',
p90: '96',
max: '96'
},
accessibility: {
score: {
median: '95',
mean: '95',
min: '95',
p90: '95',
max: '95'
},
group: 'www.sitespeed.io'
};
let generator = new DataGenerator(false, {
_: ['filename'],
browser: 'chrome',
connectivity: 'cable',
influxdb: {
tags: 'tool=sitespeed.io'
altImages: {
median: '80',
mean: '80',
min: '80',
p90: '80',
max: '80'
},
headings: {
median: '90',
mean: '90',
min: '90',
p90: '90',
max: '90'
},
labelOnInput: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
landmarks: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
neverSuppressZoom: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
sections: {
median: '0',
mean: '0',
min: '0',
p90: '0',
max: '0'
},
table: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
}
});
},
bestpractice: {
score: {
median: '85',
mean: '85',
min: '85',
p90: '85',
max: '85'
},
charset: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
doctype: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
https: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
httpsH2: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
language: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
metaDescription: {
median: '50',
mean: '50',
min: '50',
p90: '50',
max: '50'
},
optimizely: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
pageTitle: {
median: '50',
mean: '50',
min: '50',
p90: '50',
max: '50'
},
spdy: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
url: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
}
},
performance: {
score: {
median: '98',
mean: '98',
min: '98',
p90: '98',
max: '98'
},
avoidScalingImages: {
median: '50',
mean: '50',
min: '50',
p90: '50',
max: '50'
},
cssPrint: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
fastRender: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
inlineCss: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
jquery: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
spof: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
thirdPartyAsyncJs: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
assetsRedirects: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
cacheHeaders: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
cacheHeadersLong: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
compressAssets: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
connectionKeepAlive: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
cssSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
documentRedirect: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
favicon: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
fewFonts: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
fewRequestsPerDomain: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
headerSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
imageSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
javascriptSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
mimeTypes: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
optimalCssSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
pageSize: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
privateAssets: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
},
responseOk: {
median: '100',
mean: '100',
min: '100',
p90: '100',
max: '100'
}
}
},
group: 'www.sitespeed.io'
};
const data = generator.dataFromMessage(message, dayjs());
expect(data).to.not.be.empty;
const seriesName = data[0].seriesName;
const numberOfTags = Object.keys(data[0].tags).length;
expect(seriesName).to.match(/score/);
expect(numberOfTags).to.equal(7);
});
let generator = new DataGenerator(false, {
_: ['filename'],
browser: 'chrome',
connectivity: 'cable',
influxdb: {
tags: 'tool=sitespeed.io'
}
});
const data = generator.dataFromMessage(message, dayjs());
const seriesName = data[0].seriesName;
const numberOfTags = Object.keys(data[0].tags).length;
t.is(seriesName, 'score');
t.is(numberOfTags, 7);
});

View File

@ -1,3 +0,0 @@
--require ./test/helpers/first
--reporter spec
--timeout 60s

View File

@ -1,26 +1,32 @@
'use strict';
const pathFromRootToPageDir = require('../lib/core/resultsStorage/pathToFolder');
const expect = require('chai').expect;
const test = require('ava');
describe('pathFromRootToPageDir', function () {
it('should create path from site root', function () {
const path = pathFromRootToPageDir('http://www.foo.bar', {});
expect(path).to.equal('pages/www_foo_bar/');
});
it('should create path from url', function () {
const path = pathFromRootToPageDir('http://www.foo.bar/x/y/z.html', {});
expect(path).to.equal('pages/www_foo_bar/x/y/z.html/');
});
it('should create path from url with sanitized characters', function () {
const path = pathFromRootToPageDir('http://www.foo.bar/x/y/z:200.html', {});
expect(path).to.equal('pages/www_foo_bar/x/y/z-200.html/');
});
it('should create path from url with query string', function () {
const path = pathFromRootToPageDir('http://www.foo.bar/x/y/z?foo=bar', {});
expect(path).to.equal('pages/www_foo_bar/x/y/z/query-115ffe20/');
});
test(`Test pathFromRootToPageDir should create path from site root`, t => {
const path = pathFromRootToPageDir('http://www.foo.bar', {});
t.is(path, 'pages/www_foo_bar/', 'should create path from site root');
});
test(`Test pathFromRootToPageDir should create path from url`, t => {
const path = pathFromRootToPageDir('http://www.foo.bar/x/y/z.html', {});
t.is(path, 'pages/www_foo_bar/x/y/z.html/', 'should create path from url');
});
test(`Test pathFromRootToPageDir should create path from url with sanitized characters`, t => {
const path = pathFromRootToPageDir('http://www.foo.bar/x/y/z:200.html', {});
t.is(
path,
'pages/www_foo_bar/x/y/z-200.html/',
'should create path from url with sanitized characters'
);
});
test(`Test pathFromRootToPageDir should create path from url with query string`, t => {
const path = pathFromRootToPageDir('http://www.foo.bar/x/y/z?foo=bar', {});
t.is(
path,
'pages/www_foo_bar/x/y/z/query-115ffe20/',
'should create path from url with query string'
);
});

View File

@ -1,5 +1,5 @@
module.exports = async function (context, commands) {
await commands.measure.start('https://www.sitespeed.io');
await commands.measure.start('https://www.sitespeed.io/examples/');
return commands.measure.start('https://www.sitespeed.io/documentation/');
await commands.measure.start('http://127.0.0.1:3001/simple/');
await commands.measure.start('http://127.0.0.1:3001/dimple/');
return commands.measure.start('http://127.0.0.1:3001/search/');
};

View File

@ -1,5 +1,5 @@
module.exports = async function (context, commands) {
context.log.info('In pretask!!!');
await commands.navigate('https://www.sitespeed.io/');
await commands.navigate('http://127.0.0.1:3001/simple/');
context.taskData.loadedSitespeed = true;
};

View File

@ -2,7 +2,7 @@
const resultsStorage = require('../lib/core/resultsStorage');
const dayjs = require('dayjs');
const expect = require('chai').expect;
const test = require('ava');
const timestamp = dayjs();
const timestampString = timestamp.format('YYYY-MM-DD-HH-mm-ss');
@ -12,119 +12,145 @@ function createResultUrls(url, outputFolder, resultBaseURL) {
.resultUrls;
}
describe('resultUrls', function () {
describe('#hasBaseUrl', function () {
it('should be false if base url is missing', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
undefined
);
expect(resultUrls.hasBaseUrl()).to.be.false;
});
it('should be true if base url is present', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
'http://results.com'
);
expect(resultUrls.hasBaseUrl()).to.be.true;
});
});
describe('#reportSummaryUrl', function () {
it('should create url with default output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
'http://results.com'
);
expect(resultUrls.reportSummaryUrl()).to.equal(
`http://results.com/www.foo.bar/${timestampString}`
);
});
it('should create url with absolute output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'/root/leaf',
'http://results.com'
);
expect(resultUrls.reportSummaryUrl()).to.equal('http://results.com/leaf');
});
it('should create url with relative output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'../leaf',
'http://results.com'
);
expect(resultUrls.reportSummaryUrl()).to.equal('http://results.com/leaf');
});
});
describe('#absoluteSummaryPageUrl', function () {
it('should create url with default output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
'http://results.com'
);
expect(
resultUrls.absoluteSummaryPageUrl('http://www.foo.bar/xyz')
).to.equal(
`http://results.com/www.foo.bar/${timestampString}/pages/www_foo_bar/xyz/`
);
});
it('should create url with absolute output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'/root/leaf',
'http://results.com'
);
expect(
resultUrls.absoluteSummaryPageUrl('http://www.foo.bar/xyz')
).to.equal('http://results.com/leaf/pages/www_foo_bar/xyz/');
});
it('should create url with relative output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'../leaf',
'http://results.com'
);
expect(
resultUrls.absoluteSummaryPageUrl('http://www.foo.bar/xyz')
).to.equal('http://results.com/leaf/pages/www_foo_bar/xyz/');
});
});
describe('#relativeSummaryPageUrl', function () {
it('should create url with default output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
'http://results.com'
);
expect(
resultUrls.relativeSummaryPageUrl('http://www.foo.bar/xyz')
).to.equal('pages/www_foo_bar/xyz/');
});
it('should create url with absolute output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'/root/leaf',
'http://results.com'
);
expect(
resultUrls.relativeSummaryPageUrl('http://www.foo.bar/xyz')
).to.equal('pages/www_foo_bar/xyz/');
});
it('should create url with relative output folder', function () {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'../leaf',
'http://results.com'
);
expect(
resultUrls.relativeSummaryPageUrl('http://www.foo.bar/xyz')
).to.equal('pages/www_foo_bar/xyz/');
});
});
test(`Test hasBaseUrl should be false if base url is missing`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
undefined
);
t.is(
resultUrls.hasBaseUrl(),
false,
'hasBaseUrl should be false if base url is missing'
);
});
test(`Test hasBaseUrl should be true if base url is present`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
'http://results.com'
);
t.is(
resultUrls.hasBaseUrl(),
true,
'hasBaseUrl should be true if base url is present'
);
});
test(`Test reportSummaryUrl should create url with default output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
'http://results.com'
);
t.is(
resultUrls.reportSummaryUrl(),
`http://results.com/www.foo.bar/${timestampString}`,
'reportSummaryUrl should create url with default output folder'
);
});
test(`Test should create url with absolute output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'/root/leaf',
'http://results.com'
);
t.is(
resultUrls.reportSummaryUrl(),
`http://results.com/leaf`,
'reportSummaryUrl should create url with absolute output folder'
);
});
test(`Test should create url with relative output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'../leaf',
'http://results.com'
);
t.is(
resultUrls.reportSummaryUrl(),
`http://results.com/leaf`,
'reportSummaryUrl should create url with relative output folder'
);
});
test(`Test absoluteSummaryPageUrl should create url with default output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
'http://results.com'
);
t.is(
resultUrls.absoluteSummaryPageUrl('http://www.foo.bar/xyz'),
`http://results.com/www.foo.bar/${timestampString}/pages/www_foo_bar/xyz/`,
'should create url with default output folderfolder'
);
});
test(`Test absoluteSummaryPageUrl should create url with absolute output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'/root/leaf',
'http://results.com'
);
t.is(
resultUrls.absoluteSummaryPageUrl('http://www.foo.bar/xyz'),
`http://results.com/leaf/pages/www_foo_bar/xyz/`,
'should create url with absolute output folder'
);
});
test(`Test absoluteSummaryPageUrl should create url with relative output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'../leaf',
'http://results.com'
);
t.is(
resultUrls.absoluteSummaryPageUrl('http://www.foo.bar/xyz'),
`http://results.com/leaf/pages/www_foo_bar/xyz/`,
'should create url with absolute relative folder'
);
});
test(`Test relativeSummaryPageUrl should create url with default output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
undefined,
'http://results.com'
);
t.is(
resultUrls.relativeSummaryPageUrl('http://www.foo.bar/xyz'),
`pages/www_foo_bar/xyz/`,
'should create url with default output folder'
);
});
test(`Test relativeSummaryPageUrl should create url with absolute output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'/root/leaf',
'http://results.com'
);
t.is(
resultUrls.relativeSummaryPageUrl('http://www.foo.bar/xyz'),
`pages/www_foo_bar/xyz/`,
'should create url with absolute output folder'
);
});
test(`Test relativeSummaryPageUrl should create url with relative output folder`, t => {
const resultUrls = createResultUrls(
'http://www.foo.bar',
'../leaf',
'http://results.com'
);
t.is(
resultUrls.relativeSummaryPageUrl('http://www.foo.bar/xyz'),
`pages/www_foo_bar/xyz/`,
'should create url with relative output folder'
);
});

View File

@ -1,5 +1,5 @@
const sitespeed = require('../lib/sitespeed');
const urls = ['https://www.sitespeed.io/'];
const urls = ['http://127.0.0.1:3001/simple/'];
async function run() {
try {

View File

@ -1,7 +1,7 @@
'use strict';
const expect = require('chai').expect;
const path = require('path');
const fs = require('fs');
const test = require('ava');
const resultUrls = require('../lib/core/resultsStorage/resultUrls');
const messageMaker = require('../lib/support/messageMaker');
@ -27,266 +27,32 @@ const defaultContextFactory = (context = {}) => {
);
};
describe('slack', () => {
describe('summary', () => {
const getSummary = require('../lib/plugins/slack/summary');
it('should not hard crash without a name', () => {
const dataCollector = new DataCollector(defaultContextFactory());
const options = {
browsertime: {
browser: 'mosaic',
iterations: 5
}
};
const codeUnderTest = () =>
getSummary(dataCollector, [], resultUrls(), undefined, options);
expect(codeUnderTest).to.not.throw();
const summary = codeUnderTest();
expect(summary.summaryText).to.have.string(
'0 pages analysed for Unknown (5 runs, Mosaic/desktop/unknown)'
);
});
it('should not hard crash with undefined browsertime options', () => {
const dataCollector = new DataCollector(defaultContextFactory());
const options = {
browsertime: undefined
};
const codeUnderTest = () =>
getSummary(dataCollector, [], resultUrls(), '<TEST NAME>', options);
expect(codeUnderTest).to.not.throw();
const summary = codeUnderTest();
expect(summary.summaryText).to.have.string(
'0 pages analysed for <TEST NAME> (0 runs, Unknown/desktop/unknown)'
);
});
});
describe('attachments', () => {
const getAttachments = require('../lib/plugins/slack/attachements');
it('should always return a list', () => {
expect(getAttachments()).to.be.an('array').that.is.empty;
});
});
describe('DataCollector', () => {
it('should have an empty list of pages', () => {
const context = defaultContextFactory();
const collector = new DataCollector(context);
expect(collector.getURLs()).to.be.an('array').that.is.empty;
});
it('add data should add new page URL', () => {
const context = defaultContextFactory();
const collector = new DataCollector(context);
collector.addDataForUrl(
'https://fake-site.sitespeed.io',
'coach.run',
{ coach: { pageSummary: coachRun } },
undefined
);
expect(collector.getURLs()).to.eql(['https://fake-site.sitespeed.io']);
});
});
describe('index.open', () => {
const plugin = require('../lib/plugins/slack');
it('without any valid option', () => {
const undefinedOptions = () => {
plugin.open(defaultContextFactory(), undefined);
};
expect(undefinedOptions).to.throw(
/^Required option\(s\) .+(hookUrl|userName).+ need to be specified in namespace "slack"$/
);
const emptyOptions = () => {
plugin.open(defaultContextFactory(), {});
};
expect(emptyOptions).to.throw(
/^Required option\(s\) .+(hookUrl|userName).+ need to be specified in namespace "slack"$/
);
const undefinedSlackOptions = () => {
plugin.open(defaultContextFactory(), { slack: undefined });
};
expect(undefinedSlackOptions).to.throw(
/^Required option\(s\) .+(hookUrl|userName).+ need to be specified in namespace "slack"$/
);
const emptySlackOptions = () => {
plugin.open(defaultContextFactory(), { slack: {} });
};
expect(emptySlackOptions).to.throw(
/^Required option\(s\) .+(hookUrl|userName).+ need to be specified in namespace "slack"$/
);
});
it('should require userName with hookUrl option', () => {
const codeUnderTest = () => {
plugin.open(defaultContextFactory(), {
hookUrl: 'https://fake-slack.sitespeed.io/hook'
});
};
expect(codeUnderTest).to.throw(
/^Required option\(s\) .+(hookUrl|userName).+ need to be specified in namespace "slack"$/
);
});
it('should require hookUrl with userName option', () => {
const codeUnderTest = () => {
plugin.open(defaultContextFactory(), {
userName: 'Sitespeed.io'
});
};
expect(codeUnderTest).to.throw(
/^Required option\(s\) .+(hookUrl|userName).+ need to be specified in namespace "slack"$/
);
});
it('should set plugin state for all valid options', () => {
const options = Object.assign({}, plugin.config, {
hookUrl: 'https://fake-slack.sitespeed.io/hook'
});
const context = defaultContextFactory();
plugin.open(context, {
slack: options
});
expect(plugin.options.slack).to.equal(options);
expect(plugin.context).to.equal(context);
});
});
describe('index.processMessage', () => {
const Slack = require('node-slack');
const realSend = Slack.prototype.send;
function mockSend() {
function mock() {
mock.called = true;
mock.callArgs = Array.from(arguments);
}
mock.called = false;
mock.callArgs = [];
Slack.prototype.send = mock;
return mock;
test(`should not hard crash without a name`, t => {
const getSummary = require('../lib/plugins/slack/summary');
const dataCollector = new DataCollector(defaultContextFactory());
const options = {
browsertime: {
browser: 'mosaic',
iterations: 5
}
};
const codeUnderTest = () =>
getSummary(dataCollector, [], resultUrls(), undefined, options);
function pluginFactory(context, extraOptions = {}) {
const plugin = require('../lib/plugins/slack');
const slackOptions = Object.assign({}, plugin.config, {
hookUrl: 'https://fake-slack.sitespeed.io/hook'
});
const options = Object.assign(
{
slack: slackOptions,
browsertime: {
iterations: 1,
browser: 'Chrome'
}
},
extraOptions
);
plugin.open(context, options);
plugin.processMessage({
type: 'coach.pageSummary',
url: 'http://fake-page.sitespeed.io/coach-run',
data: coachRun,
runIndex: undefined
});
return plugin;
}
afterEach(() => {
Slack.prototype.send = realSend;
});
it('should send message for html.finished message without baseUrl', () => {
const context = defaultContextFactory({
name: 'Simple test'
});
const plugin = pluginFactory(context);
const mock = mockSend();
plugin.processMessage({ type: 'html.finished' });
expect(mock.called).to.be.true;
const params = mock.callArgs[0];
expect(params.text).to.equal(
'1 page analysed for Simple test (1 run, Chrome/desktop/unknown)\n*Site summary*\n\n'
);
});
it('results URL should be part of the the report if baseUrl is provided', () => {
const context = defaultContextFactory({
name: 'Simple test'
});
context.resultUrls = resultUrls(
'https://results.sitespeed.io/absolute/path',
{}
);
const plugin = pluginFactory(context);
const mock = mockSend();
plugin.processMessage({ type: 'html.finished' });
expect(mock.called).to.be.true;
const params = mock.callArgs[0];
expect(params.text).to.equal(
'1 page analysed for Simple test (1 run, Chrome/desktop/unknown)\n*Site summary* ' +
'(<https://results.sitespeed.io/absolute/path/index.html |result>)\n\n'
);
});
it('should not send message for html.finished with s3 configured', () => {
const context = defaultContextFactory({
name: 'S3 configured'
});
const plugin = pluginFactory(context, {
s3: { bucketname: 'sitespeed_data_bucket' }
});
const mock = mockSend();
expect(Slack.prototype.send).to.equal(mock);
plugin.processMessage({ type: 'html.finished' });
expect(mock.called).to.be.false;
plugin.processMessage({ type: 's3.finished' });
expect(mock.called).to.be.true;
expect(mock.callArgs[0].text).to.equal(
'1 page analysed for S3 configured (1 run, Chrome/desktop/unknown)\n*Site summary*\n\n'
);
});
it('should not send message for html.finished with gcs configured', () => {
const context = defaultContextFactory({
name: 'GCS'
});
const plugin = pluginFactory(context, {
gcs: {
bucketname: 'sitespeed_data_bucket',
projectId: 123456789,
key: 'sitespeed-1234567890'
}
});
const mock = mockSend();
expect(Slack.prototype.send).to.equal(mock);
plugin.processMessage({ type: 'html.finished' });
expect(mock.called).to.be.false;
plugin.processMessage({ type: 'gcs.finished' });
expect(mock.called).to.be.true;
expect(mock.callArgs[0].text).to.equal(
'1 page analysed for GCS (1 run, Chrome/desktop/unknown)\n*Site summary*\n\n'
);
});
});
const summary = codeUnderTest();
t.not(summary.summaryText, undefined);
});
test(`DataCollector add data should add new page URL `, t => {
const context = defaultContextFactory();
const collector = new DataCollector(context);
collector.addDataForUrl(
'https://fake-site.sitespeed.io',
'coach.run',
{ coach: { pageSummary: coachRun } },
undefined
);
t.deepEqual(collector.getURLs(), ['https://fake-site.sitespeed.io']);
});

View File

@ -3,7 +3,7 @@
const resultsStorage = require('../lib/core/resultsStorage');
const dayjs = require('dayjs');
const path = require('path');
const expect = require('chai').expect;
const test = require('ava');
const timestamp = dayjs();
const timestampString = timestamp.format('YYYY-MM-DD-HH-mm-ss');
@ -12,54 +12,48 @@ function createManager(url, outputFolder) {
return resultsStorage(url, timestamp, { outputFolder }).storageManager;
}
describe('storageManager', function () {
describe('#rootPathFromUrl', function () {
it('should create path from url', function () {
const storageManager = createManager('http://www.foo.bar');
const path = storageManager.rootPathFromUrl(
'http://www.foo.bar/x/y/z.html'
);
expect(path).to.equal('../../../../../');
});
it('should create path from url with query string', function () {
const storageManager = createManager('http://www.foo.bar');
const path = storageManager.rootPathFromUrl(
'http://www.foo.bar/x/y/z?foo=bar'
);
expect(path).to.equal('../../../../../../');
});
});
describe('#getBaseDir', function () {
it('should create base dir with default output folder', function () {
const storageManager = createManager('http://www.foo.bar');
expect(storageManager.getBaseDir()).to.equal(
path.resolve('sitespeed-result', 'www.foo.bar', timestampString)
);
});
it('should create base dir with custom output folder', function () {
const storageManager = createManager(
'http://www.foo.bar',
'/tmp/sitespeed.io/foo'
);
expect(storageManager.getBaseDir()).to.equal('/tmp/sitespeed.io/foo');
});
});
describe('#getStoragePrefix', function () {
it('should create prefix with default output folder', function () {
const storageManager = createManager('http://www.foo.bar');
expect(storageManager.getStoragePrefix()).to.equal(
path.join('www.foo.bar', timestampString)
);
});
it('should create prefix with custom output folder', function () {
const storageManager = createManager(
'http://www.foo.bar',
'/tmp/sitespeed.io/foo'
);
expect(storageManager.getStoragePrefix()).to.equal('foo');
});
});
test(`Create path from url`, t => {
const storageManager = createManager('http://www.foo.bar');
const path = storageManager.rootPathFromUrl('http://www.foo.bar/x/y/z.html');
t.is(path, '../../../../../');
});
test(`Create path from url with query string`, t => {
const storageManager = createManager('http://www.foo.bar');
const path = storageManager.rootPathFromUrl(
'http://www.foo.bar/x/y/z?foo=bar'
);
t.is(path, '../../../../../../');
});
test(`Create base dir with default output folder`, t => {
const storageManager = createManager('http://www.foo.bar');
t.is(
storageManager.getBaseDir(),
path.resolve('sitespeed-result', 'www.foo.bar', timestampString)
);
});
test(`Create base dir with custom output folder`, t => {
const storageManager = createManager(
'http://www.foo.bar',
'/tmp/sitespeed.io/foo'
);
t.is(storageManager.getBaseDir(), '/tmp/sitespeed.io/foo');
});
test(`Create prefix with default output folder`, t => {
const storageManager = createManager('http://www.foo.bar');
t.is(
storageManager.getStoragePrefix(),
path.join('www.foo.bar', timestampString)
);
});
test(`Create prefix with custom output folder`, t => {
const storageManager = createManager(
'http://www.foo.bar',
'/tmp/sitespeed.io/foo'
);
t.is(storageManager.getStoragePrefix(), 'foo');
});