Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Bastidores das análises dos Sites dos participantes do QCon SP
Algumas pessoas me perguntaram como fiz a análise dos Sites do pessoal que foi no QCon. Sim, eu analisei
o Site de todo mundo, um por um, e fiz as médias. Mas obviamente, nada manual, então lá vai como fiz:
1) Peguei o e-mail de todo mundo cadastrado e extraí o domínio. Tirei os e-mails de webmails genéricos
(gmail, hotmail etc) e separei os domínios das empresas. Salvei tudo num urls.txt (no total deram umas
100 URLs únicas).
2) Submeti todos os domínios (prefixados por http://www) pro WebPageTest.org. Para isso, fiz um programinha
Java usando Selenium2 (código abaixo no gist)
3) O programa anterior cospe os test_ids gerados pelo WebPageTest para cada teste. Esperei uns minutos e
baixei os resultados (em .csv e .har) usando outro programinha Java (código abaixo no gist).
4) Peguei os CSV e joguei num Google Spreadsheets pra ordenar, tirar médias de algumas métricas etc.
PS. O WebPageTest tem uma API REST mas você precisa registrar um key o que não é muito fácil (ou rodar
sua instância própria no EC2). Usando o Selenium consegui submeter os testes sem problemas usando a
interface normal do Site mesmo :)
PS2: Nao vou divulgar os endereços individuais nem estatisticas de sites especificos. Mas se alguem
quiser saber mais algum numero de media, so perguntar
-----
Slides da apresentação com resultado dos estudos:
www.slideshare.net/caelumdev/qcon-2011-por-uma-web-mais-rpida-tcnicas-de-otimizao-de-sites
// "scriptizao" pra baixar os resultados depois de executados
public class DownloadResults {
public static void main(String[] args) throws FileNotFoundException {
Scanner results = new Scanner(new File("test-ids.txt"));
while (results.hasNextLine()) {
String[] result = results.nextLine().split("\\s+");
String testId = result[0];
String domain = result[1];
System.out.print("Downloading results for " + domain);
String pageDataUri = "http://www.webpagetest.org/result/" + testId + "/" + testId + "_www." + domain + "_page_data.csv";
String pageDataOutput = "results/page_data/" + domain + ".csv";
try {
download(pageDataUri, pageDataOutput);
} catch (Exception e) {
e.printStackTrace();
}
String requestsUri = "http://www.webpagetest.org/result/" + testId + "/" + testId + "_www." + domain + "_requests.csv";
String requestsOutput = "results/requests/" + domain + ".csv";
try {
download(requestsUri, requestsOutput);
} catch (Exception e) {
e.printStackTrace();
}
String harUri = "http://www.webpagetest.org/export.php?test=" + testId;
String harOutput = "results/har/" + domain + ".json";
try {
download(harUri, harOutput);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(" [COMPLETED]");
}
results.close();
}
private static void download(String uri, String output)
throws MalformedURLException, IOException, FileNotFoundException {
URL url = new URL(uri);
ReadableByteChannel rbc = Channels.newChannel(url.openStream());
FileOutputStream fos = new FileOutputStream(output);
fos.getChannel().transferFrom(rbc, 0, 1 << 24);
fos.close();
rbc.close();
}
}
// "scriptizão" feio pra submeter os testes no WebPageTest.org
// pra rodar, tenha os JARs do Selenium2 no classpath
public class PostTests {
static FirefoxDriver driver = new FirefoxDriver();
public static void main(String[] args) throws FileNotFoundException {
PrintWriter tests = new PrintWriter("test-ids.txt");
Scanner domains = new Scanner(new File("urls.txt"));
while (domains.hasNextLine()) {
try {
String domain = domains.nextLine();
String uri = "http://www." + domain + "/";
System.out.print("Testing: " + uri);
String testId = submitTestTo(uri);
System.out.println(" [COMPLETED]");
tests.println(testId + " " + domain);
tests.flush();
} catch (Exception e) {
e.printStackTrace();
continue;
}
}
domains.close();
tests.close();
driver.quit();
}
private static String submitTestTo(String uri) {
driver.navigate().to("http://www.webpagetest.org/");
WebElement uriField = driver.findElement(By.name("url"));
uriField.clear();
uriField.sendKeys(uri);
driver.findElement(By.name("submit")).click();
(new WebDriverWait(driver, 15)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getCurrentUrl().startsWith("http://www.webpagetest.org/result/");
}
});
String testUrl = driver.getCurrentUrl();
String testId = testUrl.split("/")[4];
return testId;
}
}
@zeroum

This comment has been minimized.

Copy link

zeroum commented Sep 12, 2011

Fiz um teste naquelas lojas com home de 8 MB com o Chrome (Incognito mode para não cachear), e elas deram pouco mais de 2 MB. Talvez tenham trocado o site deles de lá pra cá, ou seja um bug no Web Page Test.

@ericsaboia

This comment has been minimized.

Copy link

ericsaboia commented Sep 12, 2011

Muito legal! cade o post com as referências que você falou que iria publicar?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.