Cocoa WebView:计算机空闲时的加载时间

时间:2014-08-21 11:14:23

标签: objective-c cocoa webview osx-mavericks load-time

我写了一个简单的Mac OS应用程序。该视图仅包含隐藏的WebView和NSTextView。在某个时间,将一个接一个地解析100个URL。在WebView中加载一个URL,一些DOM树解析发生,冲洗并重复。

一切正常,但计算机处于空闲状态(无用户活动)时加载时间存在一些重大差异。当我使用计算机时,URL需要 2秒才能加载。如果我使用计算机一段时间,则需要加载 1分钟的网址。

当我在一段时间后回到计算机并在TextView中看到最后的URL花了大约一分钟时,下一个URL将立即加载。因此,它必须与系统上的用户活动有关。对?谁知道为什么?

我在OS X 10.9.4上。

以下是我加载网址的代码:

#pragma mark -

- (void)processNextUrl
{
    // No url, stop
    if (_processQueue.count == 0)
        return;

    // Process url
    NSString     *urlString = [_processQueue objectAtIndex:0];
    NSURL        *url       = [NSURL URLWithString:urlString];
    NSURLRequest *request   = [NSURLRequest requestWithURL:url];

    [[_webView mainFrame] loadRequest:request];
}

#pragma mark - WebFrameLoadDelegate

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
    // Page ready for parsing?
    if ([[sender mainFrame] isEqual:frame] == NO)
        return;

    // Append date, time and url to TextView
    NSString *url = [[[[frame dataSource] request] URL] absoluteString];
    [self logText:url];

    // Parser does some DOM parsing and outputs to TextView
    Parser *parser = [[Parser alloc] initWithWebFrame:frame delegate:self];
    [parser parse];
}

#pragma mark - ParserDelegate Methods

- (void)parser:(Parser *)parser didFinishParsingUrl:(NSString *)url
{
    [_processQueue removeObjectAtIndex:0];
    [self processNextUrl];
}

1 个答案:

答案 0 :(得分:0)

我敢打赌AppNap正在扼杀你的资源过程。

您可能想要在Finder的应用程序的“获取信息”窗口中禁用AppNap - 临时测试以查看我当然是对的 - 或者只是使用NSProcessInfo' s {{3告诉系统该活动是用户启动的,不应该限制应用程序。