Проблема подтверждена
Я также вижу задержку в полсекунды или более с белым экраном перед тем, как появляется мое UIWebView содержимое.Это происходит только при первом использовании UIWebView во время этого запуска приложения.Последовательные появления UIWebView почти мгновенные.Поэтому мне и другим людям кажется, что задержка должна быть связана с необходимостью загрузки и инициализации библиотек WebKit .
Warm-up WebKit
Вы не можете устранить задержку.Но вы можете перенести эту задержку на начало вашего приложения, чтобы уменьшить раздражающий эффект «пустого экрана» для ваших пользователей.Хитрость заключается в том, чтобы загружать UIWebView с фиктивной страницей вне экрана во время запуска вашего приложения.Создайте минимальную HTML5 веб-страницу в жестко запрограммированной строке.Я использую правильный и действительный контент HTML5, чтобы минимизировать время, затрачиваемое UIWebView / WebKit на анализ.
Этот метод заметно работает на реальном оборудовании ( iPhone 3GS ), а не только на iOS Simulator .
В моем приложении делегаты didFinishLaunchingWithOptions
метод , нижняя часть ARC -совместимого кода выглядит так:
…
[self.window makeKeyAndVisible];
// Performance optimization: Warm up the UIWebView widget and its related WebKit libraries.
// We are choosing the trade-off between (A) a slight delay here during app launch to create and abandon a bogus UIWebView instance, and
// (B) a flash of white and noticeable delay as the UINavigationController slides in from the right the first UIWebView we display during the app run.
UIWebView* bogusWebView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
NSString* html = @"<!doctype html><html lang=en><head><meta charset=utf-8><title>blah</title></head><body><p>bogus content</p></body></html>";
[bogusWebView loadHTMLString:html baseURL:nil]; // Load the page.
bogusWebView = nil; // Not really needed, but self-documents that we intend to discard this object.
return YES;
Эта методика, по-видимому, уменьшает большую часть, но не полностью, приблизительную задержку в полсекунды при первом появлении пользователем UIWebView на экране.Я пришел к выводу, что большая часть задержки связана с прогревом WebKit, но должны быть некоторые накладные расходы, связанные с графическим представлением UIWebView на экране.Если это так, мы не можем устранить оставшиеся накладные расходы с помощью работы вне экрана.Но, тем не менее, этот метод устраняет большинство начальной задержки.Таким образом, первое впечатление пользователя от моего приложения не будет «медленным».