
У меня уже довольно давно есть эта проблема, когда веб-сайты, просматриваемые через браузеры на основе WebKit, непоследовательно загружают изображения. Под непоследовательным я подразумеваю, что при одном пробном запуске изображение или несколько изображений успешно загружаются, а другие — нет. При другом пробном запуске того же самого веб-сайта изображения, которые ранее не загружались, внезапно загружаются — а те, которые ранее загружались, внезапно не загружаются. Такое поведение настолько нелинейно, что мне крайне сложно определить источник проблемы. Я заметил, что эта проблема воспроизводится в таких браузерах, как jumanji
, dwb
и vimperator
. Я считаю, что общим фактором для всех этих браузеров является то, что они используют webkit
. Многократная перезагрузка веб-страницы иногда приводит к результату, когда все ресурсы загружаются правильно.
Вот скриншот описанного поведения (из webkit-based luakit
):
Как вы видите, это два неудачных изображения, которые иллюстрируют общее поведение здесь. Я не могу воспроизвести эту проблему с такими браузерами, как Firefox или Chrome (которые, как я полагаю, используют gecko
и blink
соответственно). Если я щелкну правой кнопкой мыши по изображению/элементу и открою его в новом окне, я смогу просмотреть изображение без проблем. Я использую ядро Arch Linux 3.12.9-1-ck. Любая помощь/понимание того, что может происходить, были бы очень признательны. Спасибо.
ОБНОВЛЯТЬ:Каждое сломанное изображение при проверке как элемента с помощью отладочной консоли в luakit выводит что-то вроде этой общей формы:
GET [web address here] Cannot resolve hostname [domain here]
ОБНОВЛЕНИЕ 2:Я попробовал установить luakit
на установку virtualbox, kali-linux
которая у меня есть на моей системе (на основе Debian) через apt-get install luakit
, и интересный результат ... Никаких симптомов неразрешенных имен хостов/сломанных образов/сбойных ресурсов. Просмотр также сравнительно быстрее в этой виртуальной среде.
Решение:
Следование предложению @harrymc (использование публичного DNS Google) полностью уничтожило все симптомы плохой загрузки страниц. По словам @harrymc, это происходит из-за неисправного/медленного DNS и/или плохих стратегий кэширования DNS. А точнее, причиной этой проблемы был плохой DNS и, по-видимому, довольно поспешный протокол тайм-аута, встроенный в движок webkit
. Эти два фактора — рецепт катастрофы.
Более открытая дуга мыслей:
Еще один вывод заключается в неэффективности браузеров Webkit, поскольку они отправляют несколько DNS-запросов для одного и того же веб-сайта, вместо того, чтобы запомнить первый запрос. Еще один вывод заключается в том, что DNS-сервер провайдера, по-видимому, иногда не может обрабатывать несколько параллельных запросов (поскольку браузер, вероятно, обрабатывает несколько изображений параллельно через потоки), возможно, потому что теперь у них больше клиентов, но недостаточно DNS-серверов. --harrymc
решение1
ОтТайм-аут Webkit останавливает длительные задачи:
Мы только что были вынуждены рефакторить/перекодировать значительную часть одного из наших RIA на основе AIR из-за произвольного решения, принятого командой Webkit, ограничить все запросы XML HTTP с помощью жестко закодированного, скрытого тайм-аута в 60 секунд. Это решение влияет не только на AIR, но и на Safari и другие браузеры на основе Webkit.
Хотя это не обязательно относится к вашей проблеме, это указывает на существование жестко запрограммированного тайм-аута в Webkit.
Если ваша проблема связана со слишком короткими тайм-аутами в Webkit, то возникает вопрос: почему вы сталкиваетесь с длительным ожиданием изображений, учитывая, что у вас быстрое соединение?
В качестве первого теста я предлагаю изменить ваш DNS-сервер на Google Публичный DNSилиOpenDNS, и посмотрите, есть ли разница. Если есть, то проблема в том, что ваш интернет-провайдер слишком медлителен в DNS или использует свой собственный кэш.
Еще одна ссылка наотключение HTTP keepalive с помощью User-Agent:
Давняя ошибка в Safari приводит к зависанию загрузки файлов при неправильном повторном использовании соединений keepalive.
https://bugs.webkit.org/show_bug.cgi?id=5760
В Apache отключение поддержки keepalive для Webkit решает эту проблему.
Если веб-сервер Apache по-прежнему отключает функцию keepalive для Webkit (Постоянное HTTP-соединение), это означает, что для каждого изображения требуется отдельное HTTP-соединение, в то время как Firefox и Chrome могут использовать уже существующее соединение страницы, чтобы также загружать изображения без повторного подключения.
Поскольку установление соединения обычно происходит довольно медленно, то это в сочетании с коротким встроенным тайм-аутом может объяснить проблему, которую Webkit имеет с изображениями.
Интересно, есть ли у ваших браузеров Webkit возможность изменять своиПользовательский агент личность ?
Например, не зная абсолютно ничего о vimperator, я нашел через Google плагинUserAgentSwitcherLite.