Websu.io helps you optimize your web applications for speed by generating detailed speed reports. The speed reports are run using Chrome and show you how you can optimize your web application to improve the performance. Speed is important for websites to reduce the bounce rate of visitors. Most people aren't patient enough for your page to load. So you better optimize. You can try it out right now at https://websu.io.
Lighthouse is the open source project used to generate the performance reports. So Websu is basically providing Lighthouse-as-a-Service through a simple HTTP REST API to run Lighthouse. The react based frontend Websu UI consumes the Websu HTTP API.
- Run performance reports through a simple HTTP REST API and receive lighthouse json results
- Run Lighthouse from multiple locations around the globe
- Run scheduled reports hourly, daily, weekly or monthly to continiously monitor the performance of your websites
- Retrieve a list of previous results
- Web UI to host your own internal Lighthouse service
- Ability to compare results (TODO)
You have 2 options:
- Use the public demo instance available here: https://websu.io
- Deploy Websu in your own environment. See for example Deployment using Docker below.
Deploy the docker image in your environment by running the following:
git clone https://github.com/websu-io/websu
cd websu
docker-compose up -d
The docker-compose will bring up the Websu-api container, lighthouse-server and a mongoDB container. The Websu containers runs the websu API and the static frontend web UI with it. After deployment you can access Websu UI by visiting http://localhost:8000
You can test the API by running the following:
curl -d '{"url": "https://www.google.com"}' localhost:8000/reports
Cloud Run is a great cost efficient option to deploy a production ready instance of Websu. Cloud Run takes care of automatically scaling and launching Lighthouse jobs. In addition the free limits of Cloud Run managed are very generous. The public https://websu.io instance is running on Cloud Run. Run the steps below to deploy to Cloud Run.
Push the images to Google Cloud Artifact Registry:
export PROJECT_ID=$(gcloud config get-value project)
gcloud artifacts repositories create websu --repository-format=docker \
--location=us-central1 --description="Websu Docker repository"
gcloud auth configure-docker us-central1-docker.pkg.dev
docker pull samos123/lighthouse-server:latest
docker tag samos123/lighthouse-server:latest us-central1-docker.pkg.dev/$PROJECT_ID/websu/lighthouse-server:latest
docker push us-central1-docker.pkg.dev/$PROJECT_ID/websu/lighthouse-server:latest
docker pull samos123/websu-api:latest
docker tag samos123/websu-api:latest us-central1-docker.pkg.dev/$PROJECT_ID/websu/websu-api:latest
docker push us-central1-docker.pkg.dev/$PROJECT_ID/websu/websu-api:latest
Deploy lighthouse-server on Cloud Run:
gcloud run deploy lighthouse-server \
--image us-central1-docker.pkg.dev/$PROJECT_ID/websu/lighthouse-server:latest \
--memory 1024Mi --platform managed --port 50051 --timeout 60s --concurrency 1 \
--region us-central1 --set-env-vars="USE_DOCKER=false" --allow-unauthenticated
Deploy websu-api on Cloud Run:
ENDPOINT=$(\
gcloud run services list \
--project=${PROJECT_ID} \
--region=us-central1 \
--platform=managed \
--format="value(status.address.url)" \
--filter="metadata.name=lighthouse-server")
ENDPOINT=${ENDPOINT#https://}:443
gcloud run deploy websu-api \
--image us-central1-docker.pkg.dev/$PROJECT_ID/websu/websu-api:latest \
--platform managed --port 8000 --timeout 60s --region us-central1 \
--set-env-vars="MONGO_URI=mongodb://ip-of-your-mongo-db-instance,LIGHTHOUSE_SERVER=$ENDPOINT,LIGHTHOUSE_SERVER_SECURE=true" \
--allow-unauthenticated
- Why not just use Lighthouse directly?
- Lighthouse provides a CLI and an extension that can be installed in Chrome. Lighthouse doesn't provide an HTTP API or a Web UI. Websu makes it easier to consume Lighthouse for both standard users and web developers with an HTTP API and a Web UI. It also allows you to store the results of runs so you can compare and view them at a later time.
Regenerate gRPC golang client and server code
cd pkg/lighthouse
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
lighthouse.proto
cd -
Generate updated API documentation:
swag init -g cmd/websu-api/main.go