Я написал простое приложение для Mac OS. Представление содержит только скрытый WebView и NSTextView. В определенное время будет проанализировано 100 URL-адресов один за другим. URL-адрес загружается в WebView, происходит некоторый синтаксический анализ дерева DOM, полоскание и повторение.
Все работает нормально, за исключением некоторых существенных различий во времени загрузки, когда компьютер находится в режиме ожидания (без активности пользователя). Когда я использую компьютер, URL загружается примерно 2 секунды. Когда я не использую компьютер в течение некоторого времени, загрузка URL-адреса занимает около 1 минуты.
Когда я возвращаюсь к компьютеру через некоторое время и вижу в TextView, что последние URL-адреса заняли около минуты, следующие сразу будут загружены за секунды. Так что это должно быть что-то с активностью пользователя в системе. Верно? Кто-нибудь знает, почему?
I am on OS X 10.9.4.
Вот код, как я загружаю URL-адреса:
#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];
}