Pdf.js: Утечка памяти: некоторые события не отменяются

Созданный на 5 июл. 2019  ·  9Комментарии  ·  Источник: mozilla/pdf.js

Конфигурация:

  • Веб-браузер и его версия: любая версия
  • Операционная система и ее версия: любая ОС
  • Версия PDF.js: 2.2.222
  • Расширение браузера: нет (я использую общий браузер для отображения PDF-файлов, встроенных в веб-приложение)

Изучая https://github.com/stephanrauh/ngx-extended-pdf-viewer/issues/101 , я заметил, что есть три события, которые зарегистрированы, но никогда не отменяются. Полагаю, это утечка памяти. В моем случае это вызывает проблемы в моем SPA, когда я пытаюсь распечатать с помощью CTRL + P после выхода со страницы с помощью средства просмотра PDF.

Я полагаю, это просто вопрос добавления этих трех событий в PDFViewerApplication.unbindWindowEvents () .

1-viewer

Все 9 Комментарий

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

Вроде все не так просто, хотя пока не знаю почему:

  • прослушиватель нажатия клавиш регистрируется при загрузке скрипта viewer.js, независимо от того, есть ли PDF-файл или нет.
  • Я добавил removeEventListener, как и предложил. К моему удивлению, CMD + P ничего не делает (кроме выделения на долю секунды меню «редактирования»). Может это проблема OSX. Моя теория состоит в том, что регистрация события "keydown" автоматически убивает стандартную привязку клавиш. Если это правда, мы могли бы просто повторно привязать его к window.print() .

Кстати, вот мои изменения исходного кода: https://github.com/stephanrauh/ngx-extended-pdf-viewer/commit/6f47d1bd7f790fa47872c11031fefae4e24e283e#diff -ff2d4af1f0673e3ea448a1dab444e

Забудьте о моем последнем посте - мне удалось все наладить и запустить. Восстановить стандартную функциональность можно после удаления pdf.js из DOM. Также см. № 10948, это неожиданный побочный эффект, который вчера меня сбил с толку.

В запросе на вытягивание № 11380 два из трех зарегистрированных прослушивателей событий теперь также отменяются при сбросе. Для этой проблемы остается только прослушиватель событий нажатия клавиши печати.

В запросе на вытягивание № 11380 два из трех зарегистрированных прослушивателей событий теперь также отменяются при сбросе.

Да, но эти события были исправлены только косвенно, поскольку по другим причинам (например, совместимости с другими компонентами) имело смысл разрешить сброс экземпляра PDFHistory .

В общем, я бы очень хотел предложить WONTFIX для кода PDFPrintService по нескольким причинам:

  • В этой проблеме утверждается, что есть утечки памяти, но на самом деле нет никаких доказательств, подтверждающих это.
  • Единственное вложение, которое действительно поддерживает средство просмотра по умолчанию, - это <iframe> , где я не могу представить, что эти прослушиватели событий должны вызывать какие-либо проблемы. [1]
  • Это никак не влияет на FirefoxPrintService , поскольку он не регистрирует никаких событий. Следовательно, попытка «исправить» это в PDFPrintService , таким образом, сделает различные интерфейсы PDFPrintServiceFactory "несбалансированными".
  • В window регистрируется ряд событий web/pdf_print_service.js , и я думаю, что вам нужно зарегистрировать их сразу после загрузки, чтобы не пропустить никаких событий и / или не быть первым обработчиком событий. Следовательно, удаление этих прослушивателей событий может впоследствии привести к неожиданному поведению.

[1] Также обратите внимание на http://mozilla.github.io/pdf.js/getting_started/#introduction (выделено мной):

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

@Snuffleupagus Я не могу

Для справки: ngx-extended-pdf-viewer основывается на pdf.js. Он добавляет 62 модификации к основным файлам pdf.js. Это также добавляет много дополнительных преимуществ, особенно по сравнению с подходом iFrame. В настоящее время снятие шкуры ограничено. Насколько я понимаю, им пользуется почти каждый пользователь. Расширенный скиннинг (например, Material Design и Bootstrap4) стоит на первом месте в списке желаний пользователей, так что он скоро появится.

Собирая все вместе, я удивлен, что вы так часто делаете упор на «перекрашивать или строить».

Я не могу избавиться от впечатления, что вы не одобряете проект ngx-extended-pdf-viewer.

Честно говоря, я даже не знаю, что такое проект "ngx-extended-pdf-viewer", и у меня не будет времени разобраться в этом сейчас, когда Рождество не за горами, поэтому у меня, очевидно, нет мнения по этому поводу. :-)


Вообще говоря, не выделять какой-либо конкретный проект: причина, по которой средство просмотра по умолчанию не следует использовать как есть, заключается в том, чтобы избежать ошибочного принятия пользовательских приложений за встроенное средство просмотра PDF в Firefox в силу того, что они выглядят более или менее идентичен многим пользователям.

@Snuffleupagus Спасибо! Это очень хорошая причина, с которой я могу работать. Я посмотрю, что я могу сделать, чтобы "моя" встроенная программа просмотра выглядела иначе. В большинстве случаев он будет выглядеть иначе просто потому, что это не программа для просмотра на всю страницу, но, конечно, я не хочу видеть свои ошибки в вашем трекере ошибок.

Я могу предложить следующее: если кто-то отправляет отчет об ошибке и упоминает «Angular», просто отправьте мне копию.

С наилучшими пожеланиями и счастливого Рождества
Стефан

Это очень мило с вашей стороны, спасибо! В общем, мы упоминаем о скиннинге, потому что мы видели ошибки в пользовательских развертываниях PDF.js, о которых здесь сообщают относительно часто, потому что пользователи думали, что имеют дело с официальной программой просмотра, когда на самом деле они смотрели на незакрашенную копию программы просмотра по умолчанию. Чтобы избежать этого, мы обычно упоминаем эту строку, но в данном случае это было просто, чтобы показать, что расширение PDF.js, как вы делаете, на самом деле нормально / рекомендуется, так что не беспокойтесь об этом!

Если вы обнаружите проблемы в PDF.js, пожалуйста, всегда сообщайте о них. Мы уже исправили некоторые проблемы, основанные на ваших проблемах / комментариях, так что это очень полезно.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги