c# - كيف تبدأ في بناء متصفح ويب؟



browser (8)

... ثم البدء في القلق بشأن الأمن

(يجب النظر بشكل عام إلى المخاوف غير الوظيفية والعبور المتقاطع في المقدمة على الرغم من :))

https://ffff65535.com

قررت بذل بعض الجهد في بناء متصفح ويب من الصفر. ما هي الوظائف المشتركة ، والهندسة المعمارية ، وميزات متصفحات الويب الحديثة التي يجب أن أعرفها قبل البدء؟

أي توصيات هي محل تقدير كبير!


إنه مشروع طموح بجنون (خاصة بالنسبة لمطور واحد) ولكنه شيء أحب أن أفعله يوما ما - يمكنك تعلم الكثير منه.

لا أعرف الكثير عن كيفية عمل البروتوكولات (شيء تحتاجه بالتأكيد للبحث) أو الكثير حول ما يحدث في المتصفح ، لكن مكانًا رائعًا للبدء به سيكون مصدر المتصفحات مفتوحة المصدر ، لا سيما Chrome و ثعلب النار. يُعتبر Chrome مشروعًا جيدًا للنظر إليه نظرًا لأنه لا يفعل سوى ما أتوقع أن تبدأ به: الكروم والخلفية للمتصفح. ننسى إنشاء محرك التقديم في البداية - استخدام Webkit أو Gekko.


حسنا كسرها الى قطع. ما هو متصفح الويب؟ ماذا تعمل، أو ماذا تفعل؟ قيل:

  • جلب محتوى خارجي. لذلك تحتاج إلى مكتبة HTTP أو (غير مستحسن) كتابة هذا بنفسك. هناك الكثير من التعقيد / الدقة في بروتوكول HTTP مثل معالجة رؤوس انتهاء الصلاحية ، والإصدارات المختلفة (على الرغم من أنها في الغالب 1.1 هذه الأيام) ، إلخ ؛
  • يتعامل مع أنواع مختلفة من المحتوى. يوجد سجل Windos لهذا النوع من الأشياء التي يمكنك على الظهر. أتحدث عن تفسير المحتوى استنادًا إلى نوع MIME هنا ؛
  • يوزع HTML و XML : لإنشاء DOM (نموذج كائن المستند) ؛
  • يوزع ويطبق CSS : يستلزم هذا فهم جميع الخصائص ، وكل وحدات القياس وكل الطرق التي يمكن تحديد القيم بها (مثل "الحدود: 1px solid black" مقابل خصائص عرض الحدود المنفصلة ، الخ) ؛
  • ينفذ النموذج البصري W3C (وهذا هو كيكر الحقيقي) ؛ و
  • يحتوي على محرك Javascript .

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

  • كم عدد الاتصالات المتزامنة لاستخدام؟
  • خطأ في الإبلاغ للمستخدم.
  • وكلاء.
  • خيارات المستخدم
  • إلخ

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

  • ترايدنت: وضعت من قبل مايكروسوفت لإنترنت إكسبلورر.
  • أبو بريص: يستخدم في فايرفوكس.
  • Webkit: مستخدمة في Safari و Chrome 0-27؛
  • KHTML: يُستخدم في بيئة سطح المكتب كدي. Webkit forked from KHTML since years ago؛
  • Elektra: تستخدم في الأوبرا 4-6.
  • المعزوفة: تستخدم في أوبرا 7-12.
  • Blink: يُستخدم في Chrome 28+ ، أو Opera 15+ ، أو webkit fork؛

يجب النظر إلى المراكز الثلاثة الأولى في المحركات الرئيسية المستخدمة اليوم.

محركات جافا سكريبت هي أيضا صعبة. هناك العديد من تلك التي تميل إلى أن تكون مرتبطة بمحرك تقديم معين:

  • SpiderMonkey: تستخدم في Gecko / Firefox ؛
  • TraceMonkey: سيتم استبدال SpiderMonkey في Firefox 3.1 ويقدم تجميع JIT (فقط في الوقت المناسب)؛
  • KJS: يُستخدم بواسطة Konqueror ، مرتبط بـ KHTML ؛
  • JScript: محرك Javascript من Trident ، المستخدم في Internet Explorer ؛
  • JavascriptCore: يستخدم في Webkit بواسطة متصفح Safari؛
  • SquirrelFish: سيتم استخدامه في Webkit ويضيف JIT مثل TraceMonkey؛
  • الإصدار 8: محرك Google Javascript المستخدم في Chrome و Opera.
  • الأوبرا (12.X وأقل) تستخدم أيضا الخاصة بها.

وبالطبع توجد جميع عناصر واجهة المستخدم: التنقل بين الصفحات ، وسجل الصفحات ، ومسح الملفات المؤقتة ، وكتابة عنوان URL ، وإكمال عناوين URL تلقائيًا وما إلى ذلك.

هذا كثير من العمل.


كما قال الجميع من قبل ، فإن متصفح الويب هو مشروع ضخم. يجب أن تقلق بشأن tcp / ip & sockets ، مما يؤدي إلى عرض html ، باستخدام css ، وإنشاء نموذج DOM ، وتنفيذ javascript ، والتعامل مع التعليمة البرمجية المشفرة والرمز ، والتعامل مع جميع أنواع الملفات قبل أن تتمكن حتى من التفكير في كل الأشياء التي يتوقعها الناس من متصفح (مثل الإشارات المرجعية ، التاريخ ، التصفح الخاص ، الأمن ، إلخ) إنه مشروع ضخم.

ومع ذلك ، يمكن القيام به. قد يكون اقتراحي هو إلقاء نظرة على مصدر Firefox. أعلم أنك قلت أنك تريد إنشاء متصفح من الصفر ، ولكن سيكون من المفيد جدًا التعلم من مشروع مفتوح المصدر أولاً.

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

ثم ، أبدأ في بناء بلدي. كنت آخذ المعرفة التي اكتسبتها من تفكيك Firefox ، وسأضعها في بناء متصفح جديد.

حظًا كبيرًا لك!


لديك حقا الكثير من وقت الفراغ في يدك ، أليس كذلك؟ AFAIK ، تم كتابة معظم المتصفحات في C ++ ، وليس كل المستخدمين لديهم إطار .NET مثبتة على أجهزة الكمبيوتر الخاصة بهم ، وإذا فعلوا ذلك قد لا يكون الإصدار الذي تحتاجه.

هذا قد يستغرق سنوات ولكن على أي حال ، هناك العديد من المتصفحات مفتوحة المصدر ، FireFox ، Google Chrome .. إلخ ، يمكنك البدء بإلقاء نظرة على الرمز ، حظًا موفقًا في ذلك :)


مشروع طموح جدا ولكن مطور واحد لا يستطيع القيام بذلك بمفرده فأنت بحاجة إلى فريق (مدير مشروع ، مختبرين ...) وربما يجب عليك مراجعة اختيارك للغة c # يعمل فقط على النوافذ (أعرف أحادية على لينكس ولكن ليس نفسه) على أي حال أتمنى لك حظا سعيدا وسأكون سعيدا لاستخدام المتصفح الخاص بك: د


يبدو وكأنه مشروع مثير للاهتمام ، لكنه يتطلب منك أن تستثمر جهدا هائلا.

ليس الأمر سهلاً ، لكن من وجهة نظر أكاديمية ، يمكنك أن تتعلم الكثير منه.

بعض الموارد التي يمكنك التحقق منها:

ولكن بالنظر إلى ذلك من وجهة نظر واقعية ، ذكرني الجهد الضخم المطلوب لرمزه من الصفر:

http://www.geekherocomic.com/comics/2009-02-25-coding-overkill.png

حظا طيبا وفقك الله :-)


يمكنك البدء باستخدام XHTML جيد التنسيق والصحيح ، والذي يجب أن يكون أسهل من حافظة العلامات التي سيواجهها متصفحك في "الحياة" الحقيقية.

ثم يجب أن تجد طريقة لثني HTML الحقيقي من الويب إلى احتياجاتك.

لكن لا تكره نفسك: إن المتصفح ليس مشروعًا صغيرًا.





browser