Skip to content

Instantly share code, notes, and snippets.

@drewminns
Created August 11, 2021 21:10
Show Gist options
  • Save drewminns/a834e876ce4f321ec0e94c7d84bb7638 to your computer and use it in GitHub Desktop.
Save drewminns/a834e876ce4f321ec0e94c7d84bb7638 to your computer and use it in GitHub Desktop.
Calculate CO2 from Bytes - Adapted from https://www.websitecarbon.com/
const KWG_PER_GB = 1.805
const RETURNING_VISITOR_PERCENTAGE = 0.75
const FIRST_TIME_VIEWING_PERCENTAGE = 0.25
const PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD = 0.02
const CARBON_PER_KWG_GRID = 475
const CARBON_PER_KWG_RENEWABLE = 33.4
const PERCENTAGE_OF_ENERGY_IN_DATACENTER = 0.1008
const PERCENTAGE_OF_ENERGY_IN_TRANSMISSION_AND_END_USER = 0.8992
const CO2_GRAMS_TO_LITRES = 0.5562
export const getStatistics = (bytes: number) => {
const adjustedBytes = adjustDataTransfer(bytes)
const energy = energyConsumption(adjustedBytes)
const co2Grid = getCo2Grid(energy)
const co2Renewable = getCo2Renewable(energy)
return {
adjustedBytes,
energy,
co2: {
grid: {
grams: co2Grid,
litres: co2ToLitres(co2Grid),
},
renewable: {
grams: co2Renewable,
litres: co2ToLitres(co2Renewable),
},
},
}
}
const adjustDataTransfer = (val: number): number =>
val * RETURNING_VISITOR_PERCENTAGE +
PERCENTAGE_OF_DATA_LOADED_ON_SUBSEQUENT_LOAD * val * FIRST_TIME_VIEWING_PERCENTAGE
const energyConsumption = (bytes: number): number => bytes * (KWG_PER_GB / 1073741824)
const getCo2Grid = (energy: number): number => energy * CARBON_PER_KWG_GRID
const getCo2Renewable = (energy: number): number =>
energy * PERCENTAGE_OF_ENERGY_IN_DATACENTER * CARBON_PER_KWG_RENEWABLE +
(energy + PERCENTAGE_OF_ENERGY_IN_TRANSMISSION_AND_END_USER) * CARBON_PER_KWG_GRID
const co2ToLitres = (co2: number): number => co2 * CO2_GRAMS_TO_LITRES
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment