This Node.js module calculates a webpage's ecoindex
$ npm install https://github.com/cnumr/ecoindex_node/tarball/masterconstecoindex=require('ecoindex');/** * dom = number of HTML elements in DOM * req = number of external requests (images, css, frames, etc.) * size = total size of the page (including external requests) in ko * returns an object containing the ecoindex score (number between 0 and 100, higher is better), the grade (letter between A and G), the greenhouse gas emission and the water consumption **/varindex=ecoindex.getEcoindex(dom,req,size);// { score: 89, grade: 'A', ghg: 1.22, water: 1.83 }Full example with puppeteer :
constzlib=require('zlib');constpuppeteer=require('puppeteer');constecoindex=require('ecoindex');(async()=>{varurl='https://example.com';varbrowser=awaitpuppeteer.launch();varpage=awaitbrowser.newPage();// get number of external requestsvarreq=0;awaitpage.on('request',request=>{if(!request.url().startsWith('data:')){req++;}});// get total uncompressed sizevarsize=0;awaitpage.on('response',response=>{if(response.ok()){switch(response.headers()['content-encoding']){case'br':
response.buffer().then(buffer=>{zlib.brotliCompress(buffer,function(_,result){size+=result.length;});});break;case'gzip':
response.buffer().then(buffer=>{zlib.gzip(buffer,function(_,result){size+=result.length;});});break;case'deflate':
response.buffer().then(buffer=>{zlib.deflate(buffer,function(_,result){size+=result.length;});});break;default:
response.buffer().then(buffer=>{size+=buffer.length;});break;}}});awaitpage.goto(url);// get number of DOM elementsvardom=awaitpage.evaluate(()=>document.querySelectorAll('*').length);awaitbrowser.close();// calculate ecoindexvarindex=ecoindex.calculate(dom,req,Math.round(size/1024));process.stdout.write(index.toString());})();