Pdf.js: تسرب الذاكرة: بعض الأحداث ليست غير مسجلة

تم إنشاؤها على ٥ يوليو ٢٠١٩  ·  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 كومينتر

شكرا لك ، أعتقد أنك على حق. لا أعتقد أنه بالضرورة تسرب للذاكرة ، ولكن يجب إعادة هيكلة هذا الأمر قليلاً بحيث يكون ربط / إلغاء ربط أحداث النافذة في مكان واحد فقط.

يبدو أن الأمور ليست بهذه السهولة ، على الرغم من أنني لا أعرف السبب حتى الآن:

  • يتم تسجيل مستمع keydown عند تحميل البرنامج النصي viewer.js ، بغض النظر عما إذا كان هناك ملف PDF أم لا.
  • لقد أضفت removeEventListener كما اقترحت. لدهشتي ، لا تفعل CMD + P أي شيء (باستثناء إبراز قائمة "تعديل" لجزء من الثانية). ربما هذه مشكلة OSX. نظريتي هي أن تسجيل حدث "keydown" يقتل ارتباط المفتاح القياسي تلقائيًا. إذا كان هذا صحيحًا ، فيمكننا ببساطة إعادة ربطه بـ window.print() .

راجع للشغل ، فيما يلي تغييرات كود المصدر الخاصة بي: https://github.com/stephanrauh/ngx-extended-pdf-viewer/commit/6f47d1bd7f790fa47872c11031fefae4e24e283e#diff -ff2d4af1f0673e3ea448a4b444ece1da

نسيان آخر مشاركة لي - لقد تمكنت من تشغيل كل شيء. من الممكن استعادة الوظائف القياسية بعد إزالة pdf.js من DOM. انظر أيضًا إلى # 10948 ، وهو عرض جانبي غير متوقع أربكني بالأمس.

في طلب السحب رقم 11380 ، أصبح اثنان من مستمعي الأحداث الثلاثة المسجلين غير مسجلين عند إعادة التعيين. يبقى فقط مستمع حدث keydown الخاص بهذه المشكلة.

في طلب السحب رقم 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-extension-pdf-viewer. هل هذا صحيح؟ إذا كان الأمر كذلك لماذا؟

فقط للتسجيل: ngx-extended-pdf-viewer يبني على pdf.js. يضيف 62 تعديلاً لملفات pdf.js الأساسية. كما أنه يضيف الكثير من القيمة الإضافية ، خاصةً بالمقارنة مع نهج iFrame. حاليا ، هناك سلخ محدود. بقدر ما أرى ، يستخدمه كل مستخدم تقريبًا. يتصدر الجلد المتقدم (مثل Material Design و Bootstrap4) قائمة رغبات المستخدمين ، لذا سيأتي قريبًا.

بتجميع كل ذلك معًا ، أنا مندهش من أنك تشدد على جزء "إعادة الجلد أو البناء" كثيرًا.

لا يمكنني التهرب من الانطباع الذي لا توافق عليه بشأن مشروع ngx-extension-pdf-viewer.

بصراحة ، أنا لا أعرف حتى ما هو مشروع "ngx-extension-pdf-viewer" ، ولن يكون لدي الوقت لمعرفة ذلك الآن مع اقتراب عيد الميلاد ، ومن ثم فمن الواضح أنني لا أملك رأيًا بشأنه :-)


بشكل عام ، عدم إفراد أي مشروع معين: السبب في عدم استخدام العارض الافتراضي كما هو ، هو تجنب خطأ التطبيقات المخصصة في عارض PDF المدمج في Firefox بحكم البحث أكثر أو أقل مطابق للعديد من المستخدمين.

تضمين التغريدة هذا سبب وجيه للغاية ، وهو شيء يمكنني العمل معه. سأرى ما يمكنني فعله لجعل العارض "الخاص بي" يبدو مختلفًا. في معظم الحالات ، سيبدو الأمر مختلفًا ببساطة لأنه ليس عارض صفحة كاملة ، لكن بالطبع ، لا أريد رؤية الأخطاء في متتبع الأخطاء.

ما يمكنني تقديمه هو هذا: إذا قدم شخص ما تقريرًا بالخطأ ، وذكر "Angular" ، فما عليك سوى CC me.

مع أطيب التحيات وعيد ميلاد سعيد
ستيفان

هذا لطف منك شكرا! بشكل عام ، نذكر السلخ لأننا رأينا أخطاء في عمليات النشر المخصصة لملف PDF.js يتم الإبلاغ عنها هنا كثيرًا نسبيًا لأن المستخدمين اعتقدوا أنهم يتعاملون مع العارض الرسمي عندما كانوا في الواقع يبحثون عن نسخة غير مألوفة من العارض الافتراضي. لتجنب ذلك ، عادة ما نذكر هذا السطر ، ولكن في هذه الحالة كان الغرض فقط من إظهار أن توسيع PDF.js كما تفعل هو في الواقع مقبول / موصى به ، لذلك لا تقلق بشأن ذلك!

إذا وجدت مشكلات في PDF.js ، فلا تتردد دائمًا في الإبلاغ عنها دائمًا. لقد أصلحنا بالفعل بعض المشكلات بناءً على مشاكلك / تعليقاتك ، وهذا مفيد للغاية.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات