home

Электронные библиотеки: битва за скорость отображения страниц

Введение[править]

Большинство современных электронных библиотек (ЭБ) отображают страницы в браузере в виде рисунков. Такой подход дает определенную степень защиты от копирования, хорошо совместим с браузерами и требует меньшей вычислительной мощности в сравнении с парсингом и отображением PDF. В некоторых случаях рисунок упаковывается во внешний контейнер для отображения в Adobe Flash (КнигаФонд, IPRbooks), однако такую технологию надо признать устаревшей в виду отсутствия поддержки Adobe Flash на мобильных устройствах.

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

Рассмотрены будут доступные для установки на собственном сервере библиотеки Xerox на основе платформы DocuShare и ELiS. Дополнительно в сравнение будет добавлен плеер национальной электронной библиотеки (НЭБ).

Подходы к показу страниц[править]

Существует несколько подходов к показу страниц, имеющие свои преимущества и недостатки.

Способы генерации страниц[править]

  1. Страницы предварительно генерируются в одном разрешении, достаточном для комфортного просмотра на ПК в одном формате.
  2. Страницы генерируются динамически по факту обращения в одном разрешении и формате.
  3. Страницы генерируются динамически по факту обращения в разных разрешениях и форматах.

Сильной стороной предварительной генерации в одном разрешении является существенно меньшая нагрузка на процессор в процессе показа страниц. Слабой стороной является длительное время загрузки книги в библиотеку. Так рендеринг книги из 300 страниц в печатном качестве может занимать 20 минут.

Динамическая генерация позволяет быстрее загружать книги в ЭБ и сэкономить дисковое пространство на редко просматриваемых книгах, но приводит к существенной процессорной нагрузке во время генерации страницы и замедлению выдачи страницы в программу просмотра при первой генерации. Для таких систем характерна медленная работа при первом просмотре книги (требуется "прогрев").

Динамическая генерация в разных разрешения и форматах дает еще большую нагрузку на процессор т.к. "прогрев" требуется уже для каждого запрошенного разрешения. Сильной стороной является возможность подстраивать качество страницы и объем трафика под размеры экрана программы просмотра, что принципиально при просмотре или скачивании на мобильных устройствах. Так книга с исходным размером в 400 МБ при скачивании на смартфон может быть уменьшена до 50 МБ.

Кеширование[править]

Для повышения производительности кеширование может применяться как на стороне сервера, так и в программе просмотра.

На сервере кеширование применяется для сохранения динамически-сгенерированных страниц для быстрой страницевыдачи при повторных обращениях.

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

Методика тестирования[править]

Для тестирования отбирались по одной системе, предоставляющей в свободном доступе книгу "Дерево как строительный материал" В.И. Курдюмова и проводилось измерение скорости отдачи первых двух страниц. Первая обложка книги является цветной, вторая черно-белой. Там где страницы генерируются динамически, измерения проводились на "холодных" и "прогретых" страницах путем повторения запроса на одну и туже страницу. Время измерялось с помощью Developer Tools в браузере Chrome. Автор отдает себе отчет, что время генерации страницы существенно зависит от сложности исходного файла и не стоит обобщать результаты работы библиотек на разные книжные источники. Тем не менее, общее представление о работе существующих ЭБ можно сделать и на основе таких данных.

Общее время выдачи страницы можно разделить на четыре интервала:

  1. Установка соединения с сервером.
  2. Генерация страницы или загрузка уже сгенерированной .
  3. Отправка страницы в браузер.
  4. Декодирование страницы и отображение результата.

В результатах тестирования необходимо учитывать только второй временной интервал т.к. первый показывает удаленность до сервера ЭБ, третий скорость интернет-соединения сервера, а четвертый производительность браузера.

Результаты тестов[править]

Xerox DocuShare[править]

Тестирование проводилось на документе "Дерево как строительный материал" Курдюмова В.И. в библиотеке ГПНТБ http://193.233.14.130/reader/flipping/Resource-5227/Kurdyumov__V.I.Derevo__kak__stroitel--nyy__material.izd__6(1)/index.html

Формат всех страниц - PNG.

Цветная обложка: 813х1235 пикселей, 1.8 МБ, 120 мс. Вторая черно-белая страница 624х1083 пикселей, 24 КБ, 96 мс.

docushare-1.png

Особенности DocuShare - длительное "холодное" открытие документа - более 22 секунд занимает загрузка XML-файла с описанием ссылок на страницы. При повторном открытии указанный файл загружается уже за 290 мс, а инициализация плеера занимает 5 с, что все равно слишком много по современным стандартам. Время выдачи "прогретых" первых двух страниц сократилось на 20 мс. Страницы имеют разные вертикальные и горизонтальные размеры, что означает, что плеер не приводит страницы к заранее заданной высоте или ширине, а использует при рендеринге страницы заданный DPI.

Плеер сразу загружает следующие 6 страниц, т.е. используется упреждающее кеширование со стороны плеера.

При переходе на 110 страницу время генерации черно-белых страниц значительно увеличилось с 96 мс, до 3.5 с, т.е. более чем в три раза. Тестирование на книгах с большим числом страниц также показало существенный рост времени "холодной" генерации страниц далеко отстоящих от начала документа, при переходам по остальным страницам и по другим книгам в библиотеке ГПНТБ с черно-белыми страницами ситуация повторялась: длительная инициализация плеера и около 3.5 секунд на рендеринг одной страницы. Время извлечения прогретых страниц составляет 80 мс.

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

slow_loading_xerox_docushare.png

Таким образом, DocuShare динамически генерирует страницы со средним временем холодной генерации 3.5 с и 80 мс для "горячей" выдачи. Однако, начальная инициализация книги занимает около 20-30 секунд. Изменение разрешения или форматов вывода не используется и есть внезапные "провалы" производительности, природу которых объяснить я затрудняюсь.

Xerox DocuShare с HTML[править]

В статье описывается устаревшая версия ЭБ Xerox. Последняя версия имеет аналогичный внешний вид, но в ней переписан плеер с Adobe Flash на HTML, что позволяет читать книги на планшетах. В обновленной версии тестируемой книги не обнаружено, поэтому результаты здесь не приводятся. Вместе с плеером улучшены некоторые внутренние алгоритмы работы. Картинки теперь кешируются не последовательно, а параллельно. Произведен переход с PNG на JPEG, что положительно сказалось на размерах файлов. Также, по всей видимости, был перестроен внутренний алгоритм работы по генерации страниц и генерации рисунка по 30 секунд больше нет. Существенно уменьшено время выдачи уже сгенерированной страницы до 50-70 мс. Однако, сам каталог по прежнему работает медленно, открытие каталога может занимать десятки секунд. На холодное открытие книги все еще уходит по 30 секунд. Найти библиотеку можно здесь: http://ebook.bashnl.ru/dsweb/HomePage

docushare-html5-slow-initialization.png

НЭБ[править]

В НЭБ использовалась та же самая книга, загруженная, по всей видимости, ГПНТБ. https://нэб.рф/catalog/000219_000026_RU___ГПНТБ%20России___IBIS___0000648695/viewer/ На время проведения тестирования ГПНТБ не обладала собственной распределенной подключенной к НЭБ системой хранения, т.е книга лежала на серверных мощностях одной из федеральных библиотек.

neb-1-1.png

Формат всех страниц: JPEG.

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

Обложка с размером по-умолчанию 801x1215 пикселей, 127 КБ, 490 мс.

Обложка в высоком разрешении 2000х3037 пикселей, 709 КБ, 1.1 с.

Вторая (черно-белая) страница с размером по-умолчанию 800x1152 пикселей, 136 КБ, 480 мс.

Вторая (черно-белая) страница в высоком разрешении 2000х2881 пикселей, 557 КБ, 1.1 с.

Повторные обращения к страницам не приводят к сокращению времени генерации, таким образом отрендеренные страницы на сервере не кешируются.

Если листать страницы, то время от времени будет возникать ситуация, когда страница в высоком разрешении не будет получена вовсе. По всей видимости это связано с ошибками на стороне сервера.

На данной книге время генерации остальных страниц близко к первым двум. Дополнительно было проведено тестирование на более сложных оцифрованных книгах, например: http://xn--90ax2c.xn--p1ai/catalog/000200_000018_pb00001851/viewer/, которое показало, что генерация страницы с шириной 800 пикселей может незначительно отличаться по времени от генерации страницы с разрешением 2000 пикселей и составлять 1-1.3 секунды. В таких случаях концепция отправки страницы в двух разрешениях выглядит сомнительной, особенно при использовании мобильных устройств.

Итого, НЭБ динамически генерирует страницы в одном формате JPEG и не использует кеширование ни на клиенте ни на сервере. Генерация и отправка в браузер производится в двух разрешениях: 800 и 2000 пикселей. Время генерации от 0.5 до 1 секунды на страницу с меньшим разрешением. Время генерации страницы с шириной 2000 пикселей визуального значения не имеет, но увеличивает потребление трафика.

ELiS[править]

В качестве книги взята эталонная книга, скачанная из НЭБ и загруженная в ELiS http://demo.elibsystem.ru/node/22824.

Для FullHD экрана ширина книги была автоматически установлена в 691 пиксель.

В ELiS ширина страницы подстраивается под размер устройства. Формат страницы автоматически определяется исходя из того, является ли книга оцифрованной или предоставлена издательством в текстовом виде. В первом случае используется JPEG и WebP, во втором PNG. Страницы генерируются динамически и кешируются на сервере. Для браузеров Firefox и Internet Explorer включено кеширование следующей страницы на клиенте.

elis-1-1.png

Обложка (непрогретая): 691х1050 пикселей, 150 КБ, 1.6 с в WebP и 1.0 c в JPEG.

Обложка (прогретая): 691х1050 пикселей, 150 КБ, 35 мс в WebP и 34 мс в JPEG.

Вторая страница (непрогретая): 691x1198 пикселей, 23 КБ WebP и 47 КБ в JPEG, 1 с в WebP и 670 мс в JPEG.

Вторая страница (прогретая): 691x1198 пикселей, 23 КБ, 34 мс в WebP и 41 мс в JPEG.

Отображение первой страницы в "холодном" режиме составляет чуть более двух секунд: 2.2 c.


Сводная таблица результатов[править]

results_table.png

Замечания по результатам тестов[править]

В данном сравнении определялось времени ожидания страницы и подхода к ее генерации. Удобство плееров, их визуальный интерфейс и функциональные возможности не рассматриваются. Дополнительно отмечено время, затраченное на отображение незакешированной книги (время холодной страницевыдачи).

Под холодной страницевыдачей понимается переход на книгу, объект которой еще не закеширован в памяти. В ELiS для этого сбрасывался внутренний кеш и удалялся серверный кеш страниц. В Xerox DocuShare понять об попадании на незакешированный объект можно было по длительному времени генерации xml-файла описания книги. Для НЭБ такие данные не измерялись. Данный параметр показывает временную задержку при переходе пользователя на редко-посещаемую книгу или время первой загрузки книги после сброса серверного кеша.

Ширина страниц отдельно не оценивалась, т.к. большая ширина не является положительным фактором, равно как и слишком маленькая. Также нельзя говорить об однозначной победе НЭБ и Xerox DocuShare по параметрам объема страницы т.к. слишком малый размер может обеспечиваться слишком сильным сжатием. Если говорить про выбор формата, то в общем случае нельзя отдать превосходство JPEG над PNG, т.к. PNG лучше подходит для текстовых PDF (как по объему, так и по качеству), но значительно хуже сжимает цветные страницы. Однако ELiS выигрывает у конкурентов за счет автоматического определения подходящего формата.

Автор является заинтересованным лицом и следует подходить к представленным результатам с долей недоверия. Однако, задачей статьи я считаю не столько даже показать конкретные результаты, сколько раскрыть особенности отображения электронных книг в браузере, знания которых стали бы еще одним критерием при выборе той или иной ЭБС или электронной библиотеки.

Выводы[править]

Протестированная версия Xerox DocuShare имеет существенные недостатки для использования в ЭБ. Наибольшее время холодной генерации страниц до 4.5 с и полуминутная инициализация не позволяют этому плееру конкурировать на равных с остальными решениями. Эффективное кеширование со стороны клиента ближайших страниц при медленном чтении сглаживает эти недостатки и делает процесс наиболее удобным из представленных плееров, но первое впечатление у пользователей будет испорчено. Кроме этого, по статистике, большинство пользователей читают небольшое число страниц, приходя из внешних поисковых систем и медленный холодный старт крайне негативно скажется на статистике. В новой версии часть недостатков была исправлена и при входе на уже прогретую книгу пользователь останется доволен.

НЭБ выглядит более проработанным решением. Слабая сторона НЭБ - отсутствие кеширования как на стороне сервера, так и на стороне клиента. Загрузка копии страницы с большим разрешением без необходимости тоже является существенным минусом для мобильных пользователей. Из положительных сторон можно назвать стабильное время генерации страниц, которое лучше холодной генерации ELiS.

ELiS в данной группе тестирования опережает других участников по большинству параметров, не выдавай ни по одному из них худший результат. У ELiS очень высокая скорость отдачи "горячих" страниц в программы просмотра (около 40-50 мс) при автоматическом выборе подходящего формата, что уменьшает объем передаваемого трафика, важный для низкоскоростных подключений. Недостатком ELiS является низкая скорость холодной генерации страниц. В ELiS используется технология упреждающей генерации, позволяющая сгенерировать следующую страницу в нужном разрешении не дожидаясь поступления запроса от программы чтения.

Если сравнивать эти три системы при медленном чтении, в ситуации когда клиентское кеширование полностью успевает отработать, то наименьшие неудобства переключение страниц доставляет DocuShare, затем ELiS, затем НЭБ.

Применимость формата WebP[править]

Формат WebP - новый формат, призванный заменить JPEG. Автор провел тестирование, выявившее экономию 20-25% трафика при переходе с JPEG на WebP. Но WebP не является универсальным форматом и не может заменить PNG при представлении текстовых книг. Поэтому ELiS способна отдавать страницы в нескольких форматах: PNG, JPEG, WebP, SVG.