Расчет времени загрузки элементов страницы с помощью Rcurl?(Р) - PullRequest
1 голос
/ 25 апреля 2011

Я начал играть с идеей тестирования времени загрузки веб-страницы с помощью R. Я разработал крошечный R-код для этого:

page.load.time <- function(theURL, N = 10, wait_time = 0.05)
{
    require(RCurl)
    require(XML)
    TIME <- numeric(N)
    for(i in seq_len(N))
    {
        Sys.sleep(wait_time)
        TIME[i] <- system.time(webpage <- getURL(theURL, header=FALSE, 
                                                 verbose=TRUE) )[3]
    }
    return(TIME)
}

И приветствую вашу помощь несколькими способами:

  1. Можно ли сделать то же самое, но также знать, какие части страницы заняли какие части загрузить?(что-то вроде Yahoo YSlow )
  2. Иногда я сталкиваюсь со следующей ошибкой -

Ошибка в curlPerform (curl = curl, .opts = opts, .encoding = .encoding): сбой при получении данных от однорангового узла Время остановилось на: 0,03 0 43,72

Есть предложения о том, что вызывает это, и как отловить такие ошибки и отбросить их?

Можете ли вы придумать способы улучшить вышеуказанную функцию?

Обновление : я переделал функцию.Теперь это мучительно медленно ...

one.page.load.time <- function(theURL, HTML = T, JavaScript = T, Images = T, CSS = T)   
{
    require(RCurl)
    require(XML)
    TIME <- NULL


    if(HTML) TIME["HTML"] <- system.time(doc <- htmlParse(theURL))[3]
    if(JavaScript) {
        theJS <- xpathSApply(doc, "//script/@src")  # find all JavaScript files
        TIME["JavaScript"] <- system.time(getBinaryURL(theJS))[3]
    } else ( TIME["JavaScript"] <- NA)
    if(Images) {
        theIMG <- xpathSApply(doc, "//img/@src")    # find all image files
        TIME["Images"] <- system.time(getBinaryURL(theIMG))[3]
    } else ( TIME["Images"] <- NA)
    if(CSS) {
        theCSS <- xpathSApply(doc, "//link/@href")  # find all "link" types
        ss_CSS <- str_detect(tolower(theCSS), ".css")   # find the CSS in them
        theCSS <- theCSS[ss_CSS]
        TIME["CSS"] <- system.time(getBinaryURL(theCSS))[3]
    } else ( TIME["CSS"] <- NA)

    return(TIME)
}



page.load.time <- function(theURL, N = 3, wait_time = 0.05,...)
{
    require(RCurl)
    require(XML)
    TIME <- vector(length = N, "list")
    for(i in seq_len(N))
    {
        Sys.sleep(wait_time)
        TIME[[i]] <- one.page.load.time(theURL,...)
    }
    require(plyr)
    TIME <- data.frame(URL = theURL, ldply(TIME, function(x) {x}))
    return(TIME)
}

a <- page.load.time("http://www.r-bloggers.com/", 2)
a

Ответы [ 2 ]

2 голосов
/ 25 апреля 2011

ваш вызов getURL выполнит только один запрос и получит исходный HTML-код для веб-страницы.Он не получит CSS, Javascript или другие элементы.Если это то, что вы подразумеваете под «частями» веб-страницы, то вам придется очистить исходный HTML-код для этих частей (в тегах SCRIPT, или ссылках CSS и т. Д.) И получить их отдельно по времени.

1 голос
/ 25 апреля 2011

Возможно, Спайдермонкей из Омегахата может сработать. http://www.omegahat.org/SpiderMonkey/

...