Поиск по блогу

среда, 25 июня 2014 г.

Тормозит не только сеть, но и браузер... Поэтому читаю "Высокая производительность Google Chrome"

Давно пора ругаться с интернет-провайдйером. Но и locslhost начал тормозить. В строке сообщений браузера выскочило "ожидание доступного сокета"... Решил, что настал благоприятный момент для сбора компромата на Chrome... Он и Comodo перелопачивают гигабайты данных на винчестере. Не иначе... шпионят...
Перед статьей собрано с десяток ссылок, в часности, рекомендуют отключить проверку на вирусы..., node.js сделана на движке js chrome... много полезных ссылок... А в статье подробно описывается процессы (пред)загрузки html-страницы... главный вывод - надо изучать node.js

Из "Высокая производительность Google Chrome"

С разделением процессов, исполнение веб-приложения главным образом включает три задачи: получить все нужные ресурсы, построить структуру страницы и отобразить ее, выполнить JS. Процессы построения страницы и выполнения JS следуют однопоточной, чередующей схеме, поскольку невозможно выполнить одновременное построение и модификацию одного и того же дерева страницы (DOM). Эта особенность объясняется тем фактом что JS сам по себе — однопоточный язык. Следовательно, оптимизация совместного построения страницы и исполнения скриптов в реальном времени является очень важной задачей, как для разработчиков веб-приложений, так и для разработчиков самого браузера.
Для отображения страниц Chrome использует WebKit, быстрый, открытый (Open Source) и совместимый со стандартами движок. Для выполнения JS Chrome использует собственный, очень хорошо оптимизированный V8 Javascript движок, который, кстати, является Open Source проектом, и нашел свое применение в множестве других популярных проектов — к примеру, в node.js.
Средняя страница, с выборки среди первых 300 000 сайтов интернета, имеет такие характеристики (на январь 2013):
«Вес» — 1280 КB
Состоит из 88 ресурсов (картинки, css, js)
Использует данные более чем из 30 сторонних сайтов.
Давайте посмотрим на это более детально. Свыше 1MB веса в среднем, состоит из 88 ресурсов, и собирается из 30 различных собственных и сторонних серверов. Заметим, что каждый из этих показателей неуклонно растет в течении нескольких последних лет, и нет повода прогнозировать, что этот рост остановится. Мы в все большем количестве строим все более громоздкие и требовательные веб-приложения, и этому не видно конца.
Получив URL ресурса в интернете, браузер начинает проверку, не локальный ли он, и имеются ли сохраненные данные в кэше. Если вы перед этим уже получали данные с этого ресурса, и соответствующие заголовки браузера были установлены (Expires, Cache-Controle, ...) то есть возможность получить все данные из кэша — быстрейший запрос — это тот запрос, который не был сделан. В другом случае, если мы проверили ресурс и кэш «протух» или мы еще не посещали сайт, приходит очередь сделать дорогостоящий сетевой запрос.
Имея адресу сайта и путь к запрашиваемому ресурсу, Chrome сначала проверяет, имеются ли открытые соединения на этот сайт, которые можно использовать снова — сокеты, объединены в группы по {scheme, host, port}. В случае, если вы выходите в интернет через прокси, или установили у себя proxy auto-config (PAC) скрипт, Chrome проверяет наличие нужного соединение через соответствующий прокси. PAC скрипт позволяет задать несколько прокси, базируясь на URL или других правилах настройки конфигурации, и каждый из них может иметь свой собственный набор соединений. И наконец, если ничто из вышеуказанных условий не подошло, пришел черед получения IP адреса для нужного нам адреса — DNS Lookup.
Если нам повезло, и адрес находится в кэше, ответ наверняка обойдется нам в один быстрый системный запрос. Если нет, то первым делом нужно выполнить запрос к DNS серверу. Время, которое потребуется для его выполнения, зависит от вашего интернет провайдера, популярности запрашиваемого сайта и вероятности, что имя сайта находится в промежуточном кэше, плюс время ответа сервера DNS на данный запрос. Другими словами, здесь много неопределенности, но время в несколько сот миллисекунд, которое понадобится на запрос до DNS, не будет чем-то из ряда вон выходящим.
Получив IP, Chrome может устанавливать новое TCP соединение к удаленному серверу, а это значит, что мы должны выполнить так называемое three-way handshake (трехкратное приветствие): SYN > SYN-ACK > ACK. Этот обмен приветствиями добавляет задержку на запрос-ответ для каждого нового TCP соединения — без исключений. В зависимости от расстояния между клиентом и сервером, учитывая выбор пути маршрутизации, это может отнять в нас несколько сот и даже тысяч миллисекунд. Заметим, что вся эта робота выполняется перед тем, как даже один байт данных веб-приложения будет передан!


Посты чуть ниже также могут вас заинтересовать

3 комментария:

  1. В комментарии к
    "Пытался понять почему антивирус такой прожорливый? Додумался, как настроить Google Chrome..."
    http://pythonr.blogspot.com/2014/07/google-chrome_8.html

    добавил ссылки о структуре кэша

    ОтветитьУдалить
  2. Эту задачку ярешил кардинально - работаю в Linux, здесь все летает...

    А компьютеры с Windows пару раз просканирвал на вирусы - вирусы (естественно) нашлись
    (нет такого касперского, который бы за 6 месяцев не прозевал бы парочку троянов),
    но улучшения ситуации не наступило...

    Так что на днях, я нашел хорошие описания процессов кэширования:

    Продолжаем разбираться с прожорливым кэшем Chromium -> disk_cache.h -> WebKit -> MemoryCache class
    http://pythonr.blogspot.ru/2015/04/chromium-diskcacheh-webkit-memorycache.html

    будем укладыват в голову объектные модели и смотреть сырцы.
    Вот только делать это некогда...

    Пока можно попробовать одну универсальнуюстратегию:
    для веб-серфинга можно использовать режим ИНКОГНИТО
    - здесь не создаеятся дисковый кэш
    т.е., на диск не должно ничего записываться

    ОтветитьУдалить
    Ответы
    1. В тексте поста я напсал "надо изучать node.js"
      Теперь уточняю "надо изучать webkit"
      Жаль, что получается урывками...

      Удалить