Кеширование рисунков в Опере

По умолчанию в Опере очень плохо кешируются рисунки. Изменив пару настроек, можно сильно ускорить работу с ними.

(читать дальше)

Проблема

Проведите небольшой эксперимент: откройте семь-восемь огромных (не меньше 2000×3000 пикселей) картинок в отдельных вкладках, и попереключайтесь между ними. Если не знаете, где такие взять, поройтесь на Danbooru — NSFW. Видите? Каждый раз, как вы переключаетесь на следующую вкладку, картинка медленно прорисовывается снизу вверх. Это заметно на “тяжёлых” рисунках, но происходит и на мелких, даже на одной и той же странице, когда вы скроллитесь вперёд-назад.

Дело в том, что у Оперы есть два кеша: медленный кеш на диске и быстрый в памяти. Когда вы переключаетесь на следующую картинку, предыдущая выбрасывается из кеша в памяти, и потом её придётся снова загружать с диска и распаковывать (картинки запакованы для уменьшения размера).

Но почему Опера выбрасывает картинки из памяти, хотя вы открыли всего-то 7 рисунков по 5 мегабайт каждый? Это же 40 мегабайт данных, а у вас несколько гигабайт оперативки!

На самом деле, в распакованном виде эти картинки занимают гораздо больше. Умножьте 2000 на 3000 и на 4 (размер пикселя) – получите 25 мегабайт. Такова “цена” одной картинки в памяти.

И всё-таки, даже семь таких картинок – это лишь 180 мегабайт. Однако Опера почему-то устанавливает размер кеша в памяти именно таким, – маленьким, – и спешит выкинуть лишнее, хотя в результате его придётся медленно перезагружать.

К счастью, размер кеша можно задать вручную.

Решение

  1. Откройте opera:config
  2. Найдите параметр “Cache\Figure“. По умолчанию в нём стоит 2Мб. Укажите что-нибудь вроде 1Гб (в килобайтах: “1048576”, а если памяти хватает, в 64-битной Опере можно и 2-4Гб). Сохраните настройки.
  3. Найдите параметр “UserPrefs\Automatic RAM Cache“. Отключите его.
  4. Перезагрузите Оперу

Снова попробуйте открыть несколько больших рисунков. Теперь они должны оставаться в памяти и появляться мгновенно, как только вы переключаетесь на вкладку с ними.

Если хотите, можно поднять и следующие параметры кеша:

  • Cache\Document – тоже до гигабайта-полутора
  • Disk Cache\BufferSize – до 100 мегабайт
  • Disk Cache\Size – до 200 мегабайт, или сколько места у вас есть на диске, где лежит кеш

Какой размер кеша выбрать и чем это грозит

Если у вас 32-битная Опера, не делайте общий объём Cache\Figure и Cache\Document больше гигабайта, сколько бы памяти у вас не было. В 64-битной Опере можно (и даже полезно) установить суммарный объём кеша до половины объёма вашей оперативки.

Но тогда другим приложениям не хватит памяти!
Чушь. Внимательно послушайте: в системе Windows приложения не делят память. Опера может “съесть” 8Гб оперативки, и при этом для других приложений вся память будет свободна!
Чудеса? За кулисами Windows поступает так: если программе нужна память, а свободной памяти нет, она временно “убирает” часть памяти Оперы на жёсткий диск, в файл подкачки. Потом, когда Опере опять потребуется эти данные, система их вернёт в оперативку.

Получается, данные всё равно будут грузиться с диска?
Только в том случае, когда другим приложениям не хватило памяти из-за Оперы. Это должно происходить редко.

Тогда почему в 32-битной Опере нельзя поставить больше гигабайта?
Сколько бы у вас не было физической памяти, виртуальной памяти у 32-битных приложений всего по 2 гигабайта. Когда она кончится, приложение умрёт. Если вы больше гигабайта отдадите на кеш, Опере совсем не останется памяти на всё остальное.

Почему в 64-битной Опере можно поставить больше гигабайта?
У 64-битных приложений гигантский объём виртуальной памяти. Можете отвести под кеш хоть терабайт, место всё равно останется.

Но у меня всего 8 гигабайт оперативки, откуда возьмётся этот терабайт?
Система будет убирать часть этого терабайта на диск. В физической памяти будут оставаться только самые нужные его части.

Тогда почему не поставить кеш в терабайт?
Нет смысла. Нам хочется, чтобы кеш был быстрым, а для этого он должен умещаться в физической памяти. Конечно, иногда система может сбросить его на диск, но мы рассчитываем, что это будет происходить нечасто.

Что, если у меня отключен файл подкачки?
Тогда, разумеется, постарайтесь не съесть всю доступную физическую память! Сделайте кеш поменьше.

Что, если у меня постоянно запущен отжирающий 75% памяти монстро-процесс?
Тогда, разумеется, постарайтесь уместить кеш в оставшиеся 25%! Вам не нужно, чтобы система постоянно загружала-выгружала память с диска, разрываясь между вашим монстром и Оперой.

У меня SSD. У меня дисковый кеш лежит на рам-диске. Всё и так должно быть быстро.
Даже если дисковый кеш находится на рам-диске, загрузка и распаковка рисунка занимают время, в чём легко убедиться, проведя описанный в статье эксперимент. Кеш памяти быстрее.

Бонус: какими расширениями Оперы я пользуюсь.

4 комментария

  1. hlidskalph
    6 July, 2012 в 14:25 | Ссылка

    Для владельцев SSD и неторопящихся – не применимо?)

    1. himself
      6 July, 2012 в 15:32 | Ссылка

      SSD? Применимо. Скорость чтения из оперативки всё равно в сто раз выше, а кроме того, даже если дисковый кеш расположить на рам-диске, можно видеть, что процедура загрузки-распаковки из него в память всё равно медленная.

  2. hlidskalph
    10 July, 2012 в 15:31 | Ссылка

    “Скорость чтения из оперативки всё равно в сто раз выше”. Гм, а откуда такая точная цифра? Полазил, посмотрел – для двухканальной ДДР3 чтение 15000 Мбит/с, а для твердотельников (если брать средний уровень) не более 150-200 Мбит/с (это для Санди Бриджа).

    Хотя, “отзывчивость” компа радикально увеличивается только от установки SSD.

    1. himself
      10 July, 2012 в 15:46 | Ссылка

      Наугад сказал) Главное, прочтённое с диска всё равно попадает в оперативку, и показано будет оттуда. Так что тут разница между “скорость РАМ” и “скорость диска плюс всё равно скорость РАМ”. Каким бы быстрым ни был диск, скорость не нулевая.

    Напишите комментарий:

    Если хотите, можно залогиниться.

    *