مصادر HTML مع موارد محدودة (إدارة الذاكرة الجيدة)

StackOverflow https://stackoverflow.com/questions/960089

  •  12-09-2019
  •  | 
  •  

سؤال

أقوم بإنشاء برنامج Linux في C ++ لجهاز محمول من أجل تقديم ملفات HTML.

المشكلة هي أن الجهاز محدود في ذاكرة الوصول العشوائي، مما يجعل من المستحيل فتح ملفات كبيرة (مع البرامج الفعلية).

حل واحد هو تحميل / تفريغ أجزاء الملف ديناميكيا، لكنني لست متأكدا من كيفية تنفيذ ذلك.

القدرة على التمرير أمر لا بد منه، مع تجربة سلسة إذا كان ذلك ممكنا

أود أن أسمع منك ما هو أفضل نهج لهذه الحالة؟ يمكنك اقتراح خوارزمية أو مشروع مفتوح المصدر إلقاء نظرة على أو مكتبة تدعم ما أحاول القيام به (WebKit؟).

تعديل:أنا أكتب قارئ الكتاب الإلكتروني، لذلك أنا فقط بحاجة إلى تقديم HTML النقي، لا جافا سكريبت، لا CSS، ...

هل كانت مفيدة؟

المحلول

لتكون قادرا على تصفح مستند شجرة (مثل HTML) دون التحميل الكامل، سيتعين عليك تقديم عدد قليل من الافتراضات - مثل الوثيقة كونها شجرة فعلية. لذلك، لا تهتم بالتحقق من العلامات الوثيقة. يتم تصميم علامات إغلاق للاستهلاك البشري على أي حال، ستكون أجهزة الكمبيوتر سعيدة <> جدا.

الخطوة الأولى هي أن نفترض أن الجزء الأول من المستند يمثله الجزء الأول من المستند الخاص بك. هذا يبدو وكأنه طبيب كبير، ولكن مع HTML "الحديث" وبالتأكيد JS هذا لم يعد صحيحا من الناحية الفنية. ومع ذلك، إذا كان بإمكان أي خط من HTML أن يؤثر على أي بكسل، فلن تتمكن ببساطة من تحميل صفحة جزئيا.

لذلك، إذا كان هناك علاقة بسيطة بين وضع ملف HTML وصفحاتها على الشاشة، فإن الخطوة التالية هي تحديد تحليل الحالة في نهاية كل صفحة. سيشمل ذلك بعد ذلك إزاحة ملف واحد، ربما (ولكن ليس بالضرورة) في نهاية الفقرة. أيضا جزء من هذه الحالة هو كومة من العلامات المفتوحة.

لجعل الترقصاع أسهل، إنها ذكية للحفاظ على حالة "حدود الصفحة" هذه لكل صفحة واجهتها حتى الآن. هذا يجعل ترحيل الصفحات سهلة.

الآن، عند تقديم صفحة جديدة، ستمنحك حالة الحدود السابقة حالة التقديم الأولي. تقوم ببساطة بقراءة HTML وعرض عنصر تكنولوجيا المعلومات حسب العنصر حتى تفيض صفحة واحدة. ثم تراجعت قليلا وتحديد حالة حدود الصفحة الجديدة.

التمرير السلس هو في الأساس مسألة تقديم صفحات متاخمة وإظهار X٪ من أول و 100-X٪ من الثانية. بمجرد تنفيذ هذا البت، قد يصبح ذكيا لإنهاء فقرة عند تقديم كل صفحة. سيعطيك هذا أطوال صفحة مختلفة قليلا، لكن ليس عليك التعامل مع الفقرات المعطلة، وهذا بدوره يجعل صفحتك حكية حدودك أصغر قليلا.

نصائح أخرى

ديلو هو أخف متصفح Web Linux Lights الذي أعرفه.

يحرر: إذا كان (أو مكون التقديم الخاص به) لن تفي باحتياجاتك، فقد تجد قائمة ويكيبيديا ومقارنة محركات التخطيط أن تكون مفيدة.

تحرير 2: أظن أن تحميل وإلغاء أجزاء ملف HTML ديناميكيا ستكون صعبة؛ على سبيل المثال، كيف تعرف أن قطعة غير مختارة عشوائيا من الملف ليست في منتصف علامة؟ من المحتمل أنك يجب أن تستخدم شيئا مثل SAX لتحليل الملف في تمثيل متوسط، مما يوفر قطعا منفصلة للتمثيل الوسيطي للتخزين المستمر بحيث لا يستغرق الأمر الكثير من ذاكرة الوصول العشوائي. أو يمكنك تحليل الملف باستخدام SAX لإظهار أي يناسب في ذاكرة الوصول العشوائي مرة واحدة ثم أعد تحليلها كلما كان المستخدم مخطوطا بعيدا جدا. (سوف تدمر ورقة الأنماط وجافا سكريبت هذا النهج؛ قد بعض HTML عادي أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top