Monday, April 26, 2010

Firefox DNS Prefetching and IPv6- disable (English, Russian)


In general, you don't need to do anything to manage prefetching. However, the user may wish to disable prefetching. This can be done by setting the network.dns.disablePrefetch preference to true.

Also, by default, prefetching of embedded link hostnames is not performed on documents loaded over HTTPS. This can be changed by setting the network.dns.disablePrefetchFromHTTPS preference to false.

https://developer.mozilla.org/En/Controlling_DNS_prefetching

Подробности о том, что такое DNS Prefetching и как его сконфигурированный в браузере можно найти ниже. Также ниже, только на английском, есть про отключение IPv6. Включенное поддержка IPv6 на некоторых конфигурациях может создавать connections problems.

Итак, чтобы отключить DNS Prefetching нужно зайти в about:config создать булевую переменную network.dns.disablePrefetch и присвоить ей значение true. По-умолчанию, этой переменной не существует и Firefox ведёт себя как будто задано значение false, т.е. DNS Prefetching включён. Можно создать также переменную network.dns.disablePrefetchFromHTTPS. Если её нет, то Firefox ведёт себя как будто задано значение true, т.е. DNS Prefetching отключён.
Почему я отключил DNS Prefetching. По нескольким причинам, которые я опишу вкратце ниже.

Ниже есть продолжение.


Сначала я дам краткое описание, что такое DNS resolution. Это когда компьютер находит, что у сайта www.google.com/, на момент написания этих строк, IP 74.125.67.191. Как происходит DNS resolution не принципиально, главное, что это занимает 1-2 миллисекунды для сайтов, которые мы только что посетили (они находятся в кэше OS) до 1-2 секунды в худшем случае, когда мы ищем его "по всему интернету". Пример работы. Вы заходите на страничку моего блога alexsmail.blogspot.com браузер ДО этого (последовательно) производит DNS resolution, находит IP и потом загружает страничку. У найденного IP есть "срок годности", expirataion time, после которого нужно делать DNS resolution заново. Вы захотели посмотреть мой СV. Вы нажимаете на линк, так как этот линк ведёт на другой hostname, сначала происходит DNS resolution, т.е. вы ждёте все это время, затем грузится эта страничка.
Что такое DNS Prefetching? Если рассмотреть последний пример, то это значит, когда вы заходите на главную страницы этого блога, то происходить DNS resolution самого блога и DNS resolution всех линков на другие хосты, которые исходят с этого блога. Более того этот DNS resolution происходит не последовательно, а параллельно с загрузкой странички. Тем самым, когда (и если...) вы заходите посмотреть мой CV, то вы не будете ждать DNS resolution, а вы сразу пойдёте по этой ссылке. При этом очевидный минус, который состоит в том, что вы сделали DNS resolution ссылкам, на которые end user в конце-концов не зашёл довольно маленькое. Дело в том, чтобы узнать IP нужно послать один пакет UDP величиной в 100 байт и принять один пакет UDP величиной в 100 байт. Таким образом тем, что мы сделали несколько лишних DNS resolution, по количеству ссылок на странице, в типичной случае, которых немного, мы увеличили трафик на пренебрежимо-малую величину, а выиграли при этом время загрузки страницы.

Итак, сами причины.
- трата ресурсов системы в пустую;
- пренебрежительно маленький выигрыш end-user-а (меня, то-бишь);
- ограничение на количество открытых connections;

Разберём каждую из них по-отдельности.
трата ресурсов системы в пустую Во-первых, DNS Prefetching обрабатывается параллельно, а значит на них нужные новые Thread-ы. В Firefox выделятся 8 специально-предназначенных только для этого Thread-ов. Во-вторых, у полученного IP есть expiration time, "срок годности", это значит, что потенциально (я специально не проверял) после него вся страница будет обработана заново, даже если мы её в данный момент не используем. В-третьих, мы тратим ресурсы системы на обработку линков, которыми мы не пользуемся, так как обработка эта eager, а не on-demand - lazy. В-четвёртых, у меня всегда открыто минимум 5 табов. Обычно у меня может быть и довольно долго открыто и 20 табов. Каждый таб делает DNS Prefetching. А если DNS Prefetching случается после окончания "срока годности" IP, то количество лишних DNS Prefetching просто зашкаливает. Речь идёт не о использовании канала связи, а речь идёт об использовании памяти, процессора и т.п.

пренебрежительно маленький выигрыш end-user-а (меня, то-бишь) И это всё из-за чего? Чтобы выиграть 1 секунду в худшем случае? Как я уже упоминал есть DNS кэш на уровне OS, в которой хранятся последние используемые сайты. Только если мы делаем "глубокий поиск" мы дойдём до 1 секунды, т.е. на практике речь идёт долях секунды. Но даже если это 1 секунда на открытие нового сайта, речь идёт об очень маленькой, не ощущаемой для меня лично как end-user-а величине.

ограничение на количество открытых connections как я говорил выше DNS Prefetching происходит параллельно. Это значит, открываются новые connection-ы. На работе я столкнулся с тем, что количество открытых мною connection-ов превысело установленное в локальной сети и я начала получать очень часто сообщение о том, что невозможно отобразить страницу. Дома же, я отключил из-за того что я заметил, что некоторые сайты делают довольно часто refresh по непонятной причине. Я ещё не проверял связано это с этим или нет.


DNS prefetching is an attempt to resolve domain names before a user tries to follow a link. This is done using the computer's normal DNS resolution mechanism...Once a domain name has been resolved, if the user does navigate to that domain, there will be no effective delay due to DNS resolution time. The most obvious example where DNS prefetching can help is when a user is looking at a page with many links to various domains, such as a search results page. When we encounter hyperlinks in pages, we extract the domain name from each one and resolving each domain to an IP address. All this work is done in parallel with the user's reading of the page, using minimal CPU and network resources. When a user clicks on any of these pre-resolved names, they will on average save about 200 milliseconds in their navigation (assuming the user hadn't already visited the domain recently). More importantly than the average savings, users won't tend to experience the "worst case" delays for DNS resolution, which are regularly over 1 second.

...Firefox attempts to speed up loading new websites by using DNS Prefetching, which can cause page load errors with some system configurations. To disable DNS Prefetching:

1. In the Location bar, type about:config and press EnterReturn.
* The about:config "This might void your warranty!" warning page may appear. Click I'll be careful, I promise!, to continue to the about:config page.
2. Right-clickHold down the Ctrl key while you click in the list of preferences, select New, and then select Boolean.
3. In the Enter the preference name window, enter network.dns.disablePrefetch and click OK.
4. Select true when prompted to set the value and click OK.

Configuring prefetching in the browser


IPv6

Firefox supports IPv6 by default, which may cause connection problems on certain systems. To disable IPv6 in Firefox:

1. In the Location bar, type about:config and press EnterReturn.
* The about:config "This might void your warranty!" warning page may appear. Click I'll be careful, I promise!, to continue to the about:config page.
2. In the Filter field, type network.dns.disableIPv6.
3. In the list of preferences, double-click network.dns.disableIPv6 to set its value to true.



http://support.mozilla.com/en-US/kb/Firefox+cannot+load+websites+but+other+programs+can#DNS_Prefetching

https://developer.mozilla.org/En/Controlling_DNS_prefetching
http://dev.chromium.org/developers/design-documents/dns-prefetching
http://bitsup.blogspot.com/2008/11/dns-prefetching-for-firefox.html

See also http://www.tweakguides.com/Firefox_9.html to learn more about:cofig.

No comments:

Post a Comment