The 3G network throttling preset
This is the standard recommendation for 3G throttling:
- Latency: 150ms
- Throughput: 1.6Mbps down / 750 Kbps up.
- Packet loss: none.
- Simulated throttling, which Lighthouse uses by default, is computed throttling after a trace has been recorded which makes it very fast and deterministic. However, due to the imperfect nature of predicting alternate execution paths, there is inherent inaccuracy that is summarized in this doc: Lighthouse Metric Variability and Accuracy. The TLDR: while it's roughly as accurate or better than DevTools throttling for most sites, it suffers from edge cases and a deep investigation to performance should use Packet-level throttling tools.
- The DevTools network throttling, which Lighthouse uses for
throttlingMethod='devtools', is implemented within Chrome at the request-level. As a result, it has some downsides that are now summarized in this doc: Network Throttling & Chrome - status. The TLDR: while it's a decent approximation, it's not a sufficient model of a slow connection. The multipliers used in Lighthouse attempt to correct for the differences.
- Proxy-level throttling tools do not affect UDP data, so they're not recommended.
- Packet-level throttling tools are able to make the most accurate network simulation.
How do I get high-quality packet-level throttling?
If you want to use more accurate throttling, read on.
This Performance Calendar article, Testing with Realistic Networking Conditions, has a good explanation of packet-level traffic shaping (which applies across TCP/UDP/ICMP) and recommendations.
comcast for network throttling
comcast Go package appears to be the most usable Mac/Linux commandline app for managing your network connection. Important to note: it changes your entire machine's network interface. Also,
sudo (as all packet-level shapers do).
comcast set up
# Install with go go get github.com/tylertreat/comcast # Ensure your $GOPATH/bin is in your $PATH (https://github.com/golang/go/wiki/GOPATH) # To use the recommended throttling values: comcast --latency=150 --target-bw=1600 --dry-run # To disable throttling # comcast --stop
comcast will also throttle the websocket port that Lighthouse uses to connect to Chrome. This isn't a big problem but mostly means that receiving the trace from the browser takes significantly more time. Also,
comcast doesn't support a separate uplink throughput.
Using Lighthouse with
# Enable system traffic throttling comcast --latency=150 --target-bw=1600 # Run Lighthouse with its own throttling disabled lighthouse --throttling.requestLatencyMs=0 --throttling.downloadThroughputKbps=0 --throttling.uploadThroughputKbps=0 # ... # Disable the traffic throttling once you see "Retrieving trace" comcast --stop