From dbdeb31d5d8f5f41a35c126a7e7ce09510147dff Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 29 Sep 2023 11:06:52 -0700 Subject: [PATCH 01/15] add new url list --- core/scripts/lantern/collect/urls.js | 1032 +++++++++++++++++++++++++- 1 file changed, 1031 insertions(+), 1 deletion(-) diff --git a/core/scripts/lantern/collect/urls.js b/core/scripts/lantern/collect/urls.js index b6950df3faa3..bd6cd779628e 100644 --- a/core/scripts/lantern/collect/urls.js +++ b/core/scripts/lantern/collect/urls.js @@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -export default [ +const urlsLegacy = [ // Flagship sites. 'https://www.espn.com/', 'https://www.flipkart.com', @@ -95,3 +95,1033 @@ export default [ 'https://stripe.com/docs', 'https://www.codewars.com', ].sort(); + +// Query for these urls: +/* +CREATE TEMP TABLE temp_urls ( + rank INT64, + url STRING +); +INSERT INTO temp_urls +SELECT * FROM `httparchive.urls.latest_crux_mobile` ORDER BY rank ASC; + +-- 200 random urls from top 10000000 +( +(SELECT url FROM (SELECT * FROM temp_urls LIMIT 10000000) ORDER BY RAND() LIMIT 200) +UNION DISTINCT +-- 200 random urls from top 1000000 +(SELECT url FROM (SELECT * FROM temp_urls LIMIT 1000000) ORDER BY RAND() LIMIT 200) +UNION DISTINCT +-- 200 random urls from top 100000 +(SELECT url FROM (SELECT * FROM temp_urls LIMIT 100000) ORDER BY RAND() LIMIT 200) +UNION DISTINCT +-- 200 random urls from top 10000 +(SELECT url FROM (SELECT * FROM temp_urls LIMIT 10000) ORDER BY RAND() LIMIT 200) +UNION DISTINCT +-- 200 random urls from top 1000 +(SELECT url FROM (SELECT * FROM temp_urls LIMIT 1000) ORDER BY RAND() LIMIT 200) +) +*/ +// Note: this is a random sampling of the World Wide Web, so expect lots of porn. +const urls2023 = [ + 'http://2011hana-animals.blogspot.com/', + 'http://a2ascholarships.iccr.gov.in/', + 'http://autolote.transauto.com.sv/', + 'http://blog.darom.com.br/', + 'http://blove.jp/', + 'http://buckeyebroadband.speedtestcustom.com/', + 'http://christinastrologynow.com/', + 'http://cis5rs.com.br/', + 'http://citymirrornews.com/', + 'http://convertidoscatolicos.blogspot.com/', + 'http://doctorpsy.com.ua/', + 'http://dvorets-tomsk.ru/', + 'http://epaper.andolana.in/', + 'http://exponatial.blogspot.com/', + 'http://famaconsa.com/', + 'http://g-salam-arbitrajnikam-w53.fun/', + 'http://hakimemehr.ir/', + 'http://hospicehaz.hu/', + 'http://kirsehir.tsf.org.tr/', + 'http://kottayamcheriapally.com/', + 'http://laguiaurbana.com.ar/', + 'http://lisans.cozum.info.tr/', + 'http://lms4.cfu.ac.ir/', + 'http://m.dongsung.org/', + 'http://mamacitatube.com/', + 'http://maoyingku2.me/', + 'http://metaplatform.biz/', + 'http://microscopiaserver.microscopia.ufmg.br/', + 'http://mokhtaralbukhary.blogspot.com/', + 'http://msdsolution.in/', + 'http://ntwin88.com/', + 'http://pagerankcafe.com/', + 'http://pwa.shipin.ir/', + 'http://restauranteazul.menusqr.info/', + 'http://rezervacija.studijaom.lt/', + 'http://rubistar.4teachers.org/', + 'http://sedim.dyndns.org/', + 'http://sodemar.net/', + 'http://souvenirchronicles.blogspot.com/', + 'http://spoped.isil.obr55.ru/', + 'http://takeno.iee.niit.ac.jp/', + 'http://talesgubes.com/', + 'http://tarjomehrooz.com/', + 'http://tohin.ac.jp/', + 'http://tramites.semaqroo.gob.mx/', + 'http://www.6hbd.me/', + 'http://www.71935.net/', + 'http://www.ambrosiasuitesathens.com/', + 'http://www.athletics.kusu.kyoto-u.ac.jp/', + 'http://www.beatlesvinyl.com/', + 'http://www.cmkosemen.com/', + 'http://www.comune.lavagna.ge.it/', + 'http://www.dariuszowczarek.com/', + 'http://www.dive-exuma.com/', + 'http://www.eccellenzacalcio.it/', + 'http://www.espis.de/', + 'http://www.event-ak.com/', + 'http://www.helioziskind.com.br/', + 'http://www.homoeopathieinformation.at/', + 'http://www.kjaf.org/', + 'http://www.klikk.tv/', + 'http://www.lucchetta-abbigliamento.com/', + 'http://www.nankingchinesecuisine.com/', + 'http://www.revue-silene.com/', + 'http://www.salone2007.com/', + 'http://www.scooter-dele.dk/', + 'http://www.slist.kr/', + 'http://www.superlinda.com/', + 'http://www.tienganh.com.vn/', + 'http://www.turkhukuksitesi.com/', + 'http://www.turkoglugundem.com/', + 'http://www.us1autoparts.com/', + 'http://www.varillerosacabollos.com/', + 'http://www.yayasanponpes-abumanshur.com/', + 'http://www.yline-w.com/', + 'http://xn--19-glc1ck.xn--p1ai/', + 'http://yu-fong.nl/', + 'https://19032.mitemin.net/', + 'https://1news.az/', + 'https://247trk.com/', + 'https://4analytics.ru/', + 'https://78novel.com/', + 'https://7ball.plus/', + 'https://account.netflixstudios.com/', + 'https://accuracyplus.biz/', + 'https://acolap.org.co/', + 'https://acousticgeometry.com/', + 'https://adhduk.co.uk/', + 'https://adherer.solidairesfinancespubliques.org/', + 'https://adultwebtoon.com/', + 'https://agrotens.com/', + 'https://aladin54260.skyrock.mobi/', + 'https://alumno.examentrafico.com/', + 'https://anapa-lazurnyy.ru/', + 'https://ancientolympicsmuseum.com/', + 'https://anhnguisa.edu.vn/', + 'https://ap3.shu.edu.tw/', + 'https://aplicacao.mpmg.mp.br/', + 'https://app.cloutly.com/', + 'https://app.pptdrive.xyz/', + 'https://app.radprimer.com/', + 'https://apps.mypurecloud.ie/', + 'https://arby-youm.com/', + 'https://archerechner.graltek.net/', + 'https://arizona.pmpaware.net/', + 'https://arqrio.org.br/', + 'https://artbymaudsch.com/', + 'https://artofthelie.org/', + 'https://artsycraftsymom.com/', + 'https://asdb.az.gov/', + 'https://asosyalsozluk.com/', + 'https://asufc.sanita.fvg.it/', + 'https://atendimento-eletronico.bancovw.com.br/', + 'https://atlas-vpn.fr.softonic.com/', + 'https://audition.nerim.info/', + 'https://autoatlet.ru/', + 'https://autoliquidationcenterinc.com/', + 'https://autoshokrollahi.com/', + 'https://avis2.avis-verifies.com/', + 'https://ayuda.jazztel.com/', + 'https://b2b.marvel.ru/', + 'https://babudo.hu/', + 'https://bads.es/', + 'https://banner.udayton.edu/', + 'https://beatrizalbernaz.com.br/', + 'https://berzazatovari.cargoagent.net/', + 'https://beta.icloud.com/', + 'https://billetterie-egouts.paris.fr/', + 'https://binary-option.tv/', + 'https://bip.ugczluchow.pl/', + 'https://blnjobs.com/', + 'https://blog.abcserviciosfinancieros.cl/', + 'https://bodegadelsabor.ch/', + 'https://bohovibes.cz/', + 'https://boomerangcoffee.co/', + 'https://boor.de/', + 'https://box.regione.campania.it/', + 'https://brdshrms.bihar.gov.in/', + 'https://browser.combase.cc/', + 'https://bsd.sos.in.gov/', + 'https://bspib.bsp.com.pg/', + 'https://bts-2020.blogspot.com/', + 'https://bukumitra.bukalapak.com/', + 'https://buyurindir.org/', + 'https://ca.gatoheroi.com/', + 'https://campagnesartois.fr/', + 'https://canovaonline.com/', + 'https://carbanicrasayan.co.in/', + 'https://careers.sunpharma.com/', + 'https://caricuanid99.com/', + 'https://carmount.com/', + 'https://carsmile.pl/', + 'https://casamia.az/', + 'https://castingroad.jp/', + 'https://catalog.freelibrary.org/', + 'https://catalogue.vassar.edu/', + 'https://cavapoolove.com/', + 'https://cgr.qoldau.kz/', + 'https://chaishai.ae/', + 'https://champine.ru/', + 'https://checkout.apps.havan.com.br/', + 'https://chriskim.umn.edu/', + 'https://chs-toys.ru/', + 'https://ciencias-naturales-para-septimo.webnode.es/', + 'https://cikabet6.top/', + 'https://cineciudad.com/', + 'https://cl.all.biz/', + 'https://cocinamuyfacil.com/', + 'https://codingcirculate.com/', + 'https://colis-perdus.com/', + 'https://collectionworld.net/', + 'https://comenzi.farmaciatei.ro/', + 'https://comunitaqueeniana.weebly.com/', + 'https://consociatehealth.com/', + 'https://consultarinss.com.br/', + 'https://core.xjtlu.edu.cn/', + 'https://cornell.zoom.us/', + 'https://correoweb.guardiacivil.es/', + 'https://cosmoslot.live/', + 'https://costa-kyoto.jp/', + 'https://cp.hirokoku-u.ac.jp/', + 'https://cubaheute.de/', + 'https://current.cornerstone.ac.za/', + 'https://customerservice.starbucks.com/', + 'https://cutiipostalebloc.ro/', + 'https://d2r-reimagined.com/', + 'https://damba.uinsgd.ac.id/', + 'https://daotaokythuat.com/', + 'https://darazproduct12.blogspot.com/', + 'https://darbiniairubai.lt/', + 'https://dashboard.rss.com/', + 'https://dermskincancercenter.com/', + 'https://deti-diagroup.ru/', + 'https://dgrrhh.scsalud.es/', + 'https://dichvucong.gov.vn/', + 'https://digiworld4u.in/', + 'https://dilink.net/', + 'https://direct.money.pl/', + 'https://diveshop-sunrise.com/', + 'https://dlainformatyka.blogspot.com/', + 'https://dms.dilg.gov.ph/', + 'https://dofbasen.dk/', + 'https://dollaruz.net/', + 'https://drawpi.co/', + 'https://drivers.ttgi.com/', + 'https://drjoedispenza.online/', + 'https://drmermaid.com.tw/', + 'https://dvdowow.wordpress.com/', + 'https://e-kassa.com/', + 'https://ecoloboys.wordpress.com/', + 'https://ecourts.kerala.gov.in/', + 'https://edepet.skin/', + 'https://edu.rossiya-airlines.com/', + 'https://egame55.live/', + 'https://egriz.com/', + 'https://ehonkan.co.jp/', + 'https://eikichiyazawa.com/', + 'https://eleinternacional.com/', + 'https://elwaypslincoln.com/', + 'https://embudasartes.obaratec.com.br/', + 'https://en.bijouxburma.com/', + 'https://en.pravdanaroda.info/', + 'https://enperspectiva.uy/', + 'https://enterslots.xyz/', + 'https://eqtani.com/', + 'https://ergobaby.com/', + 'https://eridan-n.com/', + 'https://es.vukki.net/', + 'https://es.wikiloc.com/', + 'https://eservices.muranga.go.ke/', + 'https://esm.footeo.com/', + 'https://esm.unique.edu.pk/', + 'https://esreva.com/', + 'https://etimesheets-plus-tempus-pa.bluebedrock.com/', + 'https://europefreechat.com/', + 'https://events.oxygenforensics.com/', + 'https://exams.tnschools.gov.in/', + 'https://exchanging.app/', + 'https://explore.amcollege.edu/', + 'https://ext-isztar4.mf.gov.pl/', + 'https://fa.zrelie.xyz/', + 'https://facegroups.org/', + 'https://faponic.com/', + 'https://fazilet-takvimi.indir.com/', + 'https://fb.kintoneapp.com/', + 'https://feetpics.com/', + 'https://figbid.com/', + 'https://fightmusicshow.com.br/', + 'https://fin-calc.org.ua/', + 'https://fivepointsbottleshop.com/', + 'https://flask.palletsprojects.com/', + 'https://flirtymeetings.com/', + 'https://flood-it.app/', + 'https://folhacerta.com/', + 'https://fontedevidaonline.com.br/', + 'https://forest-stay-focused.ar.uptodown.com/', + 'https://forum.foerdergruppe-cc.de/', + 'https://forum.ww2.ru/', + 'https://freekidsbooks.org/', + 'https://fridasbakblogg.se/', + 'https://ftede.fbserwiskonkurs.pl/', + 'https://funfal.ir/', + 'https://fungushacks.com/', + 'https://fvbradenton.com/', + 'https://gam98.ir/', + 'https://gamesandmovies.it/', + 'https://gateway.bacb.com/', + 'https://ggwp.id/', + 'https://gogobest.com/', + 'https://goldenantilopa.ru/', + 'https://goldentime.lk/', + 'https://gopurebeauty.com/', + 'https://gotesdesort.com/', + 'https://gradinamax.com.ua/', + 'https://granmanie.co.jp/', + 'https://greatdaysoutdoors.com/', + 'https://gtplsaathi.com/', + 'https://hameefun.jp/', + 'https://harcourtoutlinesstore.com/', + 'https://hardwaremarket.net/', + 'https://hdmblog39.com/', + 'https://healthsolutionmd.com/', + 'https://heeporn.com/', + 'https://hentaisun.com/', + 'https://heydays.thejunemotel.com/', + 'https://hitelforum.hu/', + 'https://holynameschoolomaha.org/', + 'https://holyslot777.com/', + 'https://homepornotube.com/', + 'https://horareceita.com/', + 'https://hospital.qmap.tw/', + 'https://hospital.vallhebron.com/', + 'https://hris.behdasht.gov.ir/', + 'https://hrms.cmpdi.co.in/', + 'https://hu.economy-pedia.com/', + 'https://hvac-talk.com/', + 'https://ib.bakai.kg/', + 'https://ib3.org/', + 'https://ibagy.com.br/', + 'https://ibrahimkhattab.com/', + 'https://ideetexte.ouest-france.fr/', + 'https://idwarta.com/', + 'https://incels.wiki/', + 'https://incometaxindia.gov.in/', + 'https://inglessinbarreras.site/', + 'https://inmatesales.com/', + 'https://inskru.com/', + 'https://instore.bnn.in.th/', + 'https://ippk.pl/', + 'https://istana-pot-zahra.business.site/', + 'https://itidirect.co.uk/', + 'https://japking.com/', + 'https://jaroslaw.pilkalokalna.pl/', + 'https://javdb40.com/', + 'https://jedzismakuj.blogspot.com/', + 'https://jems.pl/', + 'https://jerkdolls.com/', + 'https://jim0384.blog.jp/', + 'https://jna.ifmt.edu.br/', + 'https://jobs.socialsamosa.com/', + 'https://jonet.com.ng/', + 'https://jpandersonwell.com/', + 'https://jualbaterikereta.com/', + 'https://justanotherdayinfreddy.fandom.com/', + 'https://kalibre.com.tr/', + 'https://kaliningrad.moskeram.ru/', + 'https://kcmusa.org/', + 'https://kenshin.happylth.com/', + 'https://khatesalamat.ir/', + 'https://kijiko-catfood.com/', + 'https://kilometrosquecuentan.goodyear.eu/', + 'https://kimisomu-anime.com/', + 'https://kipptexas.org/', + 'https://kitmp3.live/', + 'https://kn-swim-lab.net/', + 'https://knoblauch.ch/', + 'https://koerbchen.app/', + 'https://komaoumaru.com/', + 'https://kultalt.com/', + 'https://kurashitofuwatto.com/', + 'https://kw-service.net/', + 'https://lanuestrafm.com/', + 'https://latin-mcgraw.com/', + 'https://lattice.com/', + 'https://lavilag2gbi7852.weebly.com/', + 'https://leclub-co.jp/', + 'https://legendyfutbolu.com/', + 'https://legislacao.fazenda.sp.gov.br/', + 'https://leopoldina.sp.senai.br/', + 'https://lepmetsnoges.eu/', + 'https://lezzetlirobottarifleri.com/', + 'https://libking.ru/', + 'https://linkslot-gta777.com/', + 'https://lms.petra.academy/', + 'https://lncglobal.vn/', + 'https://locator.lt/', + 'https://loginmasukollo.com/', + 'https://lor-clinic74.ru/', + 'https://lsro.eu/', + 'https://luespa.men-es.jp/', + 'https://luis-valle.com/', + 'https://lya2.com/', + 'https://m.01math.com/', + 'https://m.auction1.co.kr/', + 'https://m.nicephotos.com.br/', + 'https://m.paradise.co.kr/', + 'https://m.pl.aliexpress.com/', + 'https://m.seekmeetdate.com/', + 'https://m.yiyeting.com/', + 'https://main.okk24.com/', + 'https://mallupsell.cc/', + 'https://mangabtt.com/', + 'https://mangledmaw.itch.io/', + 'https://manhwatube.com/', + 'https://mapleviewanimalhospital.net/', + 'https://marafet-home.com.ua/', + 'https://matching.dykancoin.io/', + 'https://mauricicot.com/', + 'https://mbong.kr/', + 'https://mdsportsrawdon.com/', + 'https://members.avicenna.org/', + 'https://members.cascadespringscredit.com/', + 'https://mhomevietnam.vn/', + 'https://migsplash.humc.co/', + 'https://mijn.bsl.nl/', + 'https://minami-kara-kita-madede.tokyo/', + 'https://minecraft-italia.net/', + 'https://mirinoi.by/', + 'https://mktula-ru.turbopages.org/', + 'https://mnlp.cc/', + 'https://mobile.edp009.com/', + 'https://mobilevids.org/', + 'https://modestmolly.com/', + 'https://mon-ent.univ-perp.fr/', + 'https://monarkuni.ac.in/', + 'https://moodle.catedu.es/', + 'https://moodle.psl.eu/', + 'https://motorrad-und-touren.ch/', + 'https://moxiepropertiesllc.propertyware.com/', + 'https://musicboats.com/', + 'https://my.crb-dnr.ru/', + 'https://my.domesticfutures.com/', + 'https://mycompass.ph/', + 'https://myherbals.lk/', + 'https://myhomestore.com.br/', + 'https://myid.bakerhughes.com/', + 'https://mylearea.com/', + 'https://mypage.ponparemall.com/', + 'https://mywater.veolia.us/', + 'https://nationalhomebuild.com/', + 'https://nc.allpages.com/', + 'https://newhorizonsmusic.org/', + 'https://nice-books.ru/', + 'https://nidosreceptai.lt/', + 'https://norhouse.yogo.dk/', + 'https://northcoastcourier.co.za/', + 'https://noun.zoom.us/', + 'https://npalstudent.np.edu.sg/', + 'https://nrdoors.com/', + 'https://nrw.hinweisportal.de/', + 'https://oacar.chailease.com/', + 'https://oddigo.site/', + 'https://offersgames.com/', + 'https://ogawagenki.com/', + 'https://okumikawa-f.com/', + 'https://omakasesushizakopane.pl/', + 'https://onahodouga.com/', + 'https://ondelanceyplace.com/', + 'https://one2gethertravel.nl/', + 'https://online177.net/', + 'https://openspa.com.ar/', + 'https://operette-bremgarten.ch/', + 'https://paidlikes.de/', + 'https://paintballamarante.pt/', + 'https://palumavariedades.com/', + 'https://patricia-torff.de/', + 'https://pay-p1.com/', + 'https://paybiz.biz/', + 'https://paydayonesource.myisolved.com/', + 'https://pedangnaga.info/', + 'https://personal.diagrama.org/', + 'https://phapduyen.com/', + 'https://phimonline247.com/', + 'https://phimsexhd69.info/', + 'https://phimsexnew.info/', + 'https://pizza-de-luxe.fr/', + 'https://pizzeria-twojesmaki.pl/', + 'https://pjc0pq.cn/', + 'https://pl.hinative.com/', + 'https://pl.omio.com/', + 'https://plugo.co/', + 'https://polarisdealers.auth0.com/', + 'https://pompejanska.rosemaria.pl/', + 'https://pornoonline.click/', + 'https://pornototale.com/', + 'https://pornotv.mobi/', + 'https://portal.arryved.com/', + 'https://portal.curn.edu.co/', + 'https://portal.italac.com.br/', + 'https://portaldiariodonorte.com.br/', + 'https://posit.cloud/', + 'https://pravo.by/', + 'https://priceoye.pk/', + 'https://print24.com/', + 'https://prn9792d514.xyediamp.guru/', + 'https://promo.ultima.school/', + 'https://promobroshura.com/', + 'https://protocol.chaldal.com/', + 'https://pvt1084286.xyediamp.live/', + 'https://pvt788078.xyediamp.live/', + 'https://racetrack.top/', + 'https://ramid.ccsf.edu/', + 'https://rapid-imports.com/', + 'https://rasanmart.com/', + 'https://rblive.de/', + 'https://rc.aurorahousing.org/', + 'https://reflect-skincare.dk/', + 'https://reittiopas.tampere.fi/', + 'https://rendeljkinait.hu/', + 'https://repositorio.cgu.gov.br/', + 'https://restaurantcapricciosa.ro/', + 'https://revistamedicasinergia.com/', + 'https://rezo30.wordpress.com/', + 'https://riders.repartosya.com.ar/', + 'https://rl.talis.com/', + 'https://rock92.com/', + 'https://rongbachkim888.net/', + 'https://rosecherieparis.com/', + 'https://rtmantv.com/', + 'https://rub1.ru/', + 'https://ruleporn.com/', + 'https://sadirac.carteplus.fr/', + 'https://sagar.campuscare.cloud/', + 'https://sagevalleyseniorliving.com/', + 'https://sakmimmi.fanbox.cc/', + 'https://samapay.sy/', + 'https://samodelkin.kz/', + 'https://sandhultsbostader.se/', + 'https://sarmada.baynyadaik.com/', + 'https://saskatoonblades.com/', + 'https://secondbaptistlv.org/', + 'https://seecolombia.travel/', + 'https://senseitechnology.co.ke/', + 'https://sergeymukhin.com/', + 'https://shkolatur.ru/', + 'https://shop.petrsoukup.cz/', + 'https://sic.pt/', + 'https://signin.zm.gov.lv/', + 'https://silvergoldbull.com/', + 'https://simak.bkd.lumajangkab.go.id/', + 'https://simpeg.tebingtinggikota.go.id/', + 'https://sinar.syok.my/', + 'https://sjsu.campusesp.com/', + 'https://skatteverket.varbi.com/', + 'https://skolportal.uppsala.se/', + 'https://soin-amalthee.fr/', + 'https://solarpowerenergy.com.br/', + 'https://songha.ir/', + 'https://sotc.langson.gov.vn/', + 'https://sparxmaths.com/', + 'https://spinixc4.io/', + 'https://spirit.rikkyo.ac.jp/', + 'https://spooners-turf.co.uk/', + 'https://spousewiki.com/', + 'https://starbucks.pissedconsumer.com/', + 'https://starfox360.com/', + 'https://starpets.gg/', + 'https://statname.net/', + 'https://stonehengejewel.com/', + 'https://storchencam-freden.de/', + 'https://store.gizmodo.com/', + 'https://stylashbrowbar.ca/', + 'https://sumahoke.jp/', + 'https://sumai-value.jp/', + 'https://superliga.dk/', + 'https://suscripcion.cronista.com/', + 'https://svvs.shop/', + 'https://swclub-7sky.ru/', + 'https://szkolapolska.is/', + 'https://tatodesk.com/', + 'https://tebeeslamimarkazi.com/', + 'https://tehnorent.rs/', + 'https://teikibarai.smbc-card.com/', + 'https://teleservices.valdemarne.fr/', + 'https://temirtau.spravker.ru/', + 'https://thedoctorsbushlandbeach.com.au/', + 'https://theheartthrills.com/', + 'https://thehokepoke.ca/', + 'https://themancavehaircuts.bookedby.com/', + 'https://thongcongnghetbinhminh.com/', + 'https://thsconsulting.in/', + 'https://ticbus.com/', + 'https://tidalwave.frontgatetickets.com/', + 'https://tiger-rus.ru/', + 'https://tiradsono.com/', + 'https://todomonteria.com/', + 'https://toeic-testpro.com/', + 'https://tommychongshemp.com/', + 'https://tontonmania123.com/', + 'https://top.social/', + 'https://toplearn.com/', + 'https://topling61.ru/', + 'https://totoselera.com/', + 'https://transenpornos.biz/', + 'https://transportadora-de-valores-atlas.sherlockhr.computrabajo.com/', + 'https://trymoin.de/', + 'https://tslm.cgg.gov.in/', + 'https://tsundora.com/', + 'https://tubesex4k.net/', + 'https://tun.telcell.am/', + 'https://tunuyan.gov.ar/', + 'https://uah.blackboard.com/', + 'https://ucf.campuslabs.com/', + 'https://uchitel.club/', + 'https://uconnect.unitedtexas.com/', + 'https://udannews.in/', + 'https://ufiswebrostering.alitalia.it/', + 'https://unibet77.com/', + 'https://unidue.moveon4.de/', + 'https://unio11sl.com/', + 'https://us17.proxysite.com/', + 'https://usedfurnitures.in/', + 'https://uzem.kavram.edu.tr/', + 'https://vagburg.ru/', + 'https://valbl.net/', + 'https://vapers-desechables.es/', + 'https://vaporessobrasil.com/', + 'https://venera-salon.com.ua/', + 'https://versysclinics.com/', + 'https://vh-transport.de/', + 'https://vibra.co/', + 'https://videlporno.com/', + 'https://videos.cvmtv.com/', + 'https://vidmate.ru.uptodown.com/', + 'https://virginiatech.sportswar.com/', + 'https://vividiccare.com/', + 'https://vizitka.com/', + 'https://volynova-cake.ru/', + 'https://vritme.net/', + 'https://vrticnet.bhcentar.ba/', + 'https://vv.mp3juice.blog/', + 'https://w1.prometric-jp.com/', + 'https://wakanda303.pro/', + 'https://warriorpoetsupplyco.com/', + 'https://wasender.com/', + 'https://watch.idblog.eu.org/', + 'https://wcs.agu.ac.jp/', + 'https://weareideastudios.com/', + 'https://wearejolies.com/', + 'https://webcat.unh.edu/', + 'https://webmail.securemx.jp/', + 'https://weldingworldinc.com/', + 'https://wheelfin.co.za/', + 'https://who-co.zohorecruit.com/', + 'https://wildmintcosmetics.com/', + 'https://win.ma/', + 'https://wochenblatt.cc/', + 'https://workingabroad.daijob.com/', + 'https://works.doklad.ru/', + 'https://www.777pg.com/', + 'https://www.77hudsoncondo.com/', + 'https://www.a-p-p.tw/', + 'https://www.aapg.org/', + 'https://www.abekatu.co.jp/', + 'https://www.accountingfoundation.org/', + 'https://www.actieflerenlezen.nl/', + 'https://www.actualratings.com/', + 'https://www.akribosxxiv.com/', + 'https://www.alodoctor.ro/', + 'https://www.alot5.ch/', + 'https://www.alytaussaltinelis.lt/', + 'https://www.ambankgroup.com/', + 'https://www.ansell.com/', + 'https://www.apkcrack.net/', + 'https://www.arag.es/', + 'https://www.aramark.com.ar/', + 'https://www.asia4arabs.co/', + 'https://www.asics.com/', + 'https://www.atelierultau.ro/', + 'https://www.autocom.mx/', + 'https://www.autopriwos.ru/', + 'https://www.ayushakti.com/', + 'https://www.b-unique.co.il/', + 'https://www.banana-nails.com/', + 'https://www.bandenleader.be/', + 'https://www.bankmitrabc.co.in/', + 'https://www.baps.store/', + 'https://www.barnaloppan.is/', + 'https://www.basketball-zine.com/', + 'https://www.bauerfeind.de/', + 'https://www.baydoner.com/', + 'https://www.bbcgoodfoodme.com/', + 'https://www.beflexx.com/', + 'https://www.bellavou.co.uk/', + 'https://www.bentleyofgreenwich.com/', + 'https://www.bewegenzonderpijn.com/', + 'https://www.bglen.net/', + 'https://www.bigotires.com/', + 'https://www.blasenhus.uu.se/', + 'https://www.blivewurld.com/', + 'https://www.bluearuba.com/', + 'https://www.bluestallionbrewing.com/', + 'https://www.bonprix.fr/', + 'https://www.boryslawice.com/', + 'https://www.botanical-online.com/', + 'https://www.bpcf.or.kr/', + 'https://www.brkovi.com/', + 'https://www.buddssubaru.com/', + 'https://www.bumblebingo.com/', + 'https://www.cakecraftcompany.com/', + 'https://www.cassaedilesavona.com/', + 'https://www.central-garagewirz.ch/', + 'https://www.centrebelair.fr/', + 'https://www.cerave.de/', + 'https://www.chatlinefling.com/', + 'https://www.cheekofit.co.uk/', + 'https://www.clinique.com.au/', + 'https://www.cm-coruche.pt/', + 'https://www.codingit.io/', + 'https://www.compre-certo.com/', + 'https://www.comune.castiglione.mn.it/', + 'https://www.constructforstl.org/', + 'https://www.coolshityoucanbuy.com/', + 'https://www.copart.fi/', + 'https://www.crispysfoods.com/', + 'https://www.cse-guide.fr/', + 'https://www.cse.msstate.edu/', + 'https://www.csmconstanta.ro/', + 'https://www.cvjm-mannheim.de/', + 'https://www.daddy-cool.gr/', + 'https://www.defendyl.lt/', + 'https://www.dekra-akademie.de/', + 'https://www.dgcoursereview.com/', + 'https://www.dicetowernews.com/', + 'https://www.digitalsigncertificadora.com.br/', + 'https://www.discoverpuertorico.com/', + 'https://www.divorcehq.com/', + 'https://www.domacosmeticos.com/', + 'https://www.dragonenergysolar.com/', + 'https://www.driversig.com/', + 'https://www.dszo.cz/', + 'https://www.dubaiwatchweek.com/', + 'https://www.e7kky.com/', + 'https://www.ecotaurus.it/', + 'https://www.edenyshop.hu/', + 'https://www.egholt.dk/', + 'https://www.elabogadoencasa.com/', + 'https://www.elmbrookschools.org/', + 'https://www.entz.hu/', + 'https://www.ese.school/', + 'https://www.ethicalfarmingfund.org/', + 'https://www.eti.at/', + 'https://www.etvwin.com/', + 'https://www.farma5.it/', + 'https://www.farmersweekly.co.za/', + 'https://www.fcinter1908.it/', + 'https://www.fefb.be/', + 'https://www.findapart.online/', + 'https://www.flatcreekranch.com/', + 'https://www.foodora.dk/', + 'https://www.ford-irnich-kerpen.de/', + 'https://www.forum-macchine.it/', + 'https://www.fourmining.com/', + 'https://www.fusiondms.com.br/', + 'https://www.gamemania.co.ke/', + 'https://www.gardinermotors.ca/', + 'https://www.gastrodomus.it/', + 'https://www.gastronomiashqiptare.com/', + 'https://www.gays-cruising.com/', + 'https://www.georgtech.ru/', + 'https://www.geschichtslehrer.in/', + 'https://www.gilbertandrose.co.uk/', + 'https://www.gobusiness.gov.sg/', + 'https://www.gold-silber-muenzen-shop.de/', + 'https://www.greece-islands.co.il/', + 'https://www.halitopuroprodutos.com.br/', + 'https://www.hardrockatlanticcitywildcardrewards.com/', + 'https://www.henriksenamplifiers.com/', + 'https://www.higherhealthoklahoma.com/', + 'https://www.homemate-research-religious-building.com/', + 'https://www.hospitalpilar.com.br/', + 'https://www.hotelcosmos.ru/', + 'https://www.hotelvillaenricalipari.com/', + 'https://www.howtogettheguy.com/', + 'https://www.hpezone.com/', + 'https://www.huggastore.com/', + 'https://www.icatudoacaodasorte.com.br/', + 'https://www.idealium.es/', + 'https://www.iesb.br/', + 'https://www.igap.net.br/', + 'https://www.iglesiadesantiago.cl/', + 'https://www.iims.ac.in/', + 'https://www.indiacarnews.com/', + 'https://www.indiancumx.com/', + 'https://www.informe365.com/', + 'https://www.inspetions.com/', + 'https://www.itms2014.sk/', + 'https://www.j360.info/', + 'https://www.jeanleader.net/', + 'https://www.joom.com/', + 'https://www.journal.ubb.ac.id/', + 'https://www.jsdc.or.jp/', + 'https://www.jusoen.com/', + 'https://www.jwu-economics.jp/', + 'https://www.kaplanpathways.com/', + 'https://www.keawsan.go.th/', + 'https://www.keramikashop.com/', + 'https://www.khnp.co.kr/', + 'https://www.kikky.bg/', + 'https://www.knowsleysafariexperience.co.uk/', + 'https://www.koegel.com/', + 'https://www.kokkensbuffet.dk/', + 'https://www.kosovarja.ch/', + 'https://www.ktj.edu.my/', + 'https://www.kuam.com/', + 'https://www.kw.ac.kr/', + 'https://www.la-queue-lez-yvelines.fr/', + 'https://www.lakeworthbeachgolfclub.com/', + 'https://www.lamagdalena.cz/', + 'https://www.latteandcloset.com/', + 'https://www.lawsons.com.au/', + 'https://www.lebanon.k12.or.us/', + 'https://www.lecheanal.com/', + 'https://www.lefrejus.com/', + 'https://www.lennyniemeyer.com.br/', + 'https://www.liberacampania.it/', + 'https://www.liceodiazce.edu.it/', + 'https://www.lieselstorten.de/', + 'https://www.limitededition.com.br/', + 'https://www.listel.co.jp/', + 'https://www.livinggreenandfeelingseedy.com/', + 'https://www.lolla.com.br/', + 'https://www.longjing.taichung.gov.tw/', + 'https://www.lorentz.de/', + 'https://www.lpnpp.gov.my/', + 'https://www.luckydreams.com/', + 'https://www.maennerseite.net/', + 'https://www.malge.com/', + 'https://www.manantial.com/', + 'https://www.matschke.org/', + 'https://www.maxizoo.be/', + 'https://www.meditek.ca/', + 'https://www.mein-mehl.de/', + 'https://www.mfc.co.za/', + 'https://www.mi5.gov.uk/', + 'https://www.mideastjewellery.com/', + 'https://www.mint-vk.at/', + 'https://www.misskits.com/', + 'https://www.mmm.ucar.edu/', + 'https://www.mojaniderlandia.pl/', + 'https://www.moneymag.com.au/', + 'https://www.motoproworks.com/', + 'https://www.moulin-barbotte.fr/', + 'https://www.mrvap18.com/', + 'https://www.mt09.net/', + 'https://www.mtnw.co.kr/', + 'https://www.mynbme.org/', + 'https://www.mypropchoice.com/', + 'https://www.nanzan-u.ac.jp/', + 'https://www.nawohin.at/', + 'https://www.ncwildlife.org/', + 'https://www.nearlysport.com/', + 'https://www.netcommissions.com/', + 'https://www.neue-schmiede.de/', + 'https://www.news-daily.com/', + 'https://www.nexusgroup.ca/', + 'https://www.nico.it/', + 'https://www.nmarrests.org/', + 'https://www.nmnm.mc/', + 'https://www.noiportal.hu/', + 'https://www.northernsoftware.com/', + 'https://www.northernthreads.co.uk/', + 'https://www.northwestfurnitureoutlet.com/', + 'https://www.novoskin.life/', + 'https://www.nphm.org/', + 'https://www.nsfcu.org/', + 'https://www.nurnisaboutique.com/', + 'https://www.nwkings.com/', + 'https://www.nxtbookmedia.com/', + 'https://www.oci.fr/', + 'https://www.officinesama.it/', + 'https://www.okiemonmaru.com/', + 'https://www.olabet.in/', + 'https://www.olvi-piusx.be/', + 'https://www.ondambientalstereo.com/', + 'https://www.onderdelenzoeker.nl/', + 'https://www.onlinepolis.org/', + 'https://www.opl.it/', + 'https://www.orientaldelightmansfield.co.uk/', + 'https://www.ostmusic.org/', + 'https://www.otthonokesmegoldasok.hu/', + 'https://www.oxxostudio.tw/', + 'https://www.pabxcctv.com/', + 'https://www.pagos.neuropsicologiard.com/', + 'https://www.pataugas.com/', + 'https://www.penaten.ca/', + 'https://www.petersoncontrolunion.com/', + 'https://www.petradoor.com/', + 'https://www.petsradar.com/', + 'https://www.petycjeonline.com/', + 'https://www.pimenton.com.uy/', + 'https://www.placegrenet.fr/', + 'https://www.planethaze.com/', + 'https://www.poljot24.de/', + 'https://www.pornobereich.com/', + 'https://www.portaleaste.com/', + 'https://www.powerliftingwatch.com/', + 'https://www.prefabnoord.nl/', + 'https://www.prestashop.com/', + 'https://www.print-tattoo.com/', + 'https://www.prominent.nu/', + 'https://www.proofficesolutionllp.in/', + 'https://www.prostamol.hr/', + 'https://www.quizexpo.com/', + 'https://www.qwetch.com/', + 'https://www.radiocontact.be/', + 'https://www.randallsjewellers.co.uk/', + 'https://www.region.by/', + 'https://www.renewcanada.net/', + 'https://www.replicaairguns.ca/', + 'https://www.rfmsonline.com/', + 'https://www.ricardoscasinolive.com/', + 'https://www.ritma.ca/', + 'https://www.rockinroll.com.ar/', + 'https://www.rodsbooks.com/', + 'https://www.rolex.de/', + 'https://www.romait.it/', + 'https://www.romance.io/', + 'https://www.rrserr.com/', + 'https://www.sagavinegar.jp/', + 'https://www.samakpl.ir/', + 'https://www.sangkhon.net/', + 'https://www.santaana.com.br/', + 'https://www.saransh.me/', + 'https://www.satco.com/', + 'https://www.scotiabank.com.uy/', + 'https://www.seawideb2b.com/', + 'https://www.sems.qmul.ac.uk/', + 'https://www.sepa-fr.com/', + 'https://www.shopdeelish.com/', + 'https://www.shopnisi.cz/', + 'https://www.siam99th.com/', + 'https://www.singha-club.com/', + 'https://www.skatepro.cz/', + 'https://www.slhn.org/', + 'https://www.slybroadcast.com/', + 'https://www.soccer6.co.za/', + 'https://www.solanopm.com/', + 'https://www.sonalinews.com/', + 'https://www.songcastmusic.com/', + 'https://www.sony.com.tw/', + 'https://www.southeasttexasrbs.com/', + 'https://www.spadom.se/', + 'https://www.sportsbabble.co.uk/', + 'https://www.sqsde.de/', + 'https://www.src-fontana.com/', + 'https://www.star-aviation.com.au/', + 'https://www.steimatzky.co.il/', + 'https://www.supersprint.com/', + 'https://www.susanskitchen.ca/', + 'https://www.teatroanfitrione.it/', + 'https://www.techbox.sk/', + 'https://www.the-paulmccartney-project.com/', + 'https://www.thedarkblues.co.uk/', + 'https://www.thedealmoon.com/', + 'https://www.thekordishgroup.com/', + 'https://www.thepropertybuyingcompany.co.uk/', + 'https://www.tlcdental.com.sg/', + 'https://www.toscanamoveis.com/', + 'https://www.total-painting.com/', + 'https://www.townfairtire.com/', + 'https://www.tplt.fr/', + 'https://www.traininguri.ro/', + 'https://www.trendypreset.com/', + 'https://www.trentapizza.ro/', + 'https://www.truenews.lk/', + 'https://www.ub.uni-rostock.de/', + 'https://www.ufagrand.com/', + 'https://www.uhs.edu.pk/', + 'https://www.urcare.org.tw/', + 'https://www.usedirect.com/', + 'https://www.usicbot.com/', + 'https://www.uzit-direct.com/', + 'https://www.vangorp.nl/', + 'https://www.vchodove-dvere.sk/', + 'https://www.vesaliusmedicina.com/', + 'https://www.viajesyrutas.es/', + 'https://www.vicosaurgente.com.br/', + 'https://www.videogamesblogger.com/', + 'https://www.vitaldestek.com/', + 'https://www.vivamaisplan.com.br/', + 'https://www.voetbalprimeur.nl/', + 'https://www.wada-ama.org/', + 'https://www.waldhof-forum.de/', + 'https://www.water.itami.hyogo.jp/', + 'https://www.wellmadegifts.co.uk/', + 'https://www.whatdotheyknow.com/', + 'https://www.wheelfinancing.com/', + 'https://www.whopperlab.no/', + 'https://www.wilke-shk.de/', + 'https://www.willingwarriors.org/', + 'https://www.wiscnews.com/', + 'https://www.woolville.ro/', + 'https://www.workshopsforretirement.com/', + 'https://www.worldpokertour.com/', + 'https://www.worldsatta.in/', + 'https://www.wursti.fi/', + 'https://www.xgoud.nl/', + 'https://www.xn--72c3a7ag1brb1f.com/', + 'https://www.xn--salvia-gebudetechnik-kzb.de/', + 'https://www.yh-kyoto.or.jp/', + 'https://www.za-hn.com/', + 'https://www.zenske-zdravi.cz/', + 'https://www.zeti.co/', + 'https://www.ziopizzamyslenice.pl/', + 'https://www1.inservice.edu.tw/', + 'https://xenaitalia.altervista.org/', + 'https://xenangnguoivn.com/', + 'https://xinslot.live/', + 'https://xn--80ahaeoknjgc0aw.xn--p1acf/', + 'https://xn--kodag-uua.dk/', + 'https://xvedio.org/', + 'https://xxxdata.net/', + 'https://xxxshake.com/', + 'https://yaamidesigns.com/', + 'https://yalcinotohafik.sahibinden.com/', + 'https://yerbamatehurt.com/', + 'https://ymcacampcullen.org/', + 'https://yosoyflora.com/', + 'https://youthmavalnews.com/', + 'https://zakononline.com.ua/', + 'https://zeegame555.com/', + 'https://zhcnt.ilovetranslation.com/', + 'https://zincwins.com/', + 'https://ziplift.ru/', + 'https://zurimall.co.ke/', + // These hand-picked sites likely have some nice properties, doesn't hurt to include going forward. + ...urlsLegacy, +].sort(); + +export default urls2023; From 20032ab35bc8ba268e89d0bdde3316949a986b55 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Tue, 5 Sep 2023 11:48:34 -0700 Subject: [PATCH 02/15] update lantern collect readme to describe new process --- core/scripts/lantern/collect/README.md | 45 +++++++------------ .../lantern/collect/gcp-create-and-run.sh | 40 ----------------- core/scripts/lantern/collect/gcp-run.sh | 33 -------------- 3 files changed, 17 insertions(+), 101 deletions(-) delete mode 100755 core/scripts/lantern/collect/gcp-create-and-run.sh delete mode 100644 core/scripts/lantern/collect/gcp-run.sh diff --git a/core/scripts/lantern/collect/README.md b/core/scripts/lantern/collect/README.md index 297ab47dbcb7..44d2d47d2b22 100644 --- a/core/scripts/lantern/collect/README.md +++ b/core/scripts/lantern/collect/README.md @@ -1,51 +1,40 @@ # Lantern Collect Traces -Collects many traces using a local machine and mobile devices via WPT. +Collects many traces using a local machine and a local mobile device. Must be run on OSX, as it relies on Link Conditioner. -There are 9 runs for each URL in the big zip. The golden zip contains just the median runs (by performance score), along with a dump of the `metrics` collected by Lighthouse. +Each URL is processed one a time: first as unthrottled (but still with mobile UA/viewport emulation) on the local machine, then again right after on an adb-connected mobile device connected to the network via hotspot. Link Conditioner is enabled for the duration of the mobile run. The runs are done back-to-back to avoid potential variance introduced by a site changing its content. -[Download all](https://drive.google.com/open?id=17WsQ3CU0R1072sezXw5Np2knV_NvGAfO) traces (3.2GB zipped, 19GB unzipped). -[Download golden](https://drive.google.com/open?id=1aQp-oqX7jeFq9RFwNik6gkEZ0FLtjlHp) traces (363MB zipped, 2.1GB unzipped). - -Note: Only 45/80 of the URLs in `./urls.js` have been processed. - -## Get a WPT key - -This is how you get a regular key: +These traces are used to evaluate changes to the Lantern network and CPU emulation. -http://www.webpagetest.org/getkey.php -> "Login with Google" -> fill form. Key will be emailed to you. +Historical note: we used to collect the mobile traces from WebPageTest, however their API no longer supports real mobile devices. -But you'll really need a privileged key to run the collection in a reasonable amount of time. -Note: to actually run this, you want a better key than the default. Ask @connorjclark for it. +## Historical lantern trace databases -## Lighthouse Version -Check what version of Lighthouse WPT is using. You should use the same version of lighthouse for the desktop collection. +### December 2019 -## Verify URLs - -```sh -node --input-type=module -e "import urls from './urls.js'; console.log(urls.join('\n'))" |\ - xargs -P 10 -I{} curl -A 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3694.0 Mobile Safari/537.36 Chrome-Lighthouse' -o /dev/null -s --write-out '%{http_code} {} (if redirect: %{redirect_url})\n' {} |\ - sort -``` +There are 9 runs for each URL in the big zip. The golden zip contains just the median runs (by performance score), along with a dump of the `metrics` collected by Lighthouse. This sampling method was dropped for future trace database updates. The mobile traces here came from a Moto G4 via WPT. -Note: some good URLs will 4xx b/c the site blocks such usages of `curl`. +[Download all](https://drive.google.com/open?id=17WsQ3CU0R1072sezXw5Np2knV_NvGAfO) traces (3.2GB zipped, 19GB unzipped). +[Download golden](https://drive.google.com/open?id=1aQp-oqX7jeFq9RFwNik6gkEZ0FLtjlHp) traces (363MB zipped, 2.1GB unzipped). ## Run ```sh -DEBUG=1 WPT_KEY=... node --max-old-space-size=4096 collect.js +DEBUG=1 node --max-old-space-size=4096 collect.js ``` Output will be in `dist/collect-lantern-traces`, and zipped at `dist/collect-lantern-traces.zip`. -Update the zip on Google Drive and `download-traces.sh`. - +Rename the zip with the current data (ex: `golden-lantern-traces-2019-12-17.zip`) to Google Drive, and update `VERSION` in `download-traces.sh`. -## Run in GCP +## Verify URLs ```sh -WPT_KEY=... core/scripts/lantern/collect/gcp-create-and-run.sh +node --input-type=module -e "import urls from './urls.js'; console.log(urls.join('\n'))" |\ + xargs -P 10 -I{} curl -A 'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.126 Mobile Safari/537.36 Chrome-Lighthouse' -o /dev/null -s --write-out '%{http_code} {} (if redirect: %{redirect_url})\n' {} |\ + sort ``` + +Note: some good URLs will 4xx b/c the site blocks such usages of `curl`. diff --git a/core/scripts/lantern/collect/gcp-create-and-run.sh b/core/scripts/lantern/collect/gcp-create-and-run.sh deleted file mode 100755 index be8bc5f1e814..000000000000 --- a/core/scripts/lantern/collect/gcp-create-and-run.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# This script is assumed to be run from the LH_ROOT directory. - -set -euxo pipefail - -CLOUDSDK_CORE_PROJECT=lighthouse-lantern-collect -ZONE=us-central1-a - -gcloud --project="$CLOUDSDK_CORE_PROJECT" compute instances create lantern-collect-instance \ - --image-family=ubuntu-1804-lts --image-project=ubuntu-os-cloud \ - --zone="$ZONE" \ - --boot-disk-size=100GB \ - --machine-type=n1-standard-2 - -echo "export WPT_KEY=\"$WPT_KEY\"" > .tmp_wpt_key -echo "export WPT_URL=\"$WPT_URL\"" >> .tmp_wpt_key -# Instance needs time to start up. -until gcloud --project="$CLOUDSDK_CORE_PROJECT" compute scp ./.tmp_wpt_key lantern-collect-instance:/tmp/wpt-key --zone="$ZONE" -do - echo "Waiting for start up ..." - sleep 10 -done -rm .tmp_wpt_key - -gcloud --project="$CLOUDSDK_CORE_PROJECT" compute scp ./core/scripts/lantern/collect/gcp-setup.sh lantern-collect-instance:/tmp/gcp-setup.sh --zone="$ZONE" -gcloud --project="$CLOUDSDK_CORE_PROJECT" compute scp ./core/scripts/lantern/collect/gcp-run.sh lantern-collect-instance:/tmp/gcp-run.sh --zone="$ZONE" -gcloud --project="$CLOUDSDK_CORE_PROJECT" compute ssh lantern-collect-instance --command="bash /tmp/gcp-setup.sh" --zone="$ZONE" -gcloud --project="$CLOUDSDK_CORE_PROJECT" compute ssh lighthouse@lantern-collect-instance --command="sh -c 'nohup /home/lighthouse/gcp-run.sh > /home/lighthouse/collect.log 2>&1 < /dev/null &'" --zone="$ZONE" - -set +x - -echo "Collection has started." -echo "Check-in on progress anytime by running..." -echo " $ gcloud --project="$CLOUDSDK_CORE_PROJECT" compute ssh lighthouse@lantern-collect-instance --command='tail -f collect.log' --zone=$ZONE" - -echo "When complete run..." -echo " $ gcloud --project="$CLOUDSDK_CORE_PROJECT" compute scp lantern-collect-instance:/home/lighthouse/src/lighthouse/dist/collect-lantern-traces.zip ./collect-lantern-traces.zip" -echo " $ gcloud --project="$CLOUDSDK_CORE_PROJECT" compute scp lantern-collect-instance:/home/lighthouse/src/lighthouse/dist/golden-lantern-traces.zip ./golden-lantern-traces.zip" -echo " $ gcloud --project="$CLOUDSDK_CORE_PROJECT" compute instances delete lantern-collect-instance" diff --git a/core/scripts/lantern/collect/gcp-run.sh b/core/scripts/lantern/collect/gcp-run.sh deleted file mode 100644 index be69c1f1b415..000000000000 --- a/core/scripts/lantern/collect/gcp-run.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -set -euxo pipefail - -whoami -export HOME="/home/lighthouse" - -cd /home/lighthouse -mkdir -p ./src -cd ./src - -if [[ ! -d ./lighthouse ]]; then - git clone https://github.com/GoogleChrome/lighthouse.git -fi - -cd ./lighthouse - -git fetch origin -git checkout -f origin/main -yarn install -yarn build-report - -# Import WPT_KEY vars -source /home/lighthouse/.env - -# Run the collection -DEBUG=1 xvfb-run node --max-old-space-size=4096 ./core/scripts/lantern/collect/collect.js - -# Create golden -DEBUG=1 node --max-old-space-size=4096 ./core/scripts/lantern/collect/golden.js - -# Kill xvfb -kill $! From d6eed80b643f46125cc1a5fd19181e4d8a3b0010 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 2 Jun 2023 12:46:16 -0700 Subject: [PATCH 03/15] remove wpt collection, start making new collect runner --- core/scripts/lantern/collect/README.md | 2 +- core/scripts/lantern/collect/collect.js | 184 ++++++------------------ core/scripts/lantern/collect/common.js | 2 +- core/scripts/lantern/collect/golden.js | 22 +-- 4 files changed, 58 insertions(+), 152 deletions(-) diff --git a/core/scripts/lantern/collect/README.md b/core/scripts/lantern/collect/README.md index 44d2d47d2b22..01299267ec1f 100644 --- a/core/scripts/lantern/collect/README.md +++ b/core/scripts/lantern/collect/README.md @@ -22,7 +22,7 @@ There are 9 runs for each URL in the big zip. The golden zip contains just the m ## Run ```sh -DEBUG=1 node --max-old-space-size=4096 collect.js +node --max-old-space-size=4096 collect.js ``` Output will be in `dist/collect-lantern-traces`, and zipped at `dist/collect-lantern-traces.zip`. diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index 4f703e09e201..b9bc23a6c211 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -12,8 +12,6 @@ import fs from 'fs'; import {execFile} from 'child_process'; import {promisify} from 'util'; -import fetch from 'node-fetch'; - import defaultTestUrls from './urls.js'; import * as common from './common.js'; import {LH_ROOT} from '../../../../shared/root.js'; @@ -21,12 +19,8 @@ import {makeGolden} from './golden.js'; const execFileAsync = promisify(execFile); -const WPT_URL = process.env.WPT_URL || 'https://www.webpagetest.org'; const TEST_URLS = process.env.TEST_URLS ? process.env.TEST_URLS.split(' ') : defaultTestUrls; -const WPT_KEY = process.env.WPT_KEY; -const DEBUG = process.env.DEBUG; - const log = new common.ProgressLogger(); /** @type {Summary} */ @@ -42,49 +36,6 @@ function saveData(filename, data) { return filename; } -/** - * @param {string} url - * @return {Promise} - */ -async function fetchString(url) { - const response = await fetch(url); - if (response.ok) return response.text(); - throw new Error(`error fetching ${url}: ${response.status} ${response.statusText}`); -} - -/** - * @param {string} url - */ -async function startWptTest(url) { - if (!WPT_KEY) throw new Error('missing WPT_KEY'); - - const apiUrl = new URL('/runtest.php', WPT_URL); - apiUrl.search = new URLSearchParams({ - k: WPT_KEY, - f: 'json', - url, - location: 'gce-us-east4-linux:Chrome.3GFast', - runs: '1', - lighthouse: '1', - mobile: '1', - // Make the trace file available over /getgzip.php. - lighthouseTrace: '1', - lighthouseScreenshots: '1', - // Disable some things that WPT does, such as a "repeat view" analysis. - type: 'lighthouse', - }).toString(); - const wptResponseJson = await fetchString(apiUrl.href); - const wptResponse = JSON.parse(wptResponseJson); - if (wptResponse.statusCode !== 200) { - throw new Error(`unexpected status code ${wptResponse.statusCode} ${wptResponse.statusText}`); - } - - return { - testId: wptResponse.data.testId, - jsonUrl: wptResponse.data.jsonUrl, - }; -} - /** * @param {string} url * @return {Promise} @@ -117,54 +68,12 @@ async function runUnthrottledLocally(url) { * @param {string} url * @return {Promise} */ -async function runForWpt(url) { - const {testId, jsonUrl} = await startWptTest(url); - if (DEBUG) log.log({testId, jsonUrl}); - - // Poll for the results every x seconds, where x = position in queue. - let lhr; - // eslint-disable-next-line no-constant-condition - while (true) { - const responseJson = await fetchString(jsonUrl); - const response = JSON.parse(responseJson); - - if (response.statusCode === 200) { - lhr = response.data.lighthouse; - assertLhr(lhr); - break; - } - - if (response.statusCode >= 100 && response.statusCode < 200) { - // If behindCount doesn't exist, the test is currently running. - // * Wait 30 seconds if the test is currently running. - // * Wait an additional 10 seconds for every test ahead of this one. - // * Don't wait for more than 10 minutes. - const secondsToWait = Math.min(30 + 10 * (response.data.behindCount || 0), 10 * 1000); - if (DEBUG) log.log('poll wpt in', secondsToWait); - await new Promise((resolve) => setTimeout(resolve, secondsToWait * 1000)); - } else { - throw new Error(`unexpected response: ${response.statusCode} ${response.statusText}`); - } - } - - const traceUrl = new URL('/getgzip.php', WPT_URL); - traceUrl.searchParams.set('test', testId); - traceUrl.searchParams.set('file', 'lighthouse_trace.json'); - const traceJson = await fetchString(traceUrl.href); - - /** @type {LH.Trace} */ - const trace = JSON.parse(traceJson); - // For some reason, the first trace event is an empty object. - trace.traceEvents = trace.traceEvents.filter(e => Object.keys(e).length > 0); - - return { - lhr: JSON.stringify(lhr), - trace: JSON.stringify(trace), - }; +async function runThrottledMobileDevice(url) { + return runUnthrottledLocally(url); } /** - * Repeats the ascyn function a maximum of maxAttempts times until it passes. + * Repeats the async function a maximum of maxAttempts times until it passes. * @param {() => Promise} asyncFn * @param {number} [maxAttempts] * @return {Promise<{result: Result|null, retries: number, errors: string[]}>} @@ -176,7 +85,7 @@ async function repeatUntilPassOrNull(asyncFn, maxAttempts = 3) { try { return {result: await asyncFn(), retries: i, errors}; } catch (err) { - log.log('Error: ' + err.toString()); + log.log(err.toString()); errors.push(err.toString()); } } @@ -191,13 +100,16 @@ function assertLhr(lhr) { if (!lhr) throw new Error('missing lhr'); if (lhr.runtimeError) throw new Error(`runtime error: ${lhr.runtimeError}`); const metrics = common.getMetrics(lhr); - if (metrics?.firstContentfulPaint && - metrics.firstMeaningfulPaint && - metrics.interactive && - // WPT won't have this, we'll just get from the trace. - // metrics.largestContentfulPaint && - metrics.maxPotentialFID && - metrics.speedIndex + console.log(metrics); + if (metrics && + metrics.cumulativeLayoutShift !== undefined && + metrics.firstContentfulPaint !== undefined && + metrics.firstMeaningfulPaint !== undefined && + metrics.interactive !== undefined && + metrics.largestContentfulPaint !== undefined && + metrics.maxPotentialFID !== undefined && + metrics.speedIndex !== undefined && + metrics.timeToFirstByte !== undefined ) return; throw new Error('run failed to get metrics'); } @@ -217,15 +129,17 @@ async function main() { for (const url of TEST_URLS) { // This URL has been done on a previous script invocation. Skip it. if (summary.results.find((urlResultSet) => urlResultSet.url === url)) { - log.log(`already collected traces for ${url}`); + log.log(`already collected for ${url}`); continue; } - log.log(`collecting traces for ${url}`); + log.log(`collecting for ${url}`); const sanitizedUrl = url.replace(/[^a-z0-9]/gi, '-'); - let wptDone = false; - let unthrottledDone = false; + /** @type {Awaited> | null} */ + let unthrottledRun = null; + /** @type {Awaited> | null} */ + let mobileRun = null; // The closure this makes is too convenient to decompose. // eslint-disable-next-line no-inner-declarations @@ -233,62 +147,54 @@ async function main() { const index = TEST_URLS.indexOf(url); log.progress([ `${url} (${index + 1} / ${TEST_URLS.length})`, - 'wpt', - '(' + (wptDone ? 'DONE' : 'pending...') + ')', - 'unthrottledResults', - '(' + (unthrottledDone ? 'DONE' : 'pending...') + ')', + 'unthrottled, local machine', + (unthrottledRun ? (unthrottledRun.result ? '✅' : '❌') : '…'), + 'throttled, mobile device', + (mobileRun ? (mobileRun.result ? '✅' : '❌') : '…'), ].join(' ')); } updateProgress(); - const wptPromise = repeatUntilPassOrNull(() => runForWpt(url)) - .finally(() => { - wptDone = true; - updateProgress(); - }); - const unthrottledPromise = repeatUntilPassOrNull(() => runUnthrottledLocally(url)) - .finally(() => { - unthrottledDone = true; - updateProgress(); - }); - const repeatingResults = await Promise.all([wptPromise, unthrottledPromise]); - const wptResult = repeatingResults[0].result; - const unthrottledResult = repeatingResults[1].result; - if (!wptResult) log.log('failed to get wpt result'); - if (!unthrottledResult) log.log('failed to get unthrottled result'); + unthrottledRun = await repeatUntilPassOrNull(() => runUnthrottledLocally(url)); + updateProgress(); + mobileRun = await repeatUntilPassOrNull(() => runThrottledMobileDevice(url)); + updateProgress(); + if (!unthrottledRun.result) log.log('failed to get wpt result'); + if (!mobileRun.result) log.log('failed to get unthrottled result'); + + const unthrottledResult = unthrottledRun.result; + const wptResult = mobileRun.result; let errors; - if (repeatingResults[0].errors || repeatingResults[1].errors) { - errors = [...repeatingResults[0].errors, ...repeatingResults[1].errors]; + if (unthrottledRun.errors || mobileRun.errors) { + errors = [...unthrottledRun.errors, ...mobileRun.errors]; } - const wptPrefix = `${sanitizedUrl}-mobile-wpt`; - const unthrottledPrefix = `${sanitizedUrl}-mobile-unthrottled`; + const mobilePrefix = `${sanitizedUrl}-mobile-throttled`; + const unthrottledPrefix = `${sanitizedUrl}-desktop-unthrottled`; /** @type {ResultsForUrl} */ const urlResultSet = { url, wpt: wptResult ? { - lhr: saveData(`${wptPrefix}-lhr.json`, wptResult.lhr), - trace: saveData(`${wptPrefix}-trace.json`, wptResult.trace), + devtoolsLog: saveData(`${mobilePrefix}-devtoolsLog.json`, wptResult.devtoolsLog), + lhr: saveData(`${mobilePrefix}-lhr.json`, wptResult.lhr), + trace: saveData(`${mobilePrefix}-trace.json`, wptResult.trace), } : null, - wptRetries: repeatingResults[0].retries, - // Unthrottled runs will always have devtools logs. - unthrottled: unthrottledResult && unthrottledResult.devtoolsLog ? { + wptRetries: mobileRun.retries, + unthrottled: unthrottledResult ? { devtoolsLog: saveData(`${unthrottledPrefix}-devtoolsLog.json`, unthrottledResult.devtoolsLog), lhr: saveData(`${unthrottledPrefix}-lhr.json`, unthrottledResult.lhr), trace: saveData(`${unthrottledPrefix}-trace.json`, unthrottledResult.trace), } : null, - unthrottledRetries: repeatingResults[1].retries, + unthrottledRetries: unthrottledRun.retries, errors, }; log.log(`collected results for ${url}`); summary.results.push(urlResultSet); - if (summary.results.length % 10 === 0) { - log.log('saving progress'); - common.saveSummary(summary); - } + log.log('saving progress'); + common.saveSummary(summary); } log.log('saving progress'); diff --git a/core/scripts/lantern/collect/common.js b/core/scripts/lantern/collect/common.js index a31961395279..263776c87635 100644 --- a/core/scripts/lantern/collect/common.js +++ b/core/scripts/lantern/collect/common.js @@ -4,7 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -/** @typedef {{devtoolsLog?: string, lhr: string, trace: string}} Result */ +/** @typedef {{devtoolsLog: string, lhr: string, trace: string}} Result */ /** @typedef {{url: string, wpt: Result|null, wptRetries: number, unthrottled: Result|null, unthrottledRetries: number, errors?: string[]}} ResultsForUrl */ /** @typedef {Result & {metrics: LH.Artifacts.TimingSummary}} ResultWithMetrics */ /** @typedef {{results: ResultsForUrl[]}} Summary */ diff --git a/core/scripts/lantern/collect/golden.js b/core/scripts/lantern/collect/golden.js index 27548a40a539..ef01f2683443 100644 --- a/core/scripts/lantern/collect/golden.js +++ b/core/scripts/lantern/collect/golden.js @@ -35,21 +35,21 @@ function makeGolden(log, summary) { if (!unthrottled.devtoolsLog) throw new Error(`missing devtoolsLog for ${url}`); log.progress(`getting metrics ${Number(index) + 1} / ${summary.results.length}`); - const wptMetrics = common.getMetrics(loadLhr(wpt.lhr)); - if (!wptMetrics) { - throw new Error('expected wptMetrics'); + const mobileMetrics = common.getMetrics(loadLhr(wpt.lhr)); + if (!mobileMetrics) { + throw new Error('expected mobileMetrics'); } goldenSites.push({ url, wpt3g: { - firstContentfulPaint: wptMetrics.firstContentfulPaint, - firstMeaningfulPaint: wptMetrics.firstMeaningfulPaint, - timeToConsistentlyInteractive: wptMetrics.interactive, - speedIndex: wptMetrics.speedIndex, - largestContentfulPaint: wptMetrics.largestContentfulPaint, - timeToFirstByte: wptMetrics.timeToFirstByte, - lcpLoadStart: wptMetrics.lcpLoadStart, - lcpLoadEnd: wptMetrics.lcpLoadEnd, + firstContentfulPaint: mobileMetrics.firstContentfulPaint, + firstMeaningfulPaint: mobileMetrics.firstMeaningfulPaint, + timeToConsistentlyInteractive: mobileMetrics.interactive, + speedIndex: mobileMetrics.speedIndex, + largestContentfulPaint: mobileMetrics.largestContentfulPaint, + timeToFirstByte: mobileMetrics.timeToFirstByte, + lcpLoadStart: mobileMetrics.lcpLoadStart, + lcpLoadEnd: mobileMetrics.lcpLoadEnd, }, unthrottled: { tracePath: unthrottled.trace, From 90d2560200087ee1359c4bf4049e52d6c548962e Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 2 Jun 2023 13:47:31 -0700 Subject: [PATCH 04/15] write applescript for controlling link conditioner --- core/scripts/lantern/collect/collect.js | 20 ++++++- .../collect/link-conditioner.applescript | 54 +++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 core/scripts/lantern/collect/link-conditioner.applescript diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index b9bc23a6c211..5cbcacec37ae 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -9,7 +9,7 @@ /** @typedef {import('./common.js').Summary} Summary */ import fs from 'fs'; -import {execFile} from 'child_process'; +import {execFile, execFileSync} from 'child_process'; import {promisify} from 'util'; import defaultTestUrls from './urls.js'; @@ -64,12 +64,28 @@ async function runUnthrottledLocally(url) { }; } +function enableLinkConditioner() { + execFileSync('osascript', ['link-conditioner.applescript', 'true', 'LighthouseCustom'], { + cwd: `${LH_ROOT}/core/scripts/lantern/collect`, + }); + return () => { + execFileSync('osascript', ['link-conditioner.applescript', 'false', 'LighthouseCustom'], { + cwd: `${LH_ROOT}/core/scripts/lantern/collect`, + }); + }; +} + /** * @param {string} url * @return {Promise} */ async function runThrottledMobileDevice(url) { - return runUnthrottledLocally(url); + const disableLinkConditioner = enableLinkConditioner(); + try { + return await runUnthrottledLocally(url); + } finally { + disableLinkConditioner(); + } } /** diff --git a/core/scripts/lantern/collect/link-conditioner.applescript b/core/scripts/lantern/collect/link-conditioner.applescript new file mode 100644 index 000000000000..d5215a731f86 --- /dev/null +++ b/core/scripts/lantern/collect/link-conditioner.applescript @@ -0,0 +1,54 @@ +-- Note: this works on my personal mac (Intel, still on Montery), but not on my work mac (M1, on Ventura). +-- For Ventura: change "System Preferences" to "System Settings". And figure out why `click button "ON"` fails. + +on run argv + set {should_enable, mode} to {item 1, item 2} of argv + + tell application "System Preferences" + activate + delay 0.1 + set current pane to pane id "com.apple.Network-Link-Conditioner" + end tell + + set FinalString to "" + set CurrString to "" + + tell application "System Events" + tell application process "System Preferences" + + set num_windows to count windows + repeat until (num_windows > 0) + set num_windows to count windows + set CurrString to "num_windows: " & num_windows + set FinalString to FinalString & CurrString & "\n" + delay 0.1 + end repeat + + tell window "Network Link Conditioner" + -- Buttons have no names on Ventura...? + -- repeat with b in (get buttons) + -- set CurrString to "btn: " & (name of b) + -- set FinalString to FinalString & CurrString & "\n" + -- end repeat + + -- Note: the "Accessibility Inspector" app is great for identifiying UI element names, but + -- in this case it is obvious. + if (should_enable = "true") + tell group 1 + click pop up button 1 + click menu item mode of menu 1 of pop up button 1 + end tell + click button "ON" + else + click button "OFF" + end if + + end tell + + end tell + end tell + + -- Uncomment for debugging. + -- copy FinalString to stdout +end run + From 5cf90e478a6c1756c264afbaf8b5e02791922b65 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 2 Jun 2023 15:53:53 -0700 Subject: [PATCH 05/15] read lhr from disk instead of stdout --- core/scripts/lantern/collect/collect.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index 5cbcacec37ae..2f3ec3036324 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -42,24 +42,23 @@ function saveData(filename, data) { */ async function runUnthrottledLocally(url) { const artifactsFolder = `${LH_ROOT}/.tmp/collect-traces-artifacts`; - const {stdout} = await execFileAsync('node', [ + if (fs.existsSync(artifactsFolder)) { + fs.rmSync(artifactsFolder, {recursive: true}); + } + await execFileAsync('node', [ `${LH_ROOT}/cli`, url, '--throttling-method=provided', - '--output=json', `-AG=${artifactsFolder}`, process.env.OOPIFS === '1' ? '' : '--chrome-flags=--disable-features=site-per-process', - ], { - // Default (1024 * 1024) is too small. - maxBuffer: 10 * 1024 * 1024, - }); - const lhr = JSON.parse(stdout); - assertLhr(lhr); + ]); + const lhrString = fs.readFileSync(`${artifactsFolder}/lhr.report.json`, 'utf-8'); + assertLhr(JSON.parse(lhrString)); const devtoolsLog = fs.readFileSync(`${artifactsFolder}/defaultPass.devtoolslog.json`, 'utf-8'); const trace = fs.readFileSync(`${artifactsFolder}/defaultPass.trace.json`, 'utf-8'); return { devtoolsLog, - lhr: JSON.stringify(lhr), + lhr: lhrString, trace, }; } From 5a8c50ed192857d84aff0864268e02f0935bc104 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 29 Sep 2023 11:10:15 -0700 Subject: [PATCH 06/15] wip --- core/scripts/lantern/collect/urls.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/scripts/lantern/collect/urls.js b/core/scripts/lantern/collect/urls.js index bd6cd779628e..866ce66ef616 100644 --- a/core/scripts/lantern/collect/urls.js +++ b/core/scripts/lantern/collect/urls.js @@ -122,7 +122,7 @@ UNION DISTINCT (SELECT url FROM (SELECT * FROM temp_urls LIMIT 1000) ORDER BY RAND() LIMIT 200) ) */ -// Note: this is a random sampling of the World Wide Web, so expect lots of porn. +// Note: this is a random sampling of the World Wide Web, so expect lots of NSFW content. const urls2023 = [ 'http://2011hana-animals.blogspot.com/', 'http://a2ascholarships.iccr.gov.in/', From 63d93fb8fc09243b64045388697d19eab5b47f29 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 29 Sep 2023 14:11:41 -0700 Subject: [PATCH 07/15] update --- core/scripts/lantern/collect/collect.js | 29 +++++++++++++++++++------ 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index 2f3ec3036324..c8ebffc86536 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -38,9 +38,10 @@ function saveData(filename, data) { /** * @param {string} url + * @param {string[]} args * @return {Promise} */ -async function runUnthrottledLocally(url) { +async function runLighthouse(url, args) { const artifactsFolder = `${LH_ROOT}/.tmp/collect-traces-artifacts`; if (fs.existsSync(artifactsFolder)) { fs.rmSync(artifactsFolder, {recursive: true}); @@ -48,9 +49,8 @@ async function runUnthrottledLocally(url) { await execFileAsync('node', [ `${LH_ROOT}/cli`, url, - '--throttling-method=provided', `-AG=${artifactsFolder}`, - process.env.OOPIFS === '1' ? '' : '--chrome-flags=--disable-features=site-per-process', + ...args, ]); const lhrString = fs.readFileSync(`${artifactsFolder}/lhr.report.json`, 'utf-8'); assertLhr(JSON.parse(lhrString)); @@ -79,14 +79,29 @@ function enableLinkConditioner() { * @return {Promise} */ async function runThrottledMobileDevice(url) { - const disableLinkConditioner = enableLinkConditioner(); + // const disableLinkConditioner = enableLinkConditioner(); try { - return await runUnthrottledLocally(url); + return await runLighthouse(url, [ + '--port=9222', + '--throttling-method=provided', + '--screenEmulation.disabled', + '--throttling.cpuSlowdownMultiplier=1', + ]); } finally { - disableLinkConditioner(); + // disableLinkConditioner(); } } +/** + * @param {string} url + * @return {Promise} + */ +async function runUnthrottledLocalDevice(url) { + return runLighthouse(url, [ + '--throttling-method=provided', + ]); +} + /** * Repeats the async function a maximum of maxAttempts times until it passes. * @param {() => Promise} asyncFn @@ -170,7 +185,7 @@ async function main() { } updateProgress(); - unthrottledRun = await repeatUntilPassOrNull(() => runUnthrottledLocally(url)); + // unthrottledRun = await repeatUntilPassOrNull(() => runUnthrottledLocalDevice(url)); updateProgress(); mobileRun = await repeatUntilPassOrNull(() => runThrottledMobileDevice(url)); updateProgress(); From d0f602acf7aa85104d4b387af8133d8fde0ed7fd Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 29 Sep 2023 15:57:24 -0700 Subject: [PATCH 08/15] wip --- core/scripts/lantern/collect/README.md | 49 +++++++++++++++++++++---- core/scripts/lantern/collect/collect.js | 12 ++++-- core/scripts/lantern/collect/urls.js | 2 +- 3 files changed, 50 insertions(+), 13 deletions(-) diff --git a/core/scripts/lantern/collect/README.md b/core/scripts/lantern/collect/README.md index 01299267ec1f..a55c73b600be 100644 --- a/core/scripts/lantern/collect/README.md +++ b/core/scripts/lantern/collect/README.md @@ -1,25 +1,47 @@ # Lantern Collect Traces -Collects many traces using a local machine and a local mobile device. Must be run on OSX, as it relies on Link Conditioner. +Collects many traces using a local machine and a local mobile device. Must be run on Mac, as it relies on Link Conditioner. -Each URL is processed one a time: first as unthrottled (but still with mobile UA/viewport emulation) on the local machine, then again right after on an adb-connected mobile device connected to the network via hotspot. Link Conditioner is enabled for the duration of the mobile run. The runs are done back-to-back to avoid potential variance introduced by a site changing its content. +The process to collect these traces requires a Mac device, and a mobile device (Moto G Power). The Mac will hotspot for the mobile device, and the Mac will use Link Conditioner to shape the network traffic. + +Each URL is processed one a time: first as unthrottled (but still with mobile UA/viewport emulation) on the Mac, then again right after on an adb-connected mobile device connected to the network via hotspot. Link Conditioner is enabled for the duration of the mobile run. The runs are done back-to-back to avoid potential variance introduced by a site changing its content. These traces are used to evaluate changes to the Lantern network and CPU emulation. Historical note: we used to collect the mobile traces from WebPageTest, however their API no longer supports real mobile devices. +## Run -## Historical lantern trace databases +First double check the following: +1. Get the latest stable Chrome, both on the Mac and the mobile device +1. Get the latest OS on the mobile device +1. Close all unnecessary applications on the Mac and the mobile device +1. Ensure both devices are connected to power +1. Install and activate Caffeine on the Mac to prevent sleep +1. On the mobile device, disable Auto App Updates in the Google Play Store +1. On the mobile device, forget any present WiFi connection so that a temporary loss in the hotspot does not accidentally fallback to a fast connection -### December 2019 +Next, setup the hotspot: -There are 9 runs for each URL in the big zip. The golden zip contains just the median runs (by performance score), along with a dump of the `metrics` collected by Lighthouse. This sampling method was dropped for future trace database updates. The mobile traces here came from a Moto G4 via WPT. +1. On the Mac, connect to a router with a cable. Do not explicitly disable WiFi, as that needs to be on for the next step +1. Start a hotspot on the Mac ("Internet Sharing") and connect via the mobile device. Now, the Mac will be connected to the Internet via the hardlink, and the mobile device will be connected to the Internet via the Mac over local network WiFi. +1. Set the mobile device close to the mac, but not directly on or too near to it or any router as this will result in a poor connection. -[Download all](https://drive.google.com/open?id=17WsQ3CU0R1072sezXw5Np2knV_NvGAfO) traces (3.2GB zipped, 19GB unzipped). -[Download golden](https://drive.google.com/open?id=1aQp-oqX7jeFq9RFwNik6gkEZ0FLtjlHp) traces (363MB zipped, 2.1GB unzipped). +Next, setup the network emulation: -## Run +1. Create an entry "LighthouseCustom", and select it +1. Set the download/upload bandwidth to match our "mobile regular 3G" profile: 700 Kbps +1. Set the delay (for both download/upload) to match our "mobile regular 3G" profile: 300 ms - so give 150ms to each +1. Set the DNS delay and packet loss fields to 0 +1. Due to the roundabout network emulation and the overhead of a hotspot, we need to finetune these parameters. On the mobile device, go to https://speed.measurementlab.net and run a network test. Modify the inputs in Link Conditioner until the test results match the target parameters. After each change, toggle Link Condition Off/On. +1. 1. I found the uplink throttle to have no impact on the reported upload rate, I assume because the hotspot has too much overhead. So I set the upload bandwidth field to 0 for max. +1. 1. If packet loss is greater than 0%, try moving away from noisy interference (don't be near a router or smart appliance) +1. 1. First finetune the latency: it should be near 300ms +1. 1. Now finetune the down/up link bandwidth +1. 1. For me, I got consisent 0.7 kbps and 0.4 kbps for download/upload (the upload wasn't very close to the target but that's fine for our purposes) for these values: Download- 800kbps, 70ms delay; Upload- max kbps, 70ms delay + +Now run the collection script. ```sh node --max-old-space-size=4096 collect.js @@ -38,3 +60,14 @@ node --input-type=module -e "import urls from './urls.js'; console.log(urls.join ``` Note: some good URLs will 4xx b/c the site blocks such usages of `curl`. + + +## Historical trace databases + + +### December 2019 + +There are 9 runs for each URL in the big zip. The golden zip contains just the median runs (by performance score), along with a dump of the `metrics` collected by Lighthouse. This sampling method was dropped for future trace database updates. The mobile traces here came from a Moto G4 via WPT. + +[Download all](https://drive.google.com/open?id=17WsQ3CU0R1072sezXw5Np2knV_NvGAfO) traces (3.2GB zipped, 19GB unzipped). +[Download golden](https://drive.google.com/open?id=1aQp-oqX7jeFq9RFwNik6gkEZ0FLtjlHp) traces (363MB zipped, 2.1GB unzipped). diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index c8ebffc86536..043954e01ebe 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -79,7 +79,7 @@ function enableLinkConditioner() { * @return {Promise} */ async function runThrottledMobileDevice(url) { - // const disableLinkConditioner = enableLinkConditioner(); + const disableLinkConditioner = enableLinkConditioner(); try { return await runLighthouse(url, [ '--port=9222', @@ -88,7 +88,7 @@ async function runThrottledMobileDevice(url) { '--throttling.cpuSlowdownMultiplier=1', ]); } finally { - // disableLinkConditioner(); + disableLinkConditioner(); } } @@ -97,6 +97,7 @@ async function runThrottledMobileDevice(url) { * @return {Promise} */ async function runUnthrottledLocalDevice(url) { + execFileSync('adb', 'forward tcp:9222 localabstract:chrome_devtools_remote'.split(' ')); return runLighthouse(url, [ '--throttling-method=provided', ]); @@ -154,6 +155,9 @@ async function main() { fs.mkdirSync(common.collectFolder, {recursive: true}); + // Warmup device. + await runThrottledMobileDevice('https://www.example.com'); + // Traces are collected for one URL at a time, in series, so all traces are from a small time // frame, reducing the chance of a site change affecting results. for (const url of TEST_URLS) { @@ -184,11 +188,11 @@ async function main() { ].join(' ')); } - updateProgress(); - // unthrottledRun = await repeatUntilPassOrNull(() => runUnthrottledLocalDevice(url)); updateProgress(); mobileRun = await repeatUntilPassOrNull(() => runThrottledMobileDevice(url)); updateProgress(); + unthrottledRun = await repeatUntilPassOrNull(() => runUnthrottledLocalDevice(url)); + updateProgress(); if (!unthrottledRun.result) log.log('failed to get wpt result'); if (!mobileRun.result) log.log('failed to get unthrottled result'); diff --git a/core/scripts/lantern/collect/urls.js b/core/scripts/lantern/collect/urls.js index 866ce66ef616..faac13966eb9 100644 --- a/core/scripts/lantern/collect/urls.js +++ b/core/scripts/lantern/collect/urls.js @@ -126,7 +126,7 @@ UNION DISTINCT const urls2023 = [ 'http://2011hana-animals.blogspot.com/', 'http://a2ascholarships.iccr.gov.in/', - 'http://autolote.transauto.com.sv/', + // 'http://autolote.transauto.com.sv/', 'http://blog.darom.com.br/', 'http://blove.jp/', 'http://buckeyebroadband.speedtestcustom.com/', From 604faddfd4e7fcfb1a93cadf0dd401b60c914c14 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 29 Sep 2023 16:07:51 -0700 Subject: [PATCH 09/15] add estimate --- core/scripts/lantern/collect/collect.js | 34 +++++++++++++++++++------ 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index 043954e01ebe..3ed46d1f4efa 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -158,15 +158,25 @@ async function main() { // Warmup device. await runThrottledMobileDevice('https://www.example.com'); - // Traces are collected for one URL at a time, in series, so all traces are from a small time - // frame, reducing the chance of a site change affecting results. - for (const url of TEST_URLS) { + const urlsToTest = TEST_URLS.filter(url => { // This URL has been done on a previous script invocation. Skip it. if (summary.results.find((urlResultSet) => urlResultSet.url === url)) { log.log(`already collected for ${url}`); - continue; + return false; } + return true; + }); + const skipped = TEST_URLS.length - urlsToTest.length; + if (skipped) { + log.log(`skipping ${skipped} urls that have already been collected`); + } + + const startTime = performance.now(); + + // Traces are collected for one URL at a time, in series, so all traces are from a small time + // frame, reducing the chance of a site change affecting results. + for (const url of urlsToTest) { log.log(`collecting for ${url}`); const sanitizedUrl = url.replace(/[^a-z0-9]/gi, '-'); @@ -178,13 +188,21 @@ async function main() { // The closure this makes is too convenient to decompose. // eslint-disable-next-line no-inner-declarations function updateProgress() { - const index = TEST_URLS.indexOf(url); + const index = urlsToTest.indexOf(url); + const numTested = index; + const avgPerUrl = (performance.now() - startTime) / index; + const timeLeftMs = avgPerUrl * (urlsToTest.length - numTested); + const timeLeftMinutes = timeLeftMs / 1000; + const timeLeft = timeLeftMinutes > 60 + ? `${Math.floor(timeLeftMinutes / 60)} hours` : + `${timeLeftMinutes} minutes`; log.progress([ - `${url} (${index + 1} / ${TEST_URLS.length})`, + `${url} (${index + 1} / ${urlsToTest.length})`, 'unthrottled, local machine', (unthrottledRun ? (unthrottledRun.result ? '✅' : '❌') : '…'), 'throttled, mobile device', (mobileRun ? (mobileRun.result ? '✅' : '❌') : '…'), + `Time left: ~${timeLeft}`, ].join(' ')); } @@ -193,8 +211,8 @@ async function main() { updateProgress(); unthrottledRun = await repeatUntilPassOrNull(() => runUnthrottledLocalDevice(url)); updateProgress(); - if (!unthrottledRun.result) log.log('failed to get wpt result'); - if (!mobileRun.result) log.log('failed to get unthrottled result'); + if (!unthrottledRun.result) log.log('failed to get unthrottled result'); + if (!mobileRun.result) log.log('failed to get mobile result'); const unthrottledResult = unthrottledRun.result; const wptResult = mobileRun.result; From 0b18dc06a9e148dd9b136c2a7cd80bc88331ec36 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 29 Sep 2023 16:21:02 -0700 Subject: [PATCH 10/15] fix --- core/scripts/lantern/collect/collect.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index 3ed46d1f4efa..88cc14018d90 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -79,6 +79,7 @@ function enableLinkConditioner() { * @return {Promise} */ async function runThrottledMobileDevice(url) { + execFileSync('adb', 'forward tcp:9222 localabstract:chrome_devtools_remote'.split(' ')); const disableLinkConditioner = enableLinkConditioner(); try { return await runLighthouse(url, [ @@ -97,7 +98,6 @@ async function runThrottledMobileDevice(url) { * @return {Promise} */ async function runUnthrottledLocalDevice(url) { - execFileSync('adb', 'forward tcp:9222 localabstract:chrome_devtools_remote'.split(' ')); return runLighthouse(url, [ '--throttling-method=provided', ]); @@ -192,7 +192,7 @@ async function main() { const numTested = index; const avgPerUrl = (performance.now() - startTime) / index; const timeLeftMs = avgPerUrl * (urlsToTest.length - numTested); - const timeLeftMinutes = timeLeftMs / 1000; + const timeLeftMinutes = timeLeftMs / 1000 / 1000; const timeLeft = timeLeftMinutes > 60 ? `${Math.floor(timeLeftMinutes / 60)} hours` : `${timeLeftMinutes} minutes`; From 043deaf2256e00293be2680e26675522ef1d6a60 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 29 Sep 2023 16:23:09 -0700 Subject: [PATCH 11/15] wip --- core/scripts/lantern/collect/collect.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index 88cc14018d90..b21a028283b2 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -198,9 +198,9 @@ async function main() { `${timeLeftMinutes} minutes`; log.progress([ `${url} (${index + 1} / ${urlsToTest.length})`, - 'unthrottled, local machine', + 'local', (unthrottledRun ? (unthrottledRun.result ? '✅' : '❌') : '…'), - 'throttled, mobile device', + 'mobile', (mobileRun ? (mobileRun.result ? '✅' : '❌') : '…'), `Time left: ~${timeLeft}`, ].join(' ')); From ebd8aa933d8d39b13e8f9b3740bcf4afb3fd83f2 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Fri, 29 Sep 2023 16:24:00 -0700 Subject: [PATCH 12/15] round minutes --- core/scripts/lantern/collect/collect.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index b21a028283b2..92909c9eaca9 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -192,7 +192,7 @@ async function main() { const numTested = index; const avgPerUrl = (performance.now() - startTime) / index; const timeLeftMs = avgPerUrl * (urlsToTest.length - numTested); - const timeLeftMinutes = timeLeftMs / 1000 / 1000; + const timeLeftMinutes = Math.floor(timeLeftMs / 1000 / 1000); const timeLeft = timeLeftMinutes > 60 ? `${Math.floor(timeLeftMinutes / 60)} hours` : `${timeLeftMinutes} minutes`; From f00d1390481559701a10902b94f4a92bcfcbb113 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Mon, 2 Oct 2023 11:08:17 -0700 Subject: [PATCH 13/15] start using new data --- core/scripts/lantern/collect/README.md | 4 +- core/scripts/lantern/download-traces.sh | 4 +- .../fixtures/lantern-baseline-accuracy.json | 30 ++-- .../lantern-baseline-computed-values.json | 149 +++++++++--------- 4 files changed, 92 insertions(+), 95 deletions(-) diff --git a/core/scripts/lantern/collect/README.md b/core/scripts/lantern/collect/README.md index a55c73b600be..1b894deee620 100644 --- a/core/scripts/lantern/collect/README.md +++ b/core/scripts/lantern/collect/README.md @@ -49,7 +49,9 @@ node --max-old-space-size=4096 collect.js Output will be in `dist/collect-lantern-traces`, and zipped at `dist/collect-lantern-traces.zip`. -Rename the zip with the current data (ex: `golden-lantern-traces-2019-12-17.zip`) to Google Drive, and update `VERSION` in `download-traces.sh`. +Rename the zip with the current data (ex: `lantern-traces-2019-12-17.zip`) to Google Drive, and update `VERSION` in `download-traces.sh`. + +Finally, upload the zip to the `lh-lantern-data` Cloud storage. ## Verify URLs diff --git a/core/scripts/lantern/download-traces.sh b/core/scripts/lantern/download-traces.sh index 2a23f6de059b..bc96c500bfb3 100755 --- a/core/scripts/lantern/download-traces.sh +++ b/core/scripts/lantern/download-traces.sh @@ -4,7 +4,7 @@ set -e -VERSION="2019-12-17-v2" +VERSION="2023-wip" DIRNAME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" LH_ROOT_PATH="$DIRNAME/../../.." @@ -28,7 +28,7 @@ fi rm -rf lantern-data/ mkdir -p lantern-data/ && cd lantern-data -curl -o golden-lantern-traces.zip -L https://storage.googleapis.com/lh-lantern-data/golden-lantern-traces-$VERSION.zip +curl -o golden-lantern-traces.zip -L https://storage.googleapis.com/lh-lantern-data/lantern-traces-$VERSION.zip unzip -q golden-lantern-traces.zip rm golden-lantern-traces.zip diff --git a/core/test/fixtures/lantern-baseline-accuracy.json b/core/test/fixtures/lantern-baseline-accuracy.json index a73d62dea4f1..b257f1e7573f 100644 --- a/core/test/fixtures/lantern-baseline-accuracy.json +++ b/core/test/fixtures/lantern-baseline-accuracy.json @@ -1,27 +1,27 @@ { "roughEstimateOfFCP": { - "p50": 0.28936170212765955, - "p90": 0.4879553466509988, - "p95": 0.5191288993525603 + "p50": 0.5179428860247662, + "p90": 0.703180843459614, + "p95": 0.762613981762918 }, "roughEstimateOfFMP": { - "p50": 0.31948476052249636, - "p90": 0.5385564466378778, - "p95": 0.6406490583915669 + "p50": 0.51956745623069, + "p90": 0.7311130157952737, + "p95": 0.781940441882805 }, "roughEstimateOfSI": { - "p50": 0.2646236166849082, - "p90": 0.6493506493506493, - "p95": 0.9006036782254668 + "p50": 0.46736765772298766, + "p90": 0.6705320600272852, + "p95": 0.7396727779067069 }, "roughEstimateOfTTI": { - "p50": 0.27676284306826177, - "p90": 0.6586020003352517, - "p95": 0.7422988097352994 + "p50": 0.6319950469114636, + "p90": 0.8609892064998221, + "p95": 0.9417211328976035 }, "roughEstimateOfLCP": { - "p50": 0.20067905646890635, - "p90": 0.6717796212239787, - "p95": 0.8626966985498303 + "p50": 0.46511627906976744, + "p90": 0.7186291881443299, + "p95": 0.8750335210512201 } } diff --git a/core/test/fixtures/lantern-baseline-computed-values.json b/core/test/fixtures/lantern-baseline-computed-values.json index a8146ecc6c45..8394a59cd2b0 100644 --- a/core/test/fixtures/lantern-baseline-computed-values.json +++ b/core/test/fixtures/lantern-baseline-computed-values.json @@ -1,81 +1,76 @@ { "sites": [ - {"url": "http://m.iciba.com", "roughEstimateOfFCP": 1744, "optimisticFCP": 1744, "pessimisticFCP": 1744, "roughEstimateOfFMP": 1744, "optimisticFMP": 1744, "pessimisticFMP": 1744, "roughEstimateOfTTI": 7518, "optimisticTTI": 3338, "pessimisticTTI": 11698, "roughEstimateOfSI": 9842, "optimisticSI": 4764, "pessimisticSI": 5265, "roughEstimateOfLCP": 9783, "optimisticLCP": 9342, "pessimisticLCP": 10223, "roughEstimateOfTTFB": 685}, - {"url": "http://www.zol.com.cn/", "roughEstimateOfFCP": 3447, "optimisticFCP": 3447, "pessimisticFCP": 3447, "roughEstimateOfFMP": 3447, "optimisticFMP": 3447, "pessimisticFMP": 3447, "roughEstimateOfTTI": 15991, "optimisticTTI": 15003, "pessimisticTTI": 16979, "roughEstimateOfSI": 12512, "optimisticSI": 4861, "pessimisticSI": 9164, "roughEstimateOfLCP": 4369, "optimisticLCP": 4194, "pessimisticLCP": 4544, "roughEstimateOfTTFB": 648}, - {"url": "https://birdsarentreal.com", "roughEstimateOfFCP": 2962, "optimisticFCP": 2962, "pessimisticFCP": 2962, "roughEstimateOfFMP": 3448, "optimisticFMP": 3124, "pessimisticFMP": 3772, "roughEstimateOfTTI": 13465, "optimisticTTI": 12107, "pessimisticTTI": 14823, "roughEstimateOfSI": 5123, "optimisticSI": 1323, "pessimisticSI": 5417, "roughEstimateOfLCP": 7754, "optimisticLCP": 6986, "pessimisticLCP": 8523, "roughEstimateOfTTFB": 701}, - {"url": "https://depositfiles.com/", "roughEstimateOfFCP": 5098, "optimisticFCP": 5098, "pessimisticFCP": 5098, "roughEstimateOfFMP": 5486, "optimisticFMP": 5098, "pessimisticFMP": 5874, "roughEstimateOfTTI": 5982, "optimisticTTI": 5854, "pessimisticTTI": 6109, "roughEstimateOfSI": 7568, "optimisticSI": 2787, "pessimisticSI": 6025, "roughEstimateOfLCP": 6034, "optimisticLCP": 6034, "pessimisticLCP": 6034, "roughEstimateOfTTFB": 907}, - {"url": "https://en-maktoob.yahoo.com/?p=xa", "roughEstimateOfFCP": 1410, "optimisticFCP": 1410, "pessimisticFCP": 1410, "roughEstimateOfFMP": 1427, "optimisticFMP": 1410, "pessimisticFMP": 1443, "roughEstimateOfTTI": 6110, "optimisticTTI": 5167, "pessimisticTTI": 7054, "roughEstimateOfSI": 3885, "optimisticSI": 1039, "pessimisticSI": 4125, "roughEstimateOfLCP": 7333, "optimisticLCP": 7251, "pessimisticLCP": 7416, "roughEstimateOfTTFB": 618}, - {"url": "https://en.softonic.com", "roughEstimateOfFCP": 2191, "optimisticFCP": 2191, "pessimisticFCP": 2191, "roughEstimateOfFMP": 2584, "optimisticFMP": 2191, "pessimisticFMP": 2977, "roughEstimateOfTTI": 31427, "optimisticTTI": 27015, "pessimisticTTI": 35839, "roughEstimateOfSI": 12996, "optimisticSI": 3067, "pessimisticSI": 13771, "roughEstimateOfLCP": 3915, "optimisticLCP": 3504, "pessimisticLCP": 4325, "roughEstimateOfTTFB": 899}, - {"url": "https://gm.58.com/glsanfrancisco-sl/", "roughEstimateOfFCP": 3019, "optimisticFCP": 3019, "pessimisticFCP": 3019, "roughEstimateOfFMP": 3019, "optimisticFMP": 3019, "pessimisticFMP": 3019, "roughEstimateOfTTI": 4785, "optimisticTTI": 4436, "pessimisticTTI": 5134, "roughEstimateOfSI": 4605, "optimisticSI": 1762, "pessimisticSI": 3674, "roughEstimateOfLCP": 5337, "optimisticLCP": 5045, "pessimisticLCP": 5630, "roughEstimateOfTTFB": 787}, - {"url": "https://m.facebook.com/", "roughEstimateOfFCP": 2438, "optimisticFCP": 2407, "pessimisticFCP": 2468, "roughEstimateOfFMP": 2438, "optimisticFMP": 2407, "pessimisticFMP": 2468, "roughEstimateOfTTI": 4822, "optimisticTTI": 4217, "pessimisticTTI": 5427, "roughEstimateOfSI": 2685, "optimisticSI": 479, "pessimisticSI": 3484, "roughEstimateOfLCP": 3422, "optimisticLCP": 3391, "pessimisticLCP": 3452, "roughEstimateOfTTFB": 626}, - {"url": "https://m.hexun.com/", "roughEstimateOfFCP": 4446, "optimisticFCP": 4446, "pessimisticFCP": 4446, "roughEstimateOfFMP": 4446, "optimisticFMP": 4446, "pessimisticFMP": 4446, "roughEstimateOfTTI": 13560, "optimisticTTI": 9706, "pessimisticTTI": 17415, "roughEstimateOfSI": 11106, "optimisticSI": 3631, "pessimisticSI": 9650, "roughEstimateOfLCP": 5993, "optimisticLCP": 4825, "pessimisticLCP": 7161, "roughEstimateOfTTFB": 931}, - {"url": "https://m.mop.com/", "roughEstimateOfFCP": 2518, "optimisticFCP": 2518, "pessimisticFCP": 2518, "roughEstimateOfFMP": 2518, "optimisticFMP": 2518, "pessimisticFMP": 2518, "roughEstimateOfTTI": 6347, "optimisticTTI": 4869, "pessimisticTTI": 7825, "roughEstimateOfSI": 6129, "optimisticSI": 2399, "pessimisticSI": 4646, "roughEstimateOfLCP": 3548, "optimisticLCP": 3398, "pessimisticLCP": 3698, "roughEstimateOfTTFB": 859}, - {"url": "https://m.sogou.com/", "roughEstimateOfFCP": 2151, "optimisticFCP": 2151, "pessimisticFCP": 2151, "roughEstimateOfFMP": 3077, "optimisticFMP": 2151, "pessimisticFMP": 4002, "roughEstimateOfTTI": 4313, "optimisticTTI": 4199, "pessimisticTTI": 4426, "roughEstimateOfSI": 8305, "optimisticSI": 4734, "pessimisticSI": 2965, "roughEstimateOfLCP": 5123, "optimisticLCP": 4937, "pessimisticLCP": 5309, "roughEstimateOfTTFB": 778}, - {"url": "https://m.youdao.com/", "roughEstimateOfFCP": 1497, "optimisticFCP": 1497, "pessimisticFCP": 1497, "roughEstimateOfFMP": 1497, "optimisticFMP": 1497, "pessimisticFMP": 1497, "roughEstimateOfTTI": 2492, "optimisticTTI": 2348, "pessimisticTTI": 2635, "roughEstimateOfSI": 2371, "optimisticSI": 1152, "pessimisticSI": 1552, "roughEstimateOfLCP": 2304, "optimisticLCP": 2304, "pessimisticLCP": 2304, "roughEstimateOfTTFB": 988}, - {"url": "https://mail.ru/", "roughEstimateOfFCP": 3562, "optimisticFCP": 3562, "pessimisticFCP": 3562, "roughEstimateOfFMP": 3562, "optimisticFMP": 3562, "pessimisticFMP": 3562, "roughEstimateOfTTI": 25151, "optimisticTTI": 19420, "pessimisticTTI": 30881, "roughEstimateOfSI": 9367, "optimisticSI": 2087, "pessimisticSI": 10300, "roughEstimateOfLCP": 4730, "optimisticLCP": 4438, "pessimisticLCP": 5021, "roughEstimateOfTTFB": 763}, - {"url": "https://mobile.twitter.com/", "roughEstimateOfFCP": 1100, "optimisticFCP": 1100, "pessimisticFCP": 1100, "roughEstimateOfFMP": 4843, "optimisticFMP": 4647, "pessimisticFMP": 5039, "roughEstimateOfTTI": 8467, "optimisticTTI": 8387, "pessimisticTTI": 8547, "roughEstimateOfSI": 4462, "optimisticSI": 1283, "pessimisticSI": 4486, "roughEstimateOfLCP": 9326, "optimisticLCP": 9246, "pessimisticLCP": 9406, "roughEstimateOfTTFB": 633}, - {"url": "https://noclip.website/", "roughEstimateOfFCP": 14263, "optimisticFCP": 14263, "pessimisticFCP": 14263, "roughEstimateOfFMP": 14263, "optimisticFMP": 14263, "pessimisticFMP": 14263, "roughEstimateOfTTI": 14726, "optimisticTTI": 14726, "pessimisticTTI": 14726, "roughEstimateOfSI": 14263, "optimisticSI": 606, "pessimisticSI": 14263, "roughEstimateOfLCP": 14790, "optimisticLCP": 14790, "pessimisticLCP": 14790, "roughEstimateOfTTFB": 601}, - {"url": "https://noclip.website/#bk/01;ZNCA8Ac%7d%7b15_%28S%7bMfXPk;;zm%28[o$K3YC;u%5e~P3%7duru4~L~W9l%7d&a79MC%7d=m$v*_8!_6DhC=", "roughEstimateOfFCP": 14253, "optimisticFCP": 14253, "pessimisticFCP": 14253, "roughEstimateOfFMP": 14253, "optimisticFMP": 14253, "pessimisticFMP": 14253, "roughEstimateOfTTI": 14853, "optimisticTTI": 14764, "pessimisticTTI": 14941, "roughEstimateOfSI": 14253, "optimisticSI": 584, "pessimisticSI": 14253, "roughEstimateOfLCP": 14782, "optimisticLCP": 14782, "pessimisticLCP": 14782, "roughEstimateOfTTFB": 600}, - {"url": "https://sfbay.craigslist.org/", "roughEstimateOfFCP": 1519, "optimisticFCP": 1519, "pessimisticFCP": 1519, "roughEstimateOfFMP": 2654, "optimisticFMP": 2654, "pessimisticFMP": 2654, "roughEstimateOfTTI": 2729, "optimisticTTI": 2654, "pessimisticTTI": 2804, "roughEstimateOfSI": 1681, "optimisticSI": 482, "pessimisticSI": 1933, "roughEstimateOfLCP": 1827, "optimisticLCP": 1827, "pessimisticLCP": 1827, "roughEstimateOfTTFB": 604}, - {"url": "https://stripe.com/docs", "roughEstimateOfFCP": 3670, "optimisticFCP": 3670, "pessimisticFCP": 3670, "roughEstimateOfFMP": 3670, "optimisticFMP": 3670, "pessimisticFMP": 3670, "roughEstimateOfTTI": 6893, "optimisticTTI": 6482, "pessimisticTTI": 7304, "roughEstimateOfSI": 4919, "optimisticSI": 1830, "pessimisticSI": 4010, "roughEstimateOfLCP": 4473, "optimisticLCP": 4473, "pessimisticLCP": 4473, "roughEstimateOfTTFB": 1161}, - {"url": "https://wap.sogou.com/", "roughEstimateOfFCP": 2173, "optimisticFCP": 2173, "pessimisticFCP": 2173, "roughEstimateOfFMP": 2992, "optimisticFMP": 2173, "pessimisticFMP": 3812, "roughEstimateOfTTI": 6946, "optimisticTTI": 5404, "pessimisticTTI": 8489, "roughEstimateOfSI": 9543, "optimisticSI": 4895, "pessimisticSI": 4523, "roughEstimateOfLCP": 5067, "optimisticLCP": 4671, "pessimisticLCP": 5463, "roughEstimateOfTTFB": 794}, - {"url": "https://weather.com/", "roughEstimateOfFCP": 3751, "optimisticFCP": 3564, "pessimisticFCP": 3938, "roughEstimateOfFMP": 3751, "optimisticFMP": 3564, "pessimisticFMP": 3938, "roughEstimateOfTTI": 27167, "optimisticTTI": 23242, "pessimisticTTI": 31092, "roughEstimateOfSI": 14587, "optimisticSI": 1582, "pessimisticSI": 19418, "roughEstimateOfLCP": 4125, "optimisticLCP": 3938, "pessimisticLCP": 4312, "roughEstimateOfTTFB": 642}, - {"url": "https://www.4shared.com/", "roughEstimateOfFCP": 3488, "optimisticFCP": 3488, "pessimisticFCP": 3488, "roughEstimateOfFMP": 3997, "optimisticFMP": 3488, "pessimisticFMP": 4506, "roughEstimateOfTTI": 6149, "optimisticTTI": 6063, "pessimisticTTI": 6236, "roughEstimateOfSI": 4146, "optimisticSI": 819, "pessimisticSI": 4999, "roughEstimateOfLCP": 4679, "optimisticLCP": 4679, "pessimisticLCP": 4679, "roughEstimateOfTTFB": 601}, - {"url": "https://www.56.com/", "roughEstimateOfFCP": 2998, "optimisticFCP": 2793, "pessimisticFCP": 3202, "roughEstimateOfFMP": 2998, "optimisticFMP": 2793, "pessimisticFMP": 3202, "roughEstimateOfTTI": 26347, "optimisticTTI": 4098, "pessimisticTTI": 48596, "roughEstimateOfSI": 21816, "optimisticSI": 5195, "pessimisticSI": 22758, "roughEstimateOfLCP": 21835, "optimisticLCP": 5708, "pessimisticLCP": 37963, "roughEstimateOfTTFB": 840}, - {"url": "https://www.addthis.com/", "roughEstimateOfFCP": 2104, "optimisticFCP": 2104, "pessimisticFCP": 2104, "roughEstimateOfFMP": 2104, "optimisticFMP": 2104, "pessimisticFMP": 2104, "roughEstimateOfTTI": 9077, "optimisticTTI": 8624, "pessimisticTTI": 9531, "roughEstimateOfSI": 4925, "optimisticSI": 1375, "pessimisticSI": 5000, "roughEstimateOfLCP": 2625, "optimisticLCP": 2549, "pessimisticLCP": 2701, "roughEstimateOfTTFB": 699}, - {"url": "https://www.alexa.com/", "roughEstimateOfFCP": 3839, "optimisticFCP": 3839, "pessimisticFCP": 3839, "roughEstimateOfFMP": 4507, "optimisticFMP": 4184, "pessimisticFMP": 4831, "roughEstimateOfTTI": 15734, "optimisticTTI": 11567, "pessimisticTTI": 19901, "roughEstimateOfSI": 8065, "optimisticSI": 2373, "pessimisticSI": 7681, "roughEstimateOfLCP": 8807, "optimisticLCP": 8634, "pessimisticLCP": 8980, "roughEstimateOfTTFB": 654}, - {"url": "https://www.amazon.co.jp/", "roughEstimateOfFCP": 2940, "optimisticFCP": 2940, "pessimisticFCP": 2940, "roughEstimateOfFMP": 4042, "optimisticFMP": 2940, "pessimisticFMP": 5143, "roughEstimateOfTTI": 9041, "optimisticTTI": 6002, "pessimisticTTI": 12080, "roughEstimateOfSI": 4637, "optimisticSI": 1079, "pessimisticSI": 5194, "roughEstimateOfLCP": 5192, "optimisticLCP": 4670, "pessimisticLCP": 5714, "roughEstimateOfTTFB": 852}, - {"url": "https://www.att.com/", "roughEstimateOfFCP": 5457, "optimisticFCP": 5005, "pessimisticFCP": 5910, "roughEstimateOfFMP": 5698, "optimisticFMP": 5005, "pessimisticFMP": 6391, "roughEstimateOfTTI": 30075, "optimisticTTI": 27319, "pessimisticTTI": 32831, "roughEstimateOfSI": 9164, "optimisticSI": 1858, "pessimisticSI": 10482, "roughEstimateOfLCP": 13817, "optimisticLCP": 13737, "pessimisticLCP": 13897, "roughEstimateOfTTFB": 651}, - {"url": "https://www.bing.com/", "roughEstimateOfFCP": 962, "optimisticFCP": 962, "pessimisticFCP": 962, "roughEstimateOfFMP": 1339, "optimisticFMP": 962, "pessimisticFMP": 1717, "roughEstimateOfTTI": 2491, "optimisticTTI": 2241, "pessimisticTTI": 2741, "roughEstimateOfSI": 1565, "optimisticSI": 467, "pessimisticSI": 1788, "roughEstimateOfLCP": 1548, "optimisticLCP": 1262, "pessimisticLCP": 1834, "roughEstimateOfTTFB": 608}, - {"url": "https://www.blogger.com/about/", "roughEstimateOfFCP": 1533, "optimisticFCP": 1533, "pessimisticFCP": 1533, "roughEstimateOfFMP": 2106, "optimisticFMP": 1956, "pessimisticFMP": 2256, "roughEstimateOfTTI": 2251, "optimisticTTI": 2222, "pessimisticTTI": 2280, "roughEstimateOfSI": 6828, "optimisticSI": 4188, "pessimisticSI": 1870, "roughEstimateOfLCP": 2385, "optimisticLCP": 2280, "pessimisticLCP": 2489, "roughEstimateOfTTFB": 603}, - {"url": "https://www.cnet.com/", "roughEstimateOfFCP": 2578, "optimisticFCP": 2218, "pessimisticFCP": 2938, "roughEstimateOfFMP": 2814, "optimisticFMP": 2539, "pessimisticFMP": 3089, "roughEstimateOfTTI": 43169, "optimisticTTI": 39862, "pessimisticTTI": 46476, "roughEstimateOfSI": 15832, "optimisticSI": 1339, "pessimisticSI": 21858, "roughEstimateOfLCP": 4265, "optimisticLCP": 4185, "pessimisticLCP": 4346, "roughEstimateOfTTFB": 608}, - {"url": "https://www.codewars.com", "roughEstimateOfFCP": 2248, "optimisticFCP": 2248, "pessimisticFCP": 2248, "roughEstimateOfFMP": 3453, "optimisticFMP": 2422, "pessimisticFMP": 4483, "roughEstimateOfTTI": 8825, "optimisticTTI": 7042, "pessimisticTTI": 10608, "roughEstimateOfSI": 4008, "optimisticSI": 834, "pessimisticSI": 4755, "roughEstimateOfLCP": 9643, "optimisticLCP": 9318, "pessimisticLCP": 9968, "roughEstimateOfTTFB": 609}, - {"url": "https://www.dawn.com/", "roughEstimateOfFCP": 2588, "optimisticFCP": 2262, "pessimisticFCP": 2914, "roughEstimateOfFMP": 2832, "optimisticFMP": 2588, "pessimisticFMP": 3077, "roughEstimateOfTTI": 25693, "optimisticTTI": 23532, "pessimisticTTI": 27855, "roughEstimateOfSI": 10399, "optimisticSI": 1332, "pessimisticSI": 13514, "roughEstimateOfLCP": 3892, "optimisticLCP": 3240, "pessimisticLCP": 4543, "roughEstimateOfTTFB": 652}, - {"url": "https://www.deviantart.com/", "roughEstimateOfFCP": 2926, "optimisticFCP": 2926, "pessimisticFCP": 2926, "roughEstimateOfFMP": 2926, "optimisticFMP": 2926, "pessimisticFMP": 2926, "roughEstimateOfTTI": 13024, "optimisticTTI": 11062, "pessimisticTTI": 14985, "roughEstimateOfSI": 3089, "optimisticSI": 996, "pessimisticSI": 2992, "roughEstimateOfLCP": 11953, "optimisticLCP": 10408, "pessimisticLCP": 13497, "roughEstimateOfTTFB": 1009}, - {"url": "https://www.domaintools.com/", "roughEstimateOfFCP": 3236, "optimisticFCP": 3236, "pessimisticFCP": 3236, "roughEstimateOfFMP": 4819, "optimisticFMP": 3433, "pessimisticFMP": 6205, "roughEstimateOfTTI": 10881, "optimisticTTI": 10421, "pessimisticTTI": 11341, "roughEstimateOfSI": 7213, "optimisticSI": 3235, "pessimisticSI": 4515, "roughEstimateOfLCP": 7194, "optimisticLCP": 7194, "pessimisticLCP": 7194, "roughEstimateOfTTFB": 2351}, - {"url": "https://www.ebay.com/", "roughEstimateOfFCP": 2142, "optimisticFCP": 2142, "pessimisticFCP": 2142, "roughEstimateOfFMP": 2461, "optimisticFMP": 2461, "pessimisticFMP": 2461, "roughEstimateOfTTI": 16537, "optimisticTTI": 14670, "pessimisticTTI": 18404, "roughEstimateOfSI": 4328, "optimisticSI": 628, "pessimisticSI": 5691, "roughEstimateOfLCP": 2940, "optimisticLCP": 2461, "pessimisticLCP": 3419, "roughEstimateOfTTFB": 699}, - {"url": "https://www.ebs.in/IPS/", "roughEstimateOfFCP": 6387, "optimisticFCP": 4297, "pessimisticFCP": 8476, "roughEstimateOfFMP": 7012, "optimisticFMP": 4724, "pessimisticFMP": 9300, "roughEstimateOfTTI": 14724, "optimisticTTI": 7479, "pessimisticTTI": 21970, "roughEstimateOfSI": 13538, "optimisticSI": 4003, "pessimisticSI": 12590, "roughEstimateOfLCP": 10858, "optimisticLCP": 6114, "pessimisticLCP": 15602, "roughEstimateOfTTFB": 1223}, - {"url": "https://www.espn.com/", "roughEstimateOfFCP": 3910, "optimisticFCP": 3910, "pessimisticFCP": 3910, "roughEstimateOfFMP": 5320, "optimisticFMP": 3910, "pessimisticFMP": 6731, "roughEstimateOfTTI": 36291, "optimisticTTI": 33591, "pessimisticTTI": 38991, "roughEstimateOfSI": 13266, "optimisticSI": 2989, "pessimisticSI": 14356, "roughEstimateOfLCP": 7771, "optimisticLCP": 7371, "pessimisticLCP": 8171, "roughEstimateOfTTFB": 637}, - {"url": "https://www.flipkart.com", "roughEstimateOfFCP": 2367, "optimisticFCP": 2367, "pessimisticFCP": 2367, "roughEstimateOfFMP": 3939, "optimisticFMP": 2528, "pessimisticFMP": 5349, "roughEstimateOfTTI": 12626, "optimisticTTI": 10335, "pessimisticTTI": 14916, "roughEstimateOfSI": 7407, "optimisticSI": 3188, "pessimisticSI": 4913, "roughEstimateOfLCP": 11750, "optimisticLCP": 10673, "pessimisticLCP": 12827, "roughEstimateOfTTFB": 922}, - {"url": "https://www.foxnews.com/", "roughEstimateOfFCP": 3692, "optimisticFCP": 3692, "pessimisticFCP": 3692, "roughEstimateOfFMP": 3692, "optimisticFMP": 3692, "pessimisticFMP": 3692, "roughEstimateOfTTI": 23711, "optimisticTTI": 20278, "pessimisticTTI": 27144, "roughEstimateOfSI": 12429, "optimisticSI": 1187, "pessimisticSI": 16950, "roughEstimateOfLCP": 5682, "optimisticLCP": 5523, "pessimisticLCP": 5841, "roughEstimateOfTTFB": 634}, - {"url": "https://www.gmx.net/", "roughEstimateOfFCP": 2345, "optimisticFCP": 2345, "pessimisticFCP": 2345, "roughEstimateOfFMP": 2345, "optimisticFMP": 2345, "pessimisticFMP": 2345, "roughEstimateOfTTI": 10347, "optimisticTTI": 9948, "pessimisticTTI": 10746, "roughEstimateOfSI": 4452, "optimisticSI": 1327, "pessimisticSI": 4376, "roughEstimateOfLCP": 7124, "optimisticLCP": 7103, "pessimisticLCP": 7146, "roughEstimateOfTTFB": 611}, - {"url": "https://www.hatena.ne.jp/", "roughEstimateOfFCP": 1743, "optimisticFCP": 1743, "pessimisticFCP": 1743, "roughEstimateOfFMP": 2768, "optimisticFMP": 2265, "pessimisticFMP": 3272, "roughEstimateOfTTI": 15852, "optimisticTTI": 12460, "pessimisticTTI": 19244, "roughEstimateOfSI": 8974, "optimisticSI": 2323, "pessimisticSI": 9187, "roughEstimateOfLCP": 5595, "optimisticLCP": 4758, "pessimisticLCP": 6433, "roughEstimateOfTTFB": 877}, - {"url": "https://www.hulu.com/welcome", "roughEstimateOfFCP": 3938, "optimisticFCP": 3777, "pessimisticFCP": 4098, "roughEstimateOfFMP": 8045, "optimisticFMP": 7724, "pessimisticFMP": 8366, "roughEstimateOfTTI": 16748, "optimisticTTI": 15598, "pessimisticTTI": 17897, "roughEstimateOfSI": 5944, "optimisticSI": 920, "pessimisticSI": 7547, "roughEstimateOfLCP": 4098, "optimisticLCP": 4098, "pessimisticLCP": 4098, "roughEstimateOfTTFB": 612}, - {"url": "https://www.ifeng.com/", "roughEstimateOfFCP": 5148, "optimisticFCP": 5148, "pessimisticFCP": 5148, "roughEstimateOfFMP": 5148, "optimisticFMP": 5148, "pessimisticFMP": 5148, "roughEstimateOfTTI": 6096, "optimisticTTI": 5864, "pessimisticTTI": 6329, "roughEstimateOfSI": 7291, "optimisticSI": 2997, "pessimisticSI": 5148, "roughEstimateOfLCP": 5556, "optimisticLCP": 5556, "pessimisticLCP": 5556, "roughEstimateOfTTFB": 1653}, - {"url": "https://www.imageshack.us/login", "roughEstimateOfFCP": 2311, "optimisticFCP": 2310, "pessimisticFCP": 2313, "roughEstimateOfFMP": 2311, "optimisticFMP": 2310, "pessimisticFMP": 2313, "roughEstimateOfTTI": 7920, "optimisticTTI": 7670, "pessimisticTTI": 8169, "roughEstimateOfSI": 4787, "optimisticSI": 1491, "pessimisticSI": 4539, "roughEstimateOfLCP": 3652, "optimisticLCP": 3466, "pessimisticLCP": 3838, "roughEstimateOfTTFB": 603}, - {"url": "https://www.instagram.com/", "roughEstimateOfFCP": 1103, "optimisticFCP": 1103, "pessimisticFCP": 1103, "roughEstimateOfFMP": 3688, "optimisticFMP": 3688, "pessimisticFMP": 3688, "roughEstimateOfTTI": 5845, "optimisticTTI": 5216, "pessimisticTTI": 6475, "roughEstimateOfSI": 2900, "optimisticSI": 822, "pessimisticSI": 3077, "roughEstimateOfLCP": 5169, "optimisticLCP": 5089, "pessimisticLCP": 5248, "roughEstimateOfTTFB": 606}, - {"url": "https://www.irs.gov/", "roughEstimateOfFCP": 2022, "optimisticFCP": 2022, "pessimisticFCP": 2022, "roughEstimateOfFMP": 3229, "optimisticFMP": 2788, "pessimisticFMP": 3670, "roughEstimateOfTTI": 15149, "optimisticTTI": 13822, "pessimisticTTI": 16476, "roughEstimateOfSI": 4953, "optimisticSI": 818, "pessimisticSI": 6242, "roughEstimateOfLCP": 4217, "optimisticLCP": 3724, "pessimisticLCP": 4711, "roughEstimateOfTTFB": 684}, - {"url": "https://www.java.com/en/", "roughEstimateOfFCP": 961, "optimisticFCP": 961, "pessimisticFCP": 961, "roughEstimateOfFMP": 961, "optimisticFMP": 961, "pessimisticFMP": 961, "roughEstimateOfTTI": 3252, "optimisticTTI": 3102, "pessimisticTTI": 3402, "roughEstimateOfSI": 1207, "optimisticSI": 484, "pessimisticSI": 1199, "roughEstimateOfLCP": 3050, "optimisticLCP": 3050, "pessimisticLCP": 3050, "roughEstimateOfTTFB": 643}, - {"url": "https://www.linkedin.com/", "roughEstimateOfFCP": 1903, "optimisticFCP": 1903, "pessimisticFCP": 1903, "roughEstimateOfFMP": 1903, "optimisticFMP": 1903, "pessimisticFMP": 1903, "roughEstimateOfTTI": 11294, "optimisticTTI": 9700, "pessimisticTTI": 12888, "roughEstimateOfSI": 2073, "optimisticSI": 655, "pessimisticSI": 2164, "roughEstimateOfLCP": 2196, "optimisticLCP": 2155, "pessimisticLCP": 2237, "roughEstimateOfTTFB": 656}, - {"url": "https://www.metacafe.com/", "roughEstimateOfFCP": 1908, "optimisticFCP": 1908, "pessimisticFCP": 1908, "roughEstimateOfFMP": 1908, "optimisticFMP": 1908, "pessimisticFMP": 1908, "roughEstimateOfTTI": 6319, "optimisticTTI": 5841, "pessimisticTTI": 6796, "roughEstimateOfSI": 3459, "optimisticSI": 769, "pessimisticSI": 4050, "roughEstimateOfLCP": 4892, "optimisticLCP": 4892, "pessimisticLCP": 4892, "roughEstimateOfTTFB": 621}, - {"url": "https://www.mgid.com/ru", "roughEstimateOfFCP": 2063, "optimisticFCP": 2063, "pessimisticFCP": 2063, "roughEstimateOfFMP": 4456, "optimisticFMP": 4053, "pessimisticFMP": 4858, "roughEstimateOfTTI": 15378, "optimisticTTI": 14360, "pessimisticTTI": 16396, "roughEstimateOfSI": 6290, "optimisticSI": 983, "pessimisticSI": 7944, "roughEstimateOfLCP": 8322, "optimisticLCP": 7758, "pessimisticLCP": 8886, "roughEstimateOfTTFB": 648}, - {"url": "https://www.mlb.com/", "roughEstimateOfFCP": 3034, "optimisticFCP": 3034, "pessimisticFCP": 3034, "roughEstimateOfFMP": 3034, "optimisticFMP": 3034, "pessimisticFMP": 3034, "roughEstimateOfTTI": 38215, "optimisticTTI": 30243, "pessimisticTTI": 46187, "roughEstimateOfSI": 19128, "optimisticSI": 1316, "pessimisticSI": 26979, "roughEstimateOfLCP": 4649, "optimisticLCP": 4326, "pessimisticLCP": 4972, "roughEstimateOfTTFB": 604}, - {"url": "https://www.mozilla.org/en-US/", "roughEstimateOfFCP": 2359, "optimisticFCP": 2359, "pessimisticFCP": 2359, "roughEstimateOfFMP": 2359, "optimisticFMP": 2359, "pessimisticFMP": 2359, "roughEstimateOfTTI": 5647, "optimisticTTI": 5247, "pessimisticTTI": 6047, "roughEstimateOfSI": 3235, "optimisticSI": 801, "pessimisticSI": 3638, "roughEstimateOfLCP": 5703, "optimisticLCP": 5359, "pessimisticLCP": 6047, "roughEstimateOfTTFB": 607}, - {"url": "https://www.msn.com/", "roughEstimateOfFCP": 2174, "optimisticFCP": 2094, "pessimisticFCP": 2255, "roughEstimateOfFMP": 2521, "optimisticFMP": 2094, "pessimisticFMP": 2948, "roughEstimateOfTTI": 11300, "optimisticTTI": 10051, "pessimisticTTI": 12548, "roughEstimateOfSI": 5459, "optimisticSI": 1381, "pessimisticSI": 5809, "roughEstimateOfLCP": 3317, "optimisticLCP": 3204, "pessimisticLCP": 3430, "roughEstimateOfTTFB": 637}, - {"url": "https://www.netflix.com/", "roughEstimateOfFCP": 4341, "optimisticFCP": 4341, "pessimisticFCP": 4341, "roughEstimateOfFMP": 5453, "optimisticFMP": 5391, "pessimisticFMP": 5514, "roughEstimateOfTTI": 8070, "optimisticTTI": 5724, "pessimisticTTI": 10415, "roughEstimateOfSI": 4440, "optimisticSI": 871, "pessimisticSI": 5340, "roughEstimateOfLCP": 6896, "optimisticLCP": 6296, "pessimisticLCP": 7496, "roughEstimateOfTTFB": 609}, - {"url": "https://www.nih.gov/", "roughEstimateOfFCP": 4196, "optimisticFCP": 4150, "pessimisticFCP": 4242, "roughEstimateOfFMP": 4941, "optimisticFMP": 4397, "pessimisticFMP": 5485, "roughEstimateOfTTI": 6698, "optimisticTTI": 5680, "pessimisticTTI": 7715, "roughEstimateOfSI": 4650, "optimisticSI": 830, "pessimisticSI": 5751, "roughEstimateOfLCP": 6870, "optimisticLCP": 6207, "pessimisticLCP": 7533, "roughEstimateOfTTFB": 604}, - {"url": "https://www.ning.com/", "roughEstimateOfFCP": 2106, "optimisticFCP": 2106, "pessimisticFCP": 2106, "roughEstimateOfFMP": 3212, "optimisticFMP": 2497, "pessimisticFMP": 3927, "roughEstimateOfTTI": 17380, "optimisticTTI": 14542, "pessimisticTTI": 20218, "roughEstimateOfSI": 7405, "optimisticSI": 1385, "pessimisticSI": 8793, "roughEstimateOfLCP": 5294, "optimisticLCP": 4524, "pessimisticLCP": 6064, "roughEstimateOfTTFB": 601}, - {"url": "https://www.nokia.com/", "roughEstimateOfFCP": 2460, "optimisticFCP": 2460, "pessimisticFCP": 2460, "roughEstimateOfFMP": 2460, "optimisticFMP": 2460, "pessimisticFMP": 2460, "roughEstimateOfTTI": 12447, "optimisticTTI": 11923, "pessimisticTTI": 12971, "roughEstimateOfSI": 5446, "optimisticSI": 1367, "pessimisticSI": 5819, "roughEstimateOfLCP": 6452, "optimisticLCP": 6452, "pessimisticLCP": 6452, "roughEstimateOfTTFB": 614}, - {"url": "https://www.ocn.ne.jp/", "roughEstimateOfFCP": 3720, "optimisticFCP": 3720, "pessimisticFCP": 3720, "roughEstimateOfFMP": 3720, "optimisticFMP": 3720, "pessimisticFMP": 3720, "roughEstimateOfTTI": 10647, "optimisticTTI": 9684, "pessimisticTTI": 11610, "roughEstimateOfSI": 6092, "optimisticSI": 2266, "pessimisticSI": 4877, "roughEstimateOfLCP": 4726, "optimisticLCP": 4484, "pessimisticLCP": 4969, "roughEstimateOfTTFB": 1581}, - {"url": "https://www.onet.pl/", "roughEstimateOfFCP": 2078, "optimisticFCP": 2078, "pessimisticFCP": 2078, "roughEstimateOfFMP": 2078, "optimisticFMP": 2078, "pessimisticFMP": 2078, "roughEstimateOfTTI": 11869, "optimisticTTI": 11083, "pessimisticTTI": 12655, "roughEstimateOfSI": 5401, "optimisticSI": 1759, "pessimisticSI": 4906, "roughEstimateOfLCP": 3834, "optimisticLCP": 3834, "pessimisticLCP": 3834, "roughEstimateOfTTFB": 600}, - {"url": "https://www.orange.fr/portail", "roughEstimateOfFCP": 4085, "optimisticFCP": 3000, "pessimisticFCP": 5170, "roughEstimateOfFMP": 5055, "optimisticFMP": 3459, "pessimisticFMP": 6652, "roughEstimateOfTTI": 18257, "optimisticTTI": 16766, "pessimisticTTI": 19748, "roughEstimateOfSI": 10600, "optimisticSI": 3925, "pessimisticSI": 8238, "roughEstimateOfLCP": 6874, "optimisticLCP": 6260, "pessimisticLCP": 7489, "roughEstimateOfTTFB": 880}, - {"url": "https://www.partypoker.com/", "roughEstimateOfFCP": 4990, "optimisticFCP": 4990, "pessimisticFCP": 4990, "roughEstimateOfFMP": 4990, "optimisticFMP": 4990, "pessimisticFMP": 4990, "roughEstimateOfTTI": 7253, "optimisticTTI": 5396, "pessimisticTTI": 9111, "roughEstimateOfSI": 6766, "optimisticSI": 2695, "pessimisticSI": 4990, "roughEstimateOfLCP": 7009, "optimisticLCP": 5152, "pessimisticLCP": 8867, "roughEstimateOfTTFB": 1094}, - {"url": "https://www.rakuten.co.jp/", "roughEstimateOfFCP": 3165, "optimisticFCP": 3165, "pessimisticFCP": 3165, "roughEstimateOfFMP": 5641, "optimisticFMP": 3165, "pessimisticFMP": 8117, "roughEstimateOfTTI": 26527, "optimisticTTI": 19609, "pessimisticTTI": 33444, "roughEstimateOfSI": 12164, "optimisticSI": 4212, "pessimisticSI": 10026, "roughEstimateOfLCP": 8521, "optimisticLCP": 8121, "pessimisticLCP": 8921, "roughEstimateOfTTFB": 698}, - {"url": "https://www.reddit.com/", "roughEstimateOfFCP": 2375, "optimisticFCP": 2296, "pessimisticFCP": 2455, "roughEstimateOfFMP": 7729, "optimisticFMP": 5762, "pessimisticFMP": 9695, "roughEstimateOfTTI": 12360, "optimisticTTI": 11062, "pessimisticTTI": 13658, "roughEstimateOfSI": 8400, "optimisticSI": 3340, "pessimisticSI": 6113, "roughEstimateOfLCP": 10681, "optimisticLCP": 9048, "pessimisticLCP": 12313, "roughEstimateOfTTFB": 1017}, - {"url": "https://www.scribd.com/", "roughEstimateOfFCP": 2099, "optimisticFCP": 2099, "pessimisticFCP": 2099, "roughEstimateOfFMP": 2099, "optimisticFMP": 2099, "pessimisticFMP": 2099, "roughEstimateOfTTI": 10282, "optimisticTTI": 9541, "pessimisticTTI": 11024, "roughEstimateOfSI": 4232, "optimisticSI": 873, "pessimisticSI": 5016, "roughEstimateOfLCP": 8049, "optimisticLCP": 7302, "pessimisticLCP": 8797, "roughEstimateOfTTFB": 635}, - {"url": "https://www.shopping.com/", "roughEstimateOfFCP": 2882, "optimisticFCP": 2488, "pessimisticFCP": 3277, "roughEstimateOfFMP": 2882, "optimisticFMP": 2488, "pessimisticFMP": 3277, "roughEstimateOfTTI": 5569, "optimisticTTI": 5146, "pessimisticTTI": 5991, "roughEstimateOfSI": 3675, "optimisticSI": 1210, "pessimisticSI": 3433, "roughEstimateOfLCP": 4449, "optimisticLCP": 4342, "pessimisticLCP": 4557, "roughEstimateOfTTFB": 612}, - {"url": "https://www.skype.com/en/", "roughEstimateOfFCP": 2614, "optimisticFCP": 2614, "pessimisticFCP": 2614, "roughEstimateOfFMP": 2862, "optimisticFMP": 2614, "pessimisticFMP": 3109, "roughEstimateOfTTI": 6534, "optimisticTTI": 5792, "pessimisticTTI": 7275, "roughEstimateOfSI": 4026, "optimisticSI": 1120, "pessimisticSI": 4165, "roughEstimateOfLCP": 4962, "optimisticLCP": 4878, "pessimisticLCP": 5046, "roughEstimateOfTTFB": 716}, - {"url": "https://www.so-net.ne.jp/m/", "roughEstimateOfFCP": 4202, "optimisticFCP": 3225, "pessimisticFCP": 5179, "roughEstimateOfFMP": 4202, "optimisticFMP": 3225, "pessimisticFMP": 5179, "roughEstimateOfTTI": 9009, "optimisticTTI": 7027, "pessimisticTTI": 10991, "roughEstimateOfSI": 7822, "optimisticSI": 2439, "pessimisticSI": 7165, "roughEstimateOfLCP": 8061, "optimisticLCP": 6910, "pessimisticLCP": 9212, "roughEstimateOfTTFB": 612}, - {"url": "https://www.symantec.com/", "roughEstimateOfFCP": 3489, "optimisticFCP": 3303, "pessimisticFCP": 3675, "roughEstimateOfFMP": 3503, "optimisticFMP": 3303, "pessimisticFMP": 3703, "roughEstimateOfTTI": 11261, "optimisticTTI": 8694, "pessimisticTTI": 13829, "roughEstimateOfSI": 6927, "optimisticSI": 2165, "pessimisticSI": 6378, "roughEstimateOfLCP": 10068, "optimisticLCP": 8374, "pessimisticLCP": 11762, "roughEstimateOfTTFB": 666}, - {"url": "https://www.thestar.com.my/", "roughEstimateOfFCP": 3657, "optimisticFCP": 2259, "pessimisticFCP": 5056, "roughEstimateOfFMP": 3657, "optimisticFMP": 2259, "pessimisticFMP": 5056, "roughEstimateOfTTI": 23194, "optimisticTTI": 18899, "pessimisticTTI": 27489, "roughEstimateOfSI": 15121, "optimisticSI": 5315, "pessimisticSI": 12201, "roughEstimateOfLCP": 13838, "optimisticLCP": 12412, "pessimisticLCP": 15264, "roughEstimateOfTTFB": 979}, - {"url": "https://www.tianya.cn/m/", "roughEstimateOfFCP": 3505, "optimisticFCP": 3505, "pessimisticFCP": 3505, "roughEstimateOfFMP": 3577, "optimisticFMP": 3505, "pessimisticFMP": 3650, "roughEstimateOfTTI": 5341, "optimisticTTI": 5020, "pessimisticTTI": 5663, "roughEstimateOfSI": 14425, "optimisticSI": 8681, "pessimisticSI": 3880, "roughEstimateOfLCP": 7302, "optimisticLCP": 7050, "pessimisticLCP": 7555, "roughEstimateOfTTFB": 871}, - {"url": "https://www.torrentz.com/", "roughEstimateOfFCP": 817, "optimisticFCP": 817, "pessimisticFCP": 817, "roughEstimateOfFMP": 817, "optimisticFMP": 817, "pessimisticFMP": 817, "roughEstimateOfTTI": 817, "optimisticTTI": 817, "pessimisticTTI": 817, "roughEstimateOfSI": 863, "optimisticSI": 416, "pessimisticSI": 817, "roughEstimateOfLCP": 817, "optimisticLCP": 817, "pessimisticLCP": 817, "roughEstimateOfTTFB": 608}, - {"url": "https://www.tumblr.com/", "roughEstimateOfFCP": 2508, "optimisticFCP": 2508, "pessimisticFCP": 2508, "roughEstimateOfFMP": 2508, "optimisticFMP": 2508, "pessimisticFMP": 2508, "roughEstimateOfTTI": 9689, "optimisticTTI": 9611, "pessimisticTTI": 9767, "roughEstimateOfSI": 4128, "optimisticSI": 628, "pessimisticSI": 5382, "roughEstimateOfLCP": 8679, "optimisticLCP": 8679, "pessimisticLCP": 8679, "roughEstimateOfTTFB": 637}, - {"url": "https://www.twitpic.com/", "roughEstimateOfFCP": 835, "optimisticFCP": 835, "pessimisticFCP": 835, "roughEstimateOfFMP": 835, "optimisticFMP": 835, "pessimisticFMP": 835, "roughEstimateOfTTI": 835, "optimisticTTI": 835, "pessimisticTTI": 835, "roughEstimateOfSI": 835, "optimisticSI": 121, "pessimisticSI": 876, "roughEstimateOfLCP": 835, "optimisticLCP": 835, "pessimisticLCP": 835, "roughEstimateOfTTFB": 601}, - {"url": "https://www.typepad.com/", "roughEstimateOfFCP": 2610, "optimisticFCP": 2610, "pessimisticFCP": 2610, "roughEstimateOfFMP": 3295, "optimisticFMP": 3092, "pessimisticFMP": 3498, "roughEstimateOfTTI": 3617, "optimisticTTI": 3659, "pessimisticTTI": 3575, "roughEstimateOfSI": 3146, "optimisticSI": 1009, "pessimisticSI": 3051, "roughEstimateOfLCP": 6037, "optimisticLCP": 6118, "pessimisticLCP": 5957, "roughEstimateOfTTFB": 789}, - {"url": "https://www.verizonwireless.com/", "roughEstimateOfFCP": 2977, "optimisticFCP": 2977, "pessimisticFCP": 2977, "roughEstimateOfFMP": 4054, "optimisticFMP": 4054, "pessimisticFMP": 4054, "roughEstimateOfTTI": 22674, "optimisticTTI": 21238, "pessimisticTTI": 24110, "roughEstimateOfSI": 5968, "optimisticSI": 870, "pessimisticSI": 7692, "roughEstimateOfLCP": 7119, "optimisticLCP": 7119, "pessimisticLCP": 7119, "roughEstimateOfTTFB": 640}, - {"url": "https://www.vevo.com/", "roughEstimateOfFCP": 5291, "optimisticFCP": 5291, "pessimisticFCP": 5291, "roughEstimateOfFMP": 6391, "optimisticFMP": 5619, "pessimisticFMP": 7163, "roughEstimateOfTTI": 20206, "optimisticTTI": 18496, "pessimisticTTI": 21916, "roughEstimateOfSI": 13794, "optimisticSI": 6002, "pessimisticSI": 8679, "roughEstimateOfLCP": 8810, "optimisticLCP": 7814, "pessimisticLCP": 9807, "roughEstimateOfTTFB": 772}, - {"url": "https://www.wikipedia.org/", "roughEstimateOfFCP": 1458, "optimisticFCP": 1458, "pessimisticFCP": 1458, "roughEstimateOfFMP": 1472, "optimisticFMP": 1458, "pessimisticFMP": 1487, "roughEstimateOfTTI": 1731, "optimisticTTI": 1593, "pessimisticTTI": 1870, "roughEstimateOfSI": 1610, "optimisticSI": 579, "pessimisticSI": 1614, "roughEstimateOfLCP": 1472, "optimisticLCP": 1458, "pessimisticLCP": 1487, "roughEstimateOfTTFB": 603}, - {"url": "https://www8.hp.com/us/en/home.html", "roughEstimateOfFCP": 4720, "optimisticFCP": 3373, "pessimisticFCP": 6068, "roughEstimateOfFMP": 6679, "optimisticFMP": 4995, "pessimisticFMP": 8364, "roughEstimateOfTTI": 22072, "optimisticTTI": 18600, "pessimisticTTI": 25543, "roughEstimateOfSI": 13346, "optimisticSI": 3856, "pessimisticSI": 12611, "roughEstimateOfLCP": 10807, "optimisticLCP": 10807, "pessimisticLCP": 10807, "roughEstimateOfTTFB": 612} + {"url": "http://2011hana-animals.blogspot.com/", "roughEstimateOfFCP": 2626, "optimisticFCP": 2626, "pessimisticFCP": 2626, "roughEstimateOfFMP": 2626, "optimisticFMP": 2626, "pessimisticFMP": 2626, "roughEstimateOfTTI": 2626, "optimisticTTI": 2626, "pessimisticTTI": 2626, "roughEstimateOfSI": 5471, "optimisticSI": 2867, "pessimisticSI": 2626, "roughEstimateOfLCP": 3399, "optimisticLCP": 3399, "pessimisticLCP": 3399, "roughEstimateOfTTFB": 877, "roughEstimateOfLCPLoadStart": 2331, "roughEstimateOfLCPLoadEnd": 3381}, + {"url": "http://blog.darom.com.br/", "roughEstimateOfFCP": 4224, "optimisticFCP": 4224, "pessimisticFCP": 4224, "roughEstimateOfFMP": 4224, "optimisticFMP": 4224, "pessimisticFMP": 4224, "roughEstimateOfTTI": 4224, "optimisticTTI": 4224, "pessimisticTTI": 4224, "roughEstimateOfSI": 7079, "optimisticSI": 2984, "pessimisticSI": 4849, "roughEstimateOfLCP": 4924, "optimisticLCP": 4924, "pessimisticLCP": 4924, "roughEstimateOfTTFB": 1462, "roughEstimateOfLCPLoadStart": 3258, "roughEstimateOfLCPLoadEnd": 4728}, + {"url": "http://buckeyebroadband.speedtestcustom.com/", "roughEstimateOfFCP": 4533, "optimisticFCP": 4533, "pessimisticFCP": 4533, "roughEstimateOfFMP": 4665, "optimisticFMP": 4533, "pessimisticFMP": 4796, "roughEstimateOfTTI": 4796, "optimisticTTI": 4796, "pessimisticTTI": 4796, "roughEstimateOfSI": 6552, "optimisticSI": 2649, "pessimisticSI": 4760, "roughEstimateOfLCP": 4796, "optimisticLCP": 4796, "pessimisticLCP": 4796, "roughEstimateOfTTFB": 481, "roughEstimateOfLCPLoadStart": 4060, "roughEstimateOfLCPLoadEnd": 4306}, + {"url": "http://christinastrologynow.com/", "roughEstimateOfFCP": 2350, "optimisticFCP": 2350, "pessimisticFCP": 2350, "roughEstimateOfFMP": 2350, "optimisticFMP": 2350, "pessimisticFMP": 2350, "roughEstimateOfTTI": 3935, "optimisticTTI": 3159, "pessimisticTTI": 4712, "roughEstimateOfSI": 8842, "optimisticSI": 5123, "pessimisticSI": 2953, "roughEstimateOfLCP": 2642, "optimisticLCP": 2642, "pessimisticLCP": 2642, "roughEstimateOfTTFB": 4456}, + {"url": "http://cis5rs.com.br/", "roughEstimateOfFCP": 4618, "optimisticFCP": 4618, "pessimisticFCP": 4618, "roughEstimateOfFMP": 4618, "optimisticFMP": 4618, "pessimisticFMP": 4618, "roughEstimateOfTTI": 15490, "optimisticTTI": 8520, "pessimisticTTI": 22460, "roughEstimateOfSI": 9167, "optimisticSI": 3527, "pessimisticSI": 6890, "roughEstimateOfLCP": 12432, "optimisticLCP": 12057, "pessimisticLCP": 12807, "roughEstimateOfTTFB": 722, "roughEstimateOfLCPLoadStart": 10168, "roughEstimateOfLCPLoadEnd": 11835}, + {"url": "http://citymirrornews.com/", "roughEstimateOfFCP": 4336, "optimisticFCP": 4184, "pessimisticFCP": 4487, "roughEstimateOfFMP": 4336, "optimisticFMP": 4184, "pessimisticFMP": 4487, "roughEstimateOfTTI": 8116, "optimisticTTI": 7196, "pessimisticTTI": 9037, "roughEstimateOfSI": 7358, "optimisticSI": 1469, "pessimisticSI": 8542, "roughEstimateOfLCP": 5476, "optimisticLCP": 5476, "pessimisticLCP": 5476, "roughEstimateOfTTFB": 968, "roughEstimateOfLCPLoadStart": 4018, "roughEstimateOfLCPLoadEnd": 4414}, + {"url": "http://exponatial.blogspot.com/", "roughEstimateOfFCP": 2949, "optimisticFCP": 2949, "pessimisticFCP": 2949, "roughEstimateOfFMP": 4960, "optimisticFMP": 4883, "pessimisticFMP": 5037, "roughEstimateOfTTI": 6021, "optimisticTTI": 5465, "pessimisticTTI": 6577, "roughEstimateOfSI": 3968, "optimisticSI": 799, "pessimisticSI": 4769, "roughEstimateOfLCP": 4434, "optimisticLCP": 4434, "pessimisticLCP": 4434, "roughEstimateOfTTFB": 503, "roughEstimateOfLCPLoadStart": 1726, "roughEstimateOfLCPLoadEnd": 2009}, + {"url": "http://famaconsa.com/", "roughEstimateOfFCP": 1028, "optimisticFCP": 1028, "pessimisticFCP": 1028, "roughEstimateOfFMP": 1028, "optimisticFMP": 1028, "pessimisticFMP": 1028, "roughEstimateOfTTI": 3565, "optimisticTTI": 3340, "pessimisticTTI": 3790, "roughEstimateOfSI": 1469, "optimisticSI": 750, "pessimisticSI": 1028, "roughEstimateOfLCP": 4257, "optimisticLCP": 4107, "pessimisticLCP": 4407, "roughEstimateOfTTFB": 467, "roughEstimateOfLCPLoadStart": 1683, "roughEstimateOfLCPLoadEnd": 4182}, + {"url": "http://g-salam-arbitrajnikam-w53.fun/", "roughEstimateOfFCP": 786, "optimisticFCP": 786, "pessimisticFCP": 786, "roughEstimateOfFMP": 786, "optimisticFMP": 786, "pessimisticFMP": 786, "roughEstimateOfTTI": 786, "optimisticTTI": 786, "pessimisticTTI": 786, "roughEstimateOfSI": 1205, "optimisticSI": 674, "pessimisticSI": 786, "roughEstimateOfLCP": 786, "optimisticLCP": 786, "pessimisticLCP": 786, "roughEstimateOfTTFB": 672}, + {"url": "http://hakimemehr.ir/", "roughEstimateOfFCP": 2566, "optimisticFCP": 2566, "pessimisticFCP": 2566, "roughEstimateOfFMP": 2566, "optimisticFMP": 2566, "pessimisticFMP": 2566, "roughEstimateOfTTI": 3067, "optimisticTTI": 2566, "pessimisticTTI": 3569, "roughEstimateOfSI": 6185, "optimisticSI": 3405, "pessimisticSI": 2566, "roughEstimateOfLCP": 4168, "optimisticLCP": 4168, "pessimisticLCP": 4168, "roughEstimateOfTTFB": 719, "roughEstimateOfLCPLoadStart": 2637, "roughEstimateOfLCPLoadEnd": 4099}, + {"url": "http://kirsehir.tsf.org.tr/", "roughEstimateOfFCP": 2922, "optimisticFCP": 2040, "pessimisticFCP": 3804, "roughEstimateOfFMP": 2922, "optimisticFMP": 2040, "pessimisticFMP": 3804, "roughEstimateOfTTI": 2922, "optimisticTTI": 2040, "pessimisticTTI": 3804, "roughEstimateOfSI": 6130, "optimisticSI": 2791, "pessimisticSI": 3804, "roughEstimateOfLCP": 4895, "optimisticLCP": 3390, "pessimisticLCP": 6399, "roughEstimateOfTTFB": 588, "roughEstimateOfLCPLoadStart": 2250, "roughEstimateOfLCPLoadEnd": 4868}, + {"url": "http://kottayamcheriapally.com/", "roughEstimateOfFCP": 14827, "optimisticFCP": 14827, "pessimisticFCP": 14827, "roughEstimateOfFMP": 14827, "optimisticFMP": 14827, "pessimisticFMP": 14827, "roughEstimateOfTTI": 14827, "optimisticTTI": 14827, "pessimisticTTI": 14827, "roughEstimateOfSI": 14827, "optimisticSI": 3023, "pessimisticSI": 14827, "roughEstimateOfLCP": 25139, "optimisticLCP": 20073, "pessimisticLCP": 30205, "roughEstimateOfTTFB": 453, "roughEstimateOfLCPLoadStart": 16350, "roughEstimateOfLCPLoadEnd": 17256}, + {"url": "http://lisans.cozum.info.tr/", "roughEstimateOfFCP": 3108, "optimisticFCP": 3108, "pessimisticFCP": 3108, "roughEstimateOfFMP": 3113, "optimisticFMP": 3108, "pessimisticFMP": 3118, "roughEstimateOfTTI": 3214, "optimisticTTI": 3108, "pessimisticTTI": 3320, "roughEstimateOfSI": 3108, "optimisticSI": 701, "pessimisticSI": 3378, "roughEstimateOfLCP": 3223, "optimisticLCP": 3215, "pessimisticLCP": 3232, "roughEstimateOfTTFB": 459}, + {"url": "http://m.dongsung.org/", "roughEstimateOfFCP": 8218, "optimisticFCP": 8143, "pessimisticFCP": 8294, "roughEstimateOfFMP": 8218, "optimisticFMP": 8143, "pessimisticFMP": 8294, "roughEstimateOfTTI": 8218, "optimisticTTI": 8143, "pessimisticTTI": 8294, "roughEstimateOfSI": 8218, "optimisticSI": 1800, "pessimisticSI": 8796, "roughEstimateOfLCP": 9505, "optimisticLCP": 9202, "pessimisticLCP": 9807, "roughEstimateOfTTFB": 459, "roughEstimateOfLCPLoadStart": 5671, "roughEstimateOfLCPLoadEnd": 9263}, + {"url": "http://m.iciba.com", "roughEstimateOfFCP": 1340, "optimisticFCP": 1340, "pessimisticFCP": 1340, "roughEstimateOfFMP": 1340, "optimisticFMP": 1340, "pessimisticFMP": 1340, "roughEstimateOfTTI": 3546, "optimisticTTI": 3081, "pessimisticTTI": 4011, "roughEstimateOfSI": 6787, "optimisticSI": 3750, "pessimisticSI": 2750, "roughEstimateOfLCP": 1398, "optimisticLCP": 1340, "pessimisticLCP": 1455, "roughEstimateOfTTFB": 997, "roughEstimateOfLCPLoadStart": 997, "roughEstimateOfLCPLoadEnd": 1324}, + {"url": "http://mamacitatube.com/", "roughEstimateOfFCP": 2403, "optimisticFCP": 2403, "pessimisticFCP": 2403, "roughEstimateOfFMP": 2942, "optimisticFMP": 2942, "pessimisticFMP": 2942, "roughEstimateOfTTI": 5193, "optimisticTTI": 3939, "pessimisticTTI": 6447, "roughEstimateOfSI": 3463, "optimisticSI": 1536, "pessimisticSI": 2403, "roughEstimateOfLCP": 3621, "optimisticLCP": 3573, "pessimisticLCP": 3669, "roughEstimateOfTTFB": 451, "roughEstimateOfLCPLoadStart": 2365, "roughEstimateOfLCPLoadEnd": 3141}, + {"url": "http://metaplatform.biz/", "roughEstimateOfFCP": 6298, "optimisticFCP": 5334, "pessimisticFCP": 7262, "roughEstimateOfFMP": 6298, "optimisticFMP": 5334, "pessimisticFMP": 7262, "roughEstimateOfTTI": 9582, "optimisticTTI": 8861, "pessimisticTTI": 10304, "roughEstimateOfSI": 7264, "optimisticSI": 1421, "pessimisticSI": 8501, "roughEstimateOfLCP": 6298, "optimisticLCP": 5334, "pessimisticLCP": 7262, "roughEstimateOfTTFB": 695}, + {"url": "http://mokhtaralbukhary.blogspot.com/", "roughEstimateOfFCP": 1617, "optimisticFCP": 1542, "pessimisticFCP": 1692, "roughEstimateOfFMP": 1617, "optimisticFMP": 1542, "pessimisticFMP": 1692, "roughEstimateOfTTI": 1617, "optimisticTTI": 1542, "pessimisticTTI": 1692, "roughEstimateOfSI": 1617, "optimisticSI": 196, "pessimisticSI": 1692, "roughEstimateOfLCP": 2442, "optimisticLCP": 2442, "pessimisticLCP": 2442, "roughEstimateOfTTFB": 465}, + {"url": "http://msdsolution.in/", "roughEstimateOfFCP": 3798, "optimisticFCP": 3798, "pessimisticFCP": 3798, "roughEstimateOfFMP": 4534, "optimisticFMP": 4534, "pessimisticFMP": 4534, "roughEstimateOfTTI": 9714, "optimisticTTI": 5859, "pessimisticTTI": 13568, "roughEstimateOfSI": 10681, "optimisticSI": 3805, "pessimisticSI": 8621, "roughEstimateOfLCP": 13527, "optimisticLCP": 13158, "pessimisticLCP": 13895, "roughEstimateOfTTFB": 450, "roughEstimateOfLCPLoadStart": 8600, "roughEstimateOfLCPLoadEnd": 10727}, + {"url": "http://pagerankcafe.com/", "roughEstimateOfFCP": 2493, "optimisticFCP": 1933, "pessimisticFCP": 3053, "roughEstimateOfFMP": 2493, "optimisticFMP": 1933, "pessimisticFMP": 3053, "roughEstimateOfTTI": 5490, "optimisticTTI": 4284, "pessimisticTTI": 6696, "roughEstimateOfSI": 5966, "optimisticSI": 2565, "pessimisticSI": 4038, "roughEstimateOfLCP": 6173, "optimisticLCP": 5106, "pessimisticLCP": 7240, "roughEstimateOfTTFB": 1561}, + {"url": "http://pwa.shipin.ir/", "roughEstimateOfFCP": 1729, "optimisticFCP": 1543, "pessimisticFCP": 1915, "roughEstimateOfFMP": 1729, "optimisticFMP": 1543, "pessimisticFMP": 1915, "roughEstimateOfTTI": 1729, "optimisticTTI": 1543, "pessimisticTTI": 1915, "roughEstimateOfSI": 2832, "optimisticSI": 1313, "pessimisticSI": 1915, "roughEstimateOfLCP": 2276, "optimisticLCP": 2008, "pessimisticLCP": 2544, "roughEstimateOfTTFB": 714}, + {"url": "http://restauranteazul.menusqr.info/", "roughEstimateOfFCP": 3010, "optimisticFCP": 3010, "pessimisticFCP": 3011, "roughEstimateOfFMP": 3010, "optimisticFMP": 3010, "pessimisticFMP": 3011, "roughEstimateOfTTI": 3066, "optimisticTTI": 3010, "pessimisticTTI": 3123, "roughEstimateOfSI": 3345, "optimisticSI": 520, "pessimisticSI": 4410, "roughEstimateOfLCP": 3385, "optimisticLCP": 3160, "pessimisticLCP": 3611, "roughEstimateOfTTFB": 451, "roughEstimateOfLCPLoadStart": 1737, "roughEstimateOfLCPLoadEnd": 2720}, + {"url": "http://rezervacija.studijaom.lt/", "roughEstimateOfFCP": 3803, "optimisticFCP": 3803, "pessimisticFCP": 3803, "roughEstimateOfFMP": 3803, "optimisticFMP": 3803, "pessimisticFMP": 3803, "roughEstimateOfTTI": 3803, "optimisticTTI": 3803, "pessimisticTTI": 3803, "roughEstimateOfSI": 4913, "optimisticSI": 1922, "pessimisticSI": 3803, "roughEstimateOfLCP": 4853, "optimisticLCP": 4853, "pessimisticLCP": 4853, "roughEstimateOfTTFB": 1065, "roughEstimateOfLCPLoadStart": 3417, "roughEstimateOfLCPLoadEnd": 4776}, + {"url": "http://rubistar.4teachers.org/", "roughEstimateOfFCP": 6855, "optimisticFCP": 6468, "pessimisticFCP": 7242, "roughEstimateOfFMP": 6936, "optimisticFMP": 6468, "pessimisticFMP": 7405, "roughEstimateOfTTI": 7409, "optimisticTTI": 6468, "pessimisticTTI": 8350, "roughEstimateOfSI": 6855, "optimisticSI": 1053, "pessimisticSI": 7242, "roughEstimateOfLCP": 9491, "optimisticLCP": 9256, "pessimisticLCP": 9726, "roughEstimateOfTTFB": 452}, + {"url": "http://sedim.dyndns.org/", "roughEstimateOfFCP": 3048, "optimisticFCP": 2445, "pessimisticFCP": 3651, "roughEstimateOfFMP": 3048, "optimisticFMP": 2445, "pessimisticFMP": 3651, "roughEstimateOfTTI": 3902, "optimisticTTI": 3130, "pessimisticTTI": 4675, "roughEstimateOfSI": 3786, "optimisticSI": 1188, "pessimisticSI": 3651, "roughEstimateOfLCP": 3048, "optimisticLCP": 2445, "pessimisticLCP": 3651, "roughEstimateOfTTFB": 453}, + {"url": "http://sodemar.net/", "roughEstimateOfFCP": 4890, "optimisticFCP": 4832, "pessimisticFCP": 4947, "roughEstimateOfFMP": 4890, "optimisticFMP": 4832, "pessimisticFMP": 4947, "roughEstimateOfTTI": 4890, "optimisticTTI": 4832, "pessimisticTTI": 4947, "roughEstimateOfSI": 5908, "optimisticSI": 2005, "pessimisticSI": 5155, "roughEstimateOfLCP": 6987, "optimisticLCP": 6987, "pessimisticLCP": 6987, "roughEstimateOfTTFB": 805, "roughEstimateOfLCPLoadStart": 3221, "roughEstimateOfLCPLoadEnd": 6866}, + {"url": "http://souvenirchronicles.blogspot.com/", "roughEstimateOfFCP": 1636, "optimisticFCP": 1556, "pessimisticFCP": 1715, "roughEstimateOfFMP": 1636, "optimisticFMP": 1556, "pessimisticFMP": 1715, "roughEstimateOfTTI": 1636, "optimisticTTI": 1556, "pessimisticTTI": 1715, "roughEstimateOfSI": 1636, "optimisticSI": 183, "pessimisticSI": 1715, "roughEstimateOfLCP": 2190, "optimisticLCP": 2190, "pessimisticLCP": 2190, "roughEstimateOfTTFB": 464, "roughEstimateOfLCPLoadStart": 771, "roughEstimateOfLCPLoadEnd": 980}, + {"url": "http://takeno.iee.niit.ac.jp/", "roughEstimateOfFCP": 966, "optimisticFCP": 966, "pessimisticFCP": 966, "roughEstimateOfFMP": 978, "optimisticFMP": 966, "pessimisticFMP": 989, "roughEstimateOfTTI": 978, "optimisticTTI": 966, "pessimisticTTI": 989, "roughEstimateOfSI": 1087, "optimisticSI": 503, "pessimisticSI": 974, "roughEstimateOfLCP": 978, "optimisticLCP": 966, "pessimisticLCP": 989, "roughEstimateOfTTFB": 457}, + {"url": "http://talesgubes.com/", "roughEstimateOfFCP": 3259, "optimisticFCP": 3259, "pessimisticFCP": 3259, "roughEstimateOfFMP": 3259, "optimisticFMP": 3259, "pessimisticFMP": 3259, "roughEstimateOfTTI": 6358, "optimisticTTI": 6123, "pessimisticTTI": 6593, "roughEstimateOfSI": 3489, "optimisticSI": 720, "pessimisticSI": 4201, "roughEstimateOfLCP": 4778, "optimisticLCP": 4778, "pessimisticLCP": 4778, "roughEstimateOfTTFB": 452}, + {"url": "http://tarjomehrooz.com/", "roughEstimateOfFCP": 3913, "optimisticFCP": 3912, "pessimisticFCP": 3914, "roughEstimateOfFMP": 3913, "optimisticFMP": 3912, "pessimisticFMP": 3914, "roughEstimateOfTTI": 3913, "optimisticTTI": 3912, "pessimisticTTI": 3914, "roughEstimateOfSI": 4881, "optimisticSI": 1794, "pessimisticSI": 4029, "roughEstimateOfLCP": 4702, "optimisticLCP": 4702, "pessimisticLCP": 4702, "roughEstimateOfTTFB": 614, "roughEstimateOfLCPLoadStart": 3344, "roughEstimateOfLCPLoadEnd": 4195}, + {"url": "http://tohin.ac.jp/", "roughEstimateOfFCP": 9447, "optimisticFCP": 9447, "pessimisticFCP": 9447, "roughEstimateOfFMP": 9447, "optimisticFMP": 9447, "pessimisticFMP": 9447, "roughEstimateOfTTI": 9447, "optimisticTTI": 9447, "pessimisticTTI": 9447, "roughEstimateOfSI": 9447, "optimisticSI": 2045, "pessimisticSI": 9447, "roughEstimateOfLCP": 17847, "optimisticLCP": 16787, "pessimisticLCP": 18908, "roughEstimateOfTTFB": 459, "roughEstimateOfLCPLoadStart": 13911, "roughEstimateOfLCPLoadEnd": 17647}, + {"url": "http://www.71935.net/", "roughEstimateOfFCP": 1808, "optimisticFCP": 1804, "pessimisticFCP": 1813, "roughEstimateOfFMP": 1808, "optimisticFMP": 1804, "pessimisticFMP": 1813, "roughEstimateOfTTI": 1808, "optimisticTTI": 1804, "pessimisticTTI": 1813, "roughEstimateOfSI": 1808, "optimisticSI": 532, "pessimisticSI": 1813, "roughEstimateOfLCP": 2642, "optimisticLCP": 2254, "pessimisticLCP": 3030, "roughEstimateOfTTFB": 452}, + {"url": "http://www.ambrosiasuitesathens.com/", "roughEstimateOfFCP": 1637, "optimisticFCP": 1469, "pessimisticFCP": 1805, "roughEstimateOfFMP": 2039, "optimisticFMP": 1780, "pessimisticFMP": 2298, "roughEstimateOfTTI": 3954, "optimisticTTI": 3712, "pessimisticTTI": 4195, "roughEstimateOfSI": 1637, "optimisticSI": 243, "pessimisticSI": 2363, "roughEstimateOfLCP": 2643, "optimisticLCP": 2354, "pessimisticLCP": 2931, "roughEstimateOfTTFB": 463, "roughEstimateOfLCPLoadStart": 1396, "roughEstimateOfLCPLoadEnd": 2054}, + {"url": "http://www.athletics.kusu.kyoto-u.ac.jp/", "roughEstimateOfFCP": 5724, "optimisticFCP": 5722, "pessimisticFCP": 5727, "roughEstimateOfFMP": 5724, "optimisticFMP": 5722, "pessimisticFMP": 5727, "roughEstimateOfTTI": 6453, "optimisticTTI": 5722, "pessimisticTTI": 7184, "roughEstimateOfSI": 7890, "optimisticSI": 3058, "pessimisticSI": 5937, "roughEstimateOfLCP": 14935, "optimisticLCP": 14790, "pessimisticLCP": 15079, "roughEstimateOfTTFB": 458, "roughEstimateOfLCPLoadStart": 1416, "roughEstimateOfLCPLoadEnd": 14832}, + {"url": "http://www.beatlesvinyl.com/", "roughEstimateOfFCP": 644, "optimisticFCP": 644, "pessimisticFCP": 644, "roughEstimateOfFMP": 644, "optimisticFMP": 644, "pessimisticFMP": 644, "roughEstimateOfTTI": 644, "optimisticTTI": 644, "pessimisticTTI": 644, "roughEstimateOfSI": 644, "optimisticSI": 336, "pessimisticSI": 644, "roughEstimateOfLCP": 770, "optimisticLCP": 770, "pessimisticLCP": 770, "roughEstimateOfTTFB": 460, "roughEstimateOfLCPLoadStart": 460, "roughEstimateOfLCPLoadEnd": 729}, + {"url": "http://www.cmkosemen.com/", "roughEstimateOfFCP": 679, "optimisticFCP": 679, "pessimisticFCP": 679, "roughEstimateOfFMP": 679, "optimisticFMP": 679, "pessimisticFMP": 679, "roughEstimateOfTTI": 1172, "optimisticTTI": 1149, "pessimisticTTI": 1196, "roughEstimateOfSI": 966, "optimisticSI": 553, "pessimisticSI": 679, "roughEstimateOfLCP": 4760, "optimisticLCP": 3664, "pessimisticLCP": 5856, "roughEstimateOfTTFB": 482, "roughEstimateOfLCPLoadStart": 1128, "roughEstimateOfLCPLoadEnd": 4212}, + {"url": "http://www.dariuszowczarek.com/", "roughEstimateOfFCP": 4902, "optimisticFCP": 4827, "pessimisticFCP": 4977, "roughEstimateOfFMP": 4929, "optimisticFMP": 4827, "pessimisticFMP": 5032, "roughEstimateOfTTI": 5850, "optimisticTTI": 4868, "pessimisticTTI": 6832, "roughEstimateOfSI": 8316, "optimisticSI": 3117, "pessimisticSI": 6464, "roughEstimateOfLCP": 15463, "optimisticLCP": 10663, "pessimisticLCP": 20263, "roughEstimateOfTTFB": 454, "roughEstimateOfLCPLoadStart": 6061, "roughEstimateOfLCPLoadEnd": 10639}, + {"url": "http://www.dive-exuma.com/", "roughEstimateOfFCP": 3766, "optimisticFCP": 2474, "pessimisticFCP": 5058, "roughEstimateOfFMP": 3766, "optimisticFMP": 2474, "pessimisticFMP": 5058, "roughEstimateOfTTI": 8211, "optimisticTTI": 4703, "pessimisticTTI": 11719, "roughEstimateOfSI": 12899, "optimisticSI": 5369, "pessimisticSI": 8665, "roughEstimateOfLCP": 5403, "optimisticLCP": 3949, "pessimisticLCP": 6858, "roughEstimateOfTTFB": 4352, "roughEstimateOfLCPLoadStart": 5128, "roughEstimateOfLCPLoadEnd": 5372}, + {"url": "http://www.eccellenzacalcio.it/", "roughEstimateOfFCP": 1308, "optimisticFCP": 1230, "pessimisticFCP": 1386, "roughEstimateOfFMP": 1308, "optimisticFMP": 1230, "pessimisticFMP": 1386, "roughEstimateOfTTI": 1308, "optimisticTTI": 1230, "pessimisticTTI": 1386, "roughEstimateOfSI": 4021, "optimisticSI": 2363, "pessimisticSI": 1480, "roughEstimateOfLCP": 5593, "optimisticLCP": 4810, "pessimisticLCP": 6375, "roughEstimateOfTTFB": 453, "roughEstimateOfLCPLoadStart": 3171, "roughEstimateOfLCPLoadEnd": 5503}, + {"url": "http://www.espis.de/", "roughEstimateOfFCP": 1002, "optimisticFCP": 1002, "pessimisticFCP": 1002, "roughEstimateOfFMP": 1002, "optimisticFMP": 1002, "pessimisticFMP": 1002, "roughEstimateOfTTI": 1086, "optimisticTTI": 1032, "pessimisticTTI": 1139, "roughEstimateOfSI": 2711, "optimisticSI": 1605, "pessimisticSI": 1098, "roughEstimateOfLCP": 1002, "optimisticLCP": 1002, "pessimisticLCP": 1002, "roughEstimateOfTTFB": 459}, + {"url": "http://www.event-ak.com/", "roughEstimateOfFCP": 1054, "optimisticFCP": 1054, "pessimisticFCP": 1054, "roughEstimateOfFMP": 1054, "optimisticFMP": 1054, "pessimisticFMP": 1054, "roughEstimateOfTTI": 1054, "optimisticTTI": 1054, "pessimisticTTI": 1054, "roughEstimateOfSI": 1487, "optimisticSI": 751, "pessimisticSI": 1054, "roughEstimateOfLCP": 1054, "optimisticLCP": 1054, "pessimisticLCP": 1054, "roughEstimateOfTTFB": 452}, + {"url": "http://www.helioziskind.com.br/", "roughEstimateOfFCP": 2951, "optimisticFCP": 2951, "pessimisticFCP": 2951, "roughEstimateOfFMP": 2951, "optimisticFMP": 2951, "pessimisticFMP": 2951, "roughEstimateOfTTI": 8303, "optimisticTTI": 5255, "pessimisticTTI": 11351, "roughEstimateOfSI": 8357, "optimisticSI": 4343, "pessimisticSI": 3888, "roughEstimateOfLCP": 5947, "optimisticLCP": 5616, "pessimisticLCP": 6278, "roughEstimateOfTTFB": 582, "roughEstimateOfLCPLoadStart": 2378, "roughEstimateOfLCPLoadEnd": 5924}, + {"url": "http://www.homoeopathieinformation.at/", "roughEstimateOfFCP": 1227, "optimisticFCP": 1227, "pessimisticFCP": 1227, "roughEstimateOfFMP": 1227, "optimisticFMP": 1227, "pessimisticFMP": 1227, "roughEstimateOfTTI": 3933, "optimisticTTI": 3698, "pessimisticTTI": 4168, "roughEstimateOfSI": 2527, "optimisticSI": 707, "pessimisticSI": 2748, "roughEstimateOfLCP": 1875, "optimisticLCP": 1875, "pessimisticLCP": 1875, "roughEstimateOfTTFB": 458}, + {"url": "http://www.lucchetta-abbigliamento.com/", "roughEstimateOfFCP": 4837, "optimisticFCP": 2749, "pessimisticFCP": 6926, "roughEstimateOfFMP": 5004, "optimisticFMP": 2749, "pessimisticFMP": 7259, "roughEstimateOfTTI": 5004, "optimisticTTI": 2749, "pessimisticTTI": 7259, "roughEstimateOfSI": 10014, "optimisticSI": 3093, "pessimisticSI": 9130, "roughEstimateOfLCP": 6925, "optimisticLCP": 3309, "pessimisticLCP": 10542, "roughEstimateOfTTFB": 700}, + {"url": "http://www.nankingchinesecuisine.com/", "roughEstimateOfFCP": 2619, "optimisticFCP": 2619, "pessimisticFCP": 2619, "roughEstimateOfFMP": 2619, "optimisticFMP": 2619, "pessimisticFMP": 2619, "roughEstimateOfTTI": 2619, "optimisticTTI": 2619, "pessimisticTTI": 2619, "roughEstimateOfSI": 4487, "optimisticSI": 2167, "pessimisticSI": 2619, "roughEstimateOfLCP": 9734, "optimisticLCP": 9622, "pessimisticLCP": 9847, "roughEstimateOfTTFB": 461, "roughEstimateOfLCPLoadStart": 700, "roughEstimateOfLCPLoadEnd": 906}, + {"url": "http://www.revue-silene.com/", "roughEstimateOfFCP": 1407, "optimisticFCP": 1407, "pessimisticFCP": 1407, "roughEstimateOfFMP": 1407, "optimisticFMP": 1407, "pessimisticFMP": 1407, "roughEstimateOfTTI": 1407, "optimisticTTI": 1407, "pessimisticTTI": 1407, "roughEstimateOfSI": 2679, "optimisticSI": 1439, "pessimisticSI": 1407, "roughEstimateOfLCP": 4488, "optimisticLCP": 4304, "pessimisticLCP": 4672, "roughEstimateOfTTFB": 881, "roughEstimateOfLCPLoadStart": 2074, "roughEstimateOfLCPLoadEnd": 4405}, + {"url": "http://www.slist.kr/", "roughEstimateOfFCP": 5034, "optimisticFCP": 5034, "pessimisticFCP": 5034, "roughEstimateOfFMP": 5034, "optimisticFMP": 5034, "pessimisticFMP": 5034, "roughEstimateOfTTI": 15650, "optimisticTTI": 11410, "pessimisticTTI": 19891, "roughEstimateOfSI": 7758, "optimisticSI": 2304, "pessimisticSI": 7357, "roughEstimateOfLCP": 15285, "optimisticLCP": 13699, "pessimisticLCP": 16870, "roughEstimateOfTTFB": 458, "roughEstimateOfLCPLoadStart": 10212, "roughEstimateOfLCPLoadEnd": 15100}, + {"url": "http://www.superlinda.com/", "roughEstimateOfFCP": 1627, "optimisticFCP": 1552, "pessimisticFCP": 1703, "roughEstimateOfFMP": 1627, "optimisticFMP": 1552, "pessimisticFMP": 1703, "roughEstimateOfTTI": 1627, "optimisticTTI": 1552, "pessimisticTTI": 1703, "roughEstimateOfSI": 1627, "optimisticSI": 322, "pessimisticSI": 1703, "roughEstimateOfLCP": 2378, "optimisticLCP": 2303, "pessimisticLCP": 2453, "roughEstimateOfTTFB": 468, "roughEstimateOfLCPLoadStart": 1162, "roughEstimateOfLCPLoadEnd": 1546}, + {"url": "http://www.turkoglugundem.com/", "roughEstimateOfFCP": 1719, "optimisticFCP": 1719, "pessimisticFCP": 1719, "roughEstimateOfFMP": 1719, "optimisticFMP": 1719, "pessimisticFMP": 1719, "roughEstimateOfTTI": 5152, "optimisticTTI": 3198, "pessimisticTTI": 7107, "roughEstimateOfSI": 5755, "optimisticSI": 2925, "pessimisticSI": 2938, "roughEstimateOfLCP": 6330, "optimisticLCP": 4197, "pessimisticLCP": 8463, "roughEstimateOfTTFB": 711, "roughEstimateOfLCPLoadStart": 4537, "roughEstimateOfLCPLoadEnd": 6241}, + {"url": "http://www.us1autoparts.com/", "roughEstimateOfFCP": 1297, "optimisticFCP": 1297, "pessimisticFCP": 1297, "roughEstimateOfFMP": 1297, "optimisticFMP": 1297, "pessimisticFMP": 1297, "roughEstimateOfTTI": 1297, "optimisticTTI": 1297, "pessimisticTTI": 1297, "roughEstimateOfSI": 1297, "optimisticSI": 391, "pessimisticSI": 1297, "roughEstimateOfLCP": 4859, "optimisticLCP": 4480, "pessimisticLCP": 5238, "roughEstimateOfTTFB": 517, "roughEstimateOfLCPLoadStart": 1127, "roughEstimateOfLCPLoadEnd": 4649}, + {"url": "http://www.varillerosacabollos.com/", "roughEstimateOfFCP": 3908, "optimisticFCP": 3295, "pessimisticFCP": 4521, "roughEstimateOfFMP": 8819, "optimisticFMP": 8440, "pessimisticFMP": 9197, "roughEstimateOfTTI": 8819, "optimisticTTI": 8440, "pessimisticTTI": 9197, "roughEstimateOfSI": 3908, "optimisticSI": 583, "pessimisticSI": 4556, "roughEstimateOfLCP": 6100, "optimisticLCP": 4724, "pessimisticLCP": 7475, "roughEstimateOfTTFB": 451, "roughEstimateOfLCPLoadStart": 3396, "roughEstimateOfLCPLoadEnd": 4007}, + {"url": "http://www.yayasanponpes-abumanshur.com/", "roughEstimateOfFCP": 2262, "optimisticFCP": 2262, "pessimisticFCP": 2262, "roughEstimateOfFMP": 3003, "optimisticFMP": 3003, "pessimisticFMP": 3003, "roughEstimateOfTTI": 17498, "optimisticTTI": 8703, "pessimisticTTI": 26293, "roughEstimateOfSI": 8175, "optimisticSI": 1266, "pessimisticSI": 10234, "roughEstimateOfLCP": 12537, "optimisticLCP": 12612, "pessimisticLCP": 12462, "roughEstimateOfTTFB": 493, "roughEstimateOfLCPLoadStart": 8499, "roughEstimateOfLCPLoadEnd": 10428}, + {"url": "http://xn--19-glc1ck.xn--p1ai/", "roughEstimateOfFCP": 2949, "optimisticFCP": 2328, "pessimisticFCP": 3570, "roughEstimateOfFMP": 6918, "optimisticFMP": 5788, "pessimisticFMP": 8048, "roughEstimateOfTTI": 6979, "optimisticTTI": 5910, "pessimisticTTI": 8048, "roughEstimateOfSI": 5086, "optimisticSI": 2154, "pessimisticSI": 3570, "roughEstimateOfLCP": 18864, "optimisticLCP": 12567, "pessimisticLCP": 25161, "roughEstimateOfTTFB": 450, "roughEstimateOfLCPLoadStart": 7254, "roughEstimateOfLCPLoadEnd": 18515}, + {"url": "https://19032.mitemin.net/", "roughEstimateOfFCP": 2629, "optimisticFCP": 2629, "pessimisticFCP": 2629, "roughEstimateOfFMP": 2629, "optimisticFMP": 2629, "pessimisticFMP": 2629, "roughEstimateOfTTI": 5630, "optimisticTTI": 5328, "pessimisticTTI": 5932, "roughEstimateOfSI": 4929, "optimisticSI": 1966, "pessimisticSI": 3733, "roughEstimateOfLCP": 2779, "optimisticLCP": 2779, "pessimisticLCP": 2779, "roughEstimateOfTTFB": 1374}, + {"url": "https://78novel.com/", "roughEstimateOfFCP": 2641, "optimisticFCP": 1687, "pessimisticFCP": 3596, "roughEstimateOfFMP": 2910, "optimisticFMP": 1687, "pessimisticFMP": 4132, "roughEstimateOfTTI": 12042, "optimisticTTI": 9152, "pessimisticTTI": 14933, "roughEstimateOfSI": 10801, "optimisticSI": 4657, "pessimisticSI": 6972, "roughEstimateOfLCP": 20958, "optimisticLCP": 20882, "pessimisticLCP": 21034, "roughEstimateOfTTFB": 1087, "roughEstimateOfLCPLoadStart": 17304, "roughEstimateOfLCPLoadEnd": 17848}, + {"url": "https://7ball.plus/", "roughEstimateOfFCP": 4622, "optimisticFCP": 4622, "pessimisticFCP": 4622, "roughEstimateOfFMP": 4772, "optimisticFMP": 4622, "pessimisticFMP": 4922, "roughEstimateOfTTI": 7727, "optimisticTTI": 7037, "pessimisticTTI": 8417, "roughEstimateOfSI": 9727, "optimisticSI": 3520, "pessimisticSI": 7767, "roughEstimateOfLCP": 6432, "optimisticLCP": 6317, "pessimisticLCP": 6548, "roughEstimateOfTTFB": 2422}, + {"url": "https://account.netflixstudios.com/", "roughEstimateOfFCP": 3831, "optimisticFCP": 3831, "pessimisticFCP": 3831, "roughEstimateOfFMP": 3831, "optimisticFMP": 3831, "pessimisticFMP": 3831, "roughEstimateOfTTI": 3831, "optimisticTTI": 3831, "pessimisticTTI": 3831, "roughEstimateOfSI": 8389, "optimisticSI": 4389, "pessimisticSI": 3837, "roughEstimateOfLCP": 3906, "optimisticLCP": 3831, "pessimisticLCP": 3981, "roughEstimateOfTTFB": 607}, + {"url": "https://acousticgeometry.com/", "roughEstimateOfFCP": 5810, "optimisticFCP": 5810, "pessimisticFCP": 5810, "roughEstimateOfFMP": 5810, "optimisticFMP": 5810, "pessimisticFMP": 5810, "roughEstimateOfTTI": 17780, "optimisticTTI": 14689, "pessimisticTTI": 20870, "roughEstimateOfSI": 13280, "optimisticSI": 3842, "pessimisticSI": 12541, "roughEstimateOfLCP": 18244, "optimisticLCP": 15699, "pessimisticLCP": 20788, "roughEstimateOfTTFB": 633, "roughEstimateOfLCPLoadStart": 2589, "roughEstimateOfLCPLoadEnd": 2977}, + {"url": "https://adhduk.co.uk/", "roughEstimateOfFCP": 3519, "optimisticFCP": 3519, "pessimisticFCP": 3519, "roughEstimateOfFMP": 3519, "optimisticFMP": 3519, "pessimisticFMP": 3519, "roughEstimateOfTTI": 18831, "optimisticTTI": 17438, "pessimisticTTI": 20223, "roughEstimateOfSI": 9215, "optimisticSI": 1143, "pessimisticSI": 12099, "roughEstimateOfLCP": 4962, "optimisticLCP": 4962, "pessimisticLCP": 4962, "roughEstimateOfTTFB": 615}, + {"url": "https://alumno.examentrafico.com/", "roughEstimateOfFCP": 5477, "optimisticFCP": 5477, "pessimisticFCP": 5477, "roughEstimateOfFMP": 5477, "optimisticFMP": 5477, "pessimisticFMP": 5477, "roughEstimateOfTTI": 10229, "optimisticTTI": 10229, "pessimisticTTI": 10229, "roughEstimateOfSI": 7373, "optimisticSI": 2082, "pessimisticSI": 7243, "roughEstimateOfLCP": 10932, "optimisticLCP": 10932, "pessimisticLCP": 10932, "roughEstimateOfTTFB": 609}, + {"url": "https://anapa-lazurnyy.ru/", "roughEstimateOfFCP": 2112, "optimisticFCP": 2112, "pessimisticFCP": 2112, "roughEstimateOfFMP": 2112, "optimisticFMP": 2112, "pessimisticFMP": 2112, "roughEstimateOfTTI": 26582, "optimisticTTI": 22408, "pessimisticTTI": 30757, "roughEstimateOfSI": 11546, "optimisticSI": 1631, "pessimisticSI": 14635, "roughEstimateOfLCP": 3038, "optimisticLCP": 3038, "pessimisticLCP": 3038, "roughEstimateOfTTFB": 761, "roughEstimateOfLCPLoadStart": 1919, "roughEstimateOfLCPLoadEnd": 2871}, + {"url": "https://ancientolympicsmuseum.com/", "roughEstimateOfFCP": 1661, "optimisticFCP": 1661, "pessimisticFCP": 1661, "roughEstimateOfFMP": 1661, "optimisticFMP": 1661, "pessimisticFMP": 1661, "roughEstimateOfTTI": 6701, "optimisticTTI": 5160, "pessimisticTTI": 8242, "roughEstimateOfSI": 4495, "optimisticSI": 525, "pessimisticSI": 6170, "roughEstimateOfLCP": 3510, "optimisticLCP": 3510, "pessimisticLCP": 3510, "roughEstimateOfTTFB": 614}, + {"url": "https://anhnguisa.edu.vn/", "roughEstimateOfFCP": 2196, "optimisticFCP": 2196, "pessimisticFCP": 2196, "roughEstimateOfFMP": 2196, "optimisticFMP": 2196, "pessimisticFMP": 2196, "roughEstimateOfTTI": 10382, "optimisticTTI": 8357, "pessimisticTTI": 12407, "roughEstimateOfSI": 7403, "optimisticSI": 2466, "pessimisticSI": 6463, "roughEstimateOfLCP": 6246, "optimisticLCP": 6096, "pessimisticLCP": 6396, "roughEstimateOfTTFB": 1175, "roughEstimateOfLCPLoadStart": 3985, "roughEstimateOfLCPLoadEnd": 6204}, + {"url": "https://ap3.shu.edu.tw/", "roughEstimateOfFCP": 781, "optimisticFCP": 781, "pessimisticFCP": 781, "roughEstimateOfFMP": 781, "optimisticFMP": 781, "pessimisticFMP": 781, "roughEstimateOfTTI": 781, "optimisticTTI": 781, "pessimisticTTI": 781, "roughEstimateOfSI": 1463, "optimisticSI": 861, "pessimisticSI": 781, "roughEstimateOfLCP": 1379, "optimisticLCP": 1379, "pessimisticLCP": 1379, "roughEstimateOfTTFB": 615, "roughEstimateOfLCPLoadStart": 615, "roughEstimateOfLCPLoadEnd": 1360}, + {"url": "https://app.cloutly.com/", "roughEstimateOfFCP": 1811, "optimisticFCP": 1732, "pessimisticFCP": 1890, "roughEstimateOfFMP": 5300, "optimisticFMP": 1732, "pessimisticFMP": 8867, "roughEstimateOfTTI": 16794, "optimisticTTI": 16468, "pessimisticTTI": 17120, "roughEstimateOfSI": 8484, "optimisticSI": 795, "pessimisticSI": 11725, "roughEstimateOfLCP": 14326, "optimisticLCP": 14198, "pessimisticLCP": 14454, "roughEstimateOfTTFB": 635}, + {"url": "https://app.radprimer.com/", "roughEstimateOfFCP": 1382, "optimisticFCP": 1382, "pessimisticFCP": 1382, "roughEstimateOfFMP": 1382, "optimisticFMP": 1382, "pessimisticFMP": 1382, "roughEstimateOfTTI": 3129, "optimisticTTI": 2939, "pessimisticTTI": 3318, "roughEstimateOfSI": 1860, "optimisticSI": 866, "pessimisticSI": 1382, "roughEstimateOfLCP": 1390, "optimisticLCP": 1390, "pessimisticLCP": 1390, "roughEstimateOfTTFB": 621}, + {"url": "https://arby-youm.com/", "roughEstimateOfFCP": 2810, "optimisticFCP": 2810, "pessimisticFCP": 2810, "roughEstimateOfFMP": 2810, "optimisticFMP": 2810, "pessimisticFMP": 2810, "roughEstimateOfTTI": 2810, "optimisticTTI": 2810, "pessimisticTTI": 2810, "roughEstimateOfSI": 2973, "optimisticSI": 998, "pessimisticSI": 2810, "roughEstimateOfLCP": 2810, "optimisticLCP": 2810, "pessimisticLCP": 2810, "roughEstimateOfTTFB": 854}, + {"url": "https://archerechner.graltek.net/", "roughEstimateOfFCP": 1004, "optimisticFCP": 1004, "pessimisticFCP": 1004, "roughEstimateOfFMP": 1589, "optimisticFMP": 1004, "pessimisticFMP": 2173, "roughEstimateOfTTI": 2248, "optimisticTTI": 2173, "pessimisticTTI": 2323, "roughEstimateOfSI": 2158, "optimisticSI": 872, "pessimisticSI": 1828, "roughEstimateOfLCP": 2323, "optimisticLCP": 2323, "pessimisticLCP": 2323, "roughEstimateOfTTFB": 704}, + {"url": "https://arqrio.org.br/", "roughEstimateOfFCP": 3831, "optimisticFCP": 3831, "pessimisticFCP": 3831, "roughEstimateOfFMP": 3831, "optimisticFMP": 3831, "pessimisticFMP": 3831, "roughEstimateOfTTI": 6312, "optimisticTTI": 5649, "pessimisticTTI": 6976, "roughEstimateOfSI": 12312, "optimisticSI": 6021, "pessimisticSI": 6357, "roughEstimateOfLCP": 9667, "optimisticLCP": 8049, "pessimisticLCP": 11286, "roughEstimateOfTTFB": 643, "roughEstimateOfLCPLoadStart": 8413, "roughEstimateOfLCPLoadEnd": 9589}, + {"url": "https://asdb.az.gov/", "roughEstimateOfFCP": 3815, "optimisticFCP": 3815, "pessimisticFCP": 3815, "roughEstimateOfFMP": 3815, "optimisticFMP": 3815, "pessimisticFMP": 3815, "roughEstimateOfTTI": 14087, "optimisticTTI": 12053, "pessimisticTTI": 16120, "roughEstimateOfSI": 9965, "optimisticSI": 2269, "pessimisticSI": 10828, "roughEstimateOfLCP": 17043, "optimisticLCP": 15005, "pessimisticLCP": 19081, "roughEstimateOfTTFB": 1052, "roughEstimateOfLCPLoadStart": 14017, "roughEstimateOfLCPLoadEnd": 16293}, + {"url": "https://asosyalsozluk.com/", "roughEstimateOfFCP": 2615, "optimisticFCP": 2615, "pessimisticFCP": 2615, "roughEstimateOfFMP": 2615, "optimisticFMP": 2615, "pessimisticFMP": 2615, "roughEstimateOfTTI": 4884, "optimisticTTI": 4191, "pessimisticTTI": 5578, "roughEstimateOfSI": 3856, "optimisticSI": 1214, "pessimisticSI": 3703, "roughEstimateOfLCP": 3357, "optimisticLCP": 3357, "pessimisticLCP": 3357, "roughEstimateOfTTFB": 918}, + {"url": "https://asufc.sanita.fvg.it/", "roughEstimateOfFCP": 6858, "optimisticFCP": 5535, "pessimisticFCP": 8181, "roughEstimateOfFMP": 6858, "optimisticFMP": 5535, "pessimisticFMP": 8181, "roughEstimateOfTTI": 10323, "optimisticTTI": 6375, "pessimisticTTI": 14272, "roughEstimateOfSI": 13274, "optimisticSI": 4705, "pessimisticSI": 10672, "roughEstimateOfLCP": 11947, "optimisticLCP": 7826, "pessimisticLCP": 16069, "roughEstimateOfTTFB": 988, "roughEstimateOfLCPLoadStart": 10780, "roughEstimateOfLCPLoadEnd": 11891} ] } From 63a92b90fe028ec094e8fa019975109f9122c585 Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Mon, 2 Oct 2023 09:12:55 -0700 Subject: [PATCH 14/15] wip --- core/scripts/lantern/collect/collect.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index 92909c9eaca9..69e4a2228857 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -1,3 +1,5 @@ +// TODO why https://atendimento-eletronico.bancovw.com.br/logon/ get stuck + /** * @license * Copyright 2019 Google LLC @@ -131,7 +133,6 @@ function assertLhr(lhr) { if (!lhr) throw new Error('missing lhr'); if (lhr.runtimeError) throw new Error(`runtime error: ${lhr.runtimeError}`); const metrics = common.getMetrics(lhr); - console.log(metrics); if (metrics && metrics.cumulativeLayoutShift !== undefined && metrics.firstContentfulPaint !== undefined && From ca56b425728d01c8563072b2a7ea3f2104b8903a Mon Sep 17 00:00:00 2001 From: Connor Clark Date: Tue, 3 Oct 2023 11:10:16 -0700 Subject: [PATCH 15/15] wip browserstack --- core/scripts/lantern/collect/collect.js | 45 ++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/core/scripts/lantern/collect/collect.js b/core/scripts/lantern/collect/collect.js index 69e4a2228857..8ca77d1a22f0 100644 --- a/core/scripts/lantern/collect/collect.js +++ b/core/scripts/lantern/collect/collect.js @@ -19,6 +19,11 @@ import * as common from './common.js'; import {LH_ROOT} from '../../../../shared/root.js'; import {makeGolden} from './golden.js'; +import * as playwright from 'playwright'; + +import lighthouse from '../../../index.js'; +import puppeteer from 'puppeteer'; + const execFileAsync = promisify(execFile); const TEST_URLS = process.env.TEST_URLS ? process.env.TEST_URLS.split(' ') : defaultTestUrls; @@ -261,8 +266,38 @@ async function main() { log.closeProgress(); } -try { - await main(); -} finally { - if (log) log.closeProgress(); -} +// try { +// await main(); +// } finally { +// if (log) log.closeProgress(); +// } + +const caps = { + 'browser': 'android', + // 'browser_version': 'latest', + 'os': 'android', + 'os_version': '9.0', + 'build': 'puppeteer-build-1', + 'device' : 'Google Pixel 2', + 'name': 'My first Puppeteer test', + 'browserstack.username': process.env.BROWSERSTACK_USERNAME || 'connorclark_ew2AEp', + 'browserstack.accessKey': process.env.BROWSERSTACK_ACCESS_KEY || 'sHP3NE6YBztjCywDTwER', + // 'browserstack.networkLogs': true, + // 'browserstack.console': 'errors', +}; +const wsUrl = `wss://cdp.browserstack.com/playwright?caps=${encodeURIComponent(JSON.stringify(caps))}`; +// const browser = await playwright.chromium.connect({wsEndpoint: wsUrl}); +console.log({wsUrl}); +const browser = await puppeteer.connect({browserWSEndpoint: wsUrl}); +const page = await browser.newPage(); + + + +console.log('starting...'); +const r = await lighthouse('https://www.example.com', {port: 9223}, undefined, page); +console.log(JSON.stringify(r?.lhr, null, 2)); + + +// const r = await runLighthouse('https://www.example.com', ['--hostname', wsUrl]); + +console.log(r);