मैंने स्क्रैच से वेब ब्राउज़र बनाने में कुछ प्रयास करने का निर्णय लिया। आधुनिक वेब ब्राउज़रों के सामान्य कार्य, वास्तुकला और विशेषताएं क्या हैं जिन्हें मुझे शुरू करने से पहले पता होना चाहिए?
किसी भी सिफारिश अत्यधिक सराहना की है!
मैंने स्क्रैच से वेब ब्राउज़र बनाने में कुछ प्रयास करने का निर्णय लिया। आधुनिक वेब ब्राउज़रों के सामान्य कार्य, वास्तुकला और विशेषताएं क्या हैं जिन्हें मुझे शुरू करने से पहले पता होना चाहिए?
किसी भी सिफारिश अत्यधिक सराहना की है!
जवाबों:
अच्छी तरह से इसे टुकड़ों में तोड़ दें। वेब ब्राउज़र क्या है? यह क्या करता है? यह:
और यह मूल रूप से एक वेब ब्राउज़र संक्षेप में है। अब इनमें से कुछ कार्य अविश्वसनीय रूप से जटिल हैं। यहां तक कि आसान लगने वाले भी कठिन हो सकते हैं। बाहरी सामग्री लाना। आपको उपयोग के मामलों से निपटने की आवश्यकता है जैसे:
कारण यह है कि मैं और अन्य हमारी भौंहों को बढ़ा रहे हैं, रेंडरिंग इंजन कठिन है (और, जैसा कि किसी ने उल्लेख किया है, मानव वर्ष उनके विकास में चले गए हैं)। प्रमुख रेंडरिंग इंजन निम्नलिखित हैं:
शीर्ष तीन को आज इस्तेमाल किए जाने वाले प्रमुख रेंडरिंग इंजनों में से एक माना जाता है।
जावास्क्रिप्ट इंजन भी कठिन हैं। इनमें से कई ऐसे हैं जो विशेष रेंडरिंग इंजन से बंधे होते हैं:
और निश्चित रूप से सभी उपयोगकर्ता इंटरफ़ेस सामान हैं: पृष्ठों के बीच नेविगेशन, पृष्ठ का इतिहास, अस्थायी फ़ाइलों को साफ़ करना, URL में टाइप करना, URL को स्वतः पूर्ण करना आदि।
वह बहुत काम की चीज है।
वास्तव में एक दिलचस्प परियोजना की तरह लगता है, लेकिन इसके लिए आपको एक बहुत बड़ा प्रयास करना होगा।
यह कोई आसान बात नहीं है, लेकिन अकादमिक दृष्टिकोण से, आप इससे बहुत कुछ सीख सकते हैं ।
कुछ संसाधन जो आप देख सकते हैं:
लेकिन इसे यथार्थवादी दृष्टिकोण से देखने पर, इसे खरोंच से कोड करने के लिए किए गए भारी प्रयास ने मुझे इस हास्य की याद दिला दी:
(स्रोत: geekherocomic.com )
शुभ लाभ :-)
अधिकांश आधुनिक वेब ब्राउज़र विशाल जानवर हैं, और संभवतः काफी खराब तरीके से डिज़ाइन किए गए हैं क्योंकि वे (और स्वयं वेब) एक अजीब तरीके से विकसित हुए हैं।
आपको पहले अपनी परियोजना के लक्ष्यों (और आप जो हासिल करने की उम्मीद करते हैं) को बहुत स्पष्ट रूप से शुरू करने की आवश्यकता है । क्या यह ऐसा कुछ है जो आप केवल मनोरंजन के लिए कर रहे हैं, या क्या आप अन्य लोगों से अपने ब्राउज़र का उपयोग करने की उम्मीद करते हैं? यदि आप दूसरों से इसका उपयोग करने की अपेक्षा करते हैं, तो उनके लिए प्रोत्साहन क्या होगा? यह उम्मीद करना अवास्तविक है कि आप खरोंच से एक नया ब्राउज़र विकसित करेंगे, जिसे हर कोई क्रोम, सफारी, फ़ायरफ़ॉक्स, IE, ओपेरा, आदि के प्रतिस्थापन के रूप में उपयोग कर सकेगा। उन सभी परियोजनाओं में 10-15 साल का हेड स्टार्ट है। आप, और जब तक आप उन्हें पकड़ लेते हैं, तब तक वे आपसे 10-15 साल आगे होंगे। इसके अलावा, उनके पीछे बहुत अधिक मैन पावर है, और इसलिए यदि आप चाहते हैं कि आपकी परियोजना सफल हो, तो आपको किसी बिंदु पर उस मैन पावर की आवश्यकता होगी।
यही कारण है कि कई संसाधनों वाली बड़ी कंपनियों Apple और Google ने खरोंच से शुरुआत नहीं की। माइक्रोसॉफ्ट भी खरोंच से शुरू नहीं हुआ। मूल IE मोज़ेक पर आधारित था। केवल आज भी लगभग महत्वपूर्ण ब्राउज़र जो कि स्क्रैच से शुरू किए गए थे , ओपेरा , कॉनकेर और लिंक्स हैं, जो दुर्भाग्यवश सभी का बाजार में हिस्सा है। आइए फिलहाल लिंक्स के बारे में भूल जाएं, क्योंकि यह एक पाठ-केवल ब्राउज़र है और संभवतः एकमात्र कारण है जो अभी भी चारों ओर है क्योंकि यह इस विशिष्ट जगह पर कार्य करता है। ओपेरा यकीनन अब तक किए गए सबसे अच्छे ब्राउज़रों में से एक है, और फिर भी इसकी कभी भी एक महान बाजार हिस्सेदारी नहीं थी, इसलिए याद रखें कि सफलता और नवीनता एक ही बात नहीं है। KHTML कॉन्करर के पीछे का इंजन है, जो कभी भी स्वयं बहुत सफल नहीं हुआ, लेकिन वेबकिट का आधार है जो कि Apple और Google दोनों का उपयोग करता है। मुझे लगता है कि कोई निश्चित रूप से तर्क दे सकता है कि अगर KHTML कभी नहीं बनाया गया था, तो न तो सफारी या क्रोम मौजूद होगा। दिलचस्प रूप से पर्याप्त है, KHTML और ओपेरा दोनों बड़े पैमाने पर नार्वे के प्रोग्रामर द्वारा ओस्लो में एक ही इमारत में काम कर रहे थे।
आपको एक वेब ब्राउज़र बनाने की ज़रूरत है जैसे ऑपरेटिंग सिस्टम बनाना, क्योंकि यह अनिवार्य रूप से एक ब्राउज़र है - यह वेब ऐप चलाने के लिए एक ऑपरेटिंग सिस्टम है। और एक ऑपरेटिंग सिस्टम की तरह, एक वेब ब्राउज़र कई घटकों के साथ सॉफ्टवेयर का एक बहुत जटिल टुकड़ा है। बेशक, लोग खरोंच से नए ऑपरेटिंग सिस्टम बनाने में सफल रहे हैं। लिनस टोरवाल्ड्स के दिमाग में आता है। उसने लिनक्स बनाया, जो अब तक के सबसे सफल ऑपरेटिंग सिस्टमों में से एक है।
बेशक, आपको एक अतिरिक्त चुनौती का सामना करना पड़ता है, जो एक नए सफल ओएस के निर्माण की तुलना में एक नए सफल ब्राउज़र का निर्माण कठिन बनाता है । ब्राउज़रों से यह उम्मीद की जाती है कि वे वेब पर सभी विरासत कोड को अस्थायी रूप से चलाएं। अब मान लीजिए कि लिनुस टॉर्वाल्ड्स को बताया गया था कि उनका नया ओएस तब तक कोई फर्क नहीं पड़ेगा जब तक कि वह यूनिक्स या कुछ मौजूदा ओएस के साथ पूरी तरह से पीछे नहीं हो जाता। मुझे संदेह है कि उसने परेशान किया होगा, और लिनक्स शायद आज मौजूद नहीं होगा। वास्तविक रूप से, निश्चित रूप से, एकमात्र कारण लिनक्स लोकप्रिय हो गया था क्योंकि यह अच्छी तरह से डिजाइन किया गया था और जीएनयू परियोजना लिनक्स के लिए मौजूदा कोड की भारी मात्रा में पोर्ट करने के लिए उपकरण बनाने में सक्षम थी। लिनक्स के लिए GNU के वैचारिक समर्थन के बिना, यह कभी मौका नहीं होता।
तो यह मानते हुए कि आप वास्तव में महत्वाकांक्षी (या मूर्ख) हैं, एक नया सफल ब्राउज़र बनाने की कोशिश करने के लिए पर्याप्त है, जिस चीज पर आपको ध्यान देना चाहिए वह है वास्तुकला और डिजाइन । खरोंच से एक नया ब्राउज़र बनाने का कोई व्यावहारिक कारण नहीं है जब तक कि आप सुनिश्चित न हों कि आप मौजूदा ब्राउज़र के डिज़ाइन पर किसी तरह से सुधार कर सकते हैं। इसका मतलब है कि आपको अपने आप को WebKit और Gecko के कोड के साथ पर्याप्त रूप से परिचित करने की आवश्यकता है जो उन्होंने किए गए डिज़ाइन निर्णयों को समझने के लिए किया है, लेकिन आपको उनके डिज़ाइन को कॉपी करने का प्रयास नहीं करना चाहिए क्योंकि अन्यथा आप केवल उनके कोड का उपयोग कर सकते हैं।
मेरे व्यक्तिगत विचार (पर्याप्त शोध किए बिना) यह है कि आज के ब्राउज़र पर्याप्त रूप से मॉड्यूलर नहीं हैं। अगर मैं एक नया ब्राउज़र बनाने जा रहा था, तो मुझे इन-आउट (जैसे एक जावास्क्रिप्ट इंजन को दूसरे के साथ बदलना) के रूप में चीजों को स्वैप करना आसान बनाने का एक तरीका मिलेगा, और उपयोगकर्ता को वर्तमान ब्राउज़रों के साथ की तुलना में बहुत अधिक नियंत्रण देगा। । आधुनिक ब्राउज़रों और वेब डिजाइनरों ने उपयोगकर्ता से लगभग सभी नियंत्रण ले लिया है। मैं क्यों नहीं कर सकता, उपयोगकर्ता, वेब ब्राउज़र को बताएं कि मैं कैसे चाहता हूं कि वह मेरी मशीन पर प्रदर्शित होने वाली सामग्री को प्रस्तुत करे? मूल एचटीएमएल ने केवल यह सुनिश्चित करने के लिए दिशा-निर्देश दिए कि सामग्री को कैसे तैयार किया जाए, और समय के साथ, नए मानक अधिक से अधिक हठधर्मिता बन गए हैं, इस बिंदु पर जहां उपयोगकर्ता अब वेब डिजाइनर की कुल दया पर है। लिनक्स की अपील यह थी कि यह उपयोगकर्ता को वापस नियंत्रण दे, और वह '
दूसरी बात मैं शोध में समय बिताऊंगा, अगर मैं आप थे, तो सिस्टम डिजाइन सिद्धांतों का संचालन कर रहा हूं। एक अच्छा ब्राउज़र डिजाइन करना, कम से कम सिद्धांत में होना चाहिए, एक अच्छा ओएस डिजाइन करने के लिए समान सिद्धांतों की आवश्यकता होती है - विशेष रूप से समवर्ती प्रक्रियाओं, सुरक्षा कार्यों आदि के संबंध में।
अंत में, बहुत सारे और बहुत सारे शोध करने के बाद, यह वह जगह है जहां आपको कोडिंग शुरू करना चाहिए मुझे लगता है:
फिर से इंजीनियर मोज़ेक, लेकिन अपने खुद के डिजाइन विचारों के साथ। यह वही है जो मैं आपको बताऊंगा कि क्या आप इसे केवल मनोरंजन के लिए या अपने स्वयं के शैक्षिक लाभ के लिए कर रहे हैं। मूल HTML 1.0 और HTML 2.0 चश्मा, साथ ही HTTP 1.1 चश्मा और वर्तमान URI चश्मा पढ़ें, और सुनिश्चित करें कि आपका ब्राउज़र उन सभी चश्मे का पालन करता है। आप निश्चित रूप से मौजूदा सॉफ़्टवेयर डाउनलोड कर सकते हैं जो पहले से ही परिवहन प्रोटोकॉल, यूआरआई सम्मेलनों आदि को संभालता है, लेकिन अगर आप अपने ब्राउज़र को डिज़ाइन करने के बारे में गंभीर हैं, तो मुझे लगता है कि इन चीजों को खरोंच से भी करना एक अच्छा व्यायाम है, इसलिए आप प्राप्त करें सभी पहेली टुकड़े एक साथ कैसे फिट होते हैं, इसकी अच्छी समझ है। चरण 0 के अंत में, आपके पास एक ब्राउज़र होना चाहिए जो कि 90 के दशक में अत्याधुनिक होने की तुलना में कम से कम तुलनीय हो। यह एक अच्छा पहला मील का पत्थर है। और आप वास्तव में मूल मोज़ेक को डाउनलोड कर सकते हैंftp://ftp.ncsa.uiuc.edu/Mosaic/ और देखें कि यह आपके ब्राउज़र से कैसे तुलना करता है। यह देखना भी एक अच्छा व्यायाम है कि मोज़ेक जैसे प्राचीन ब्राउज़र में वर्तमान वेबसाइटें कैसे प्रस्तुत करती हैं।
अपने ब्राउज़र में DOM के लिए समर्थन जोड़ें। W3C DOM लेवल 1 और लेवल 2 पर पहले ध्यान दें, क्योंकि बहुत सारे वर्तमान ब्राउज़र पूरी तरह से समर्थन करते हैं। फिर लेवल 3 और लेवल 4 को देखें। DOM वेब प्रोग्रामिंग के लिए बेहद मौलिक है, और इसलिए यदि आप वास्तव में एक आधुनिक वेब ब्राउज़र बनाने जा रहे हैं, तो इसे पूरा डिज़ाइन इस पर ध्यान देना होगा। चूँकि आप C # में ब्राउज़र लिख रहे हैं, आप इस बात पर ध्यान देना चाहते हैं कि आप अपने लाभ के लिए मौजूदा .NET ऑब्जेक्ट मॉडल का कैसे लाभ उठा सकते हैं।
मौजूदा स्क्रिप्टिंग इंजनों को देखें और देखें कि क्या आप उन्हें अपने प्रोजेक्ट में पोर्ट कर सकते हैं। मैं आपको अपने स्वयं के जावास्क्रिप्ट दुभाषिया को लिखने से हतोत्साहित करूँगा, न केवल इसलिए कि यह अपने आप में एक बहुत बड़ी परियोजना है, बल्कि इसलिए कि पहले से ही जेएस संकलक (जैसे वी 8) को अनुकूलित करने में बहुत काम किया गया है। इसलिए जब तक आप संकलक डिजाइन में एक गुरु नहीं होते हैं, तब तक आपके हाथ से निर्मित जेएस दुभाषिया संभवतः पहले से ही वहां से हीन हो जाएगा, भले ही वह EMCAScript चश्मे का त्रुटिपूर्ण अनुसरण करता हो। फिर से, मुझे लगता है कि स्क्रिप्टिंग इंजन कुछ ऐसा होना चाहिए जो वास्तविक ब्राउज़र से किसी भी तरह पूरी तरह से अलग मॉड्यूल हो, इसलिए मुझे लगता है कि यह एक फ्रेमवर्क बनाने के लिए बहुत उपयोगी होगा जो आपको स्क्रिप्टिंग इंजन बनाने के बजाय किसी भी स्क्रिप्टिंग इंजन को स्थानापन्न करने की अनुमति देता है। यह केवल आपके ब्राउज़र के साथ काम करता है।
उत्तरी अमेरिका (Google, Facebook, YouTube, Twitter, Wikipedia, Amazon, लोकप्रिय ब्लॉगिंग प्लेटफार्मों, आदि) में शीर्ष 10-20 वेबसाइटों के लिए HTML / CSS / JS स्रोत कोड देखें और इन साइटों के साथ अच्छी तरह से काम करने के लिए अपने ब्राउज़र को इंजीनियर करें। । यह एक ब्राउज़र बनाने की तुलना में कुछ हद तक अधिक समस्याग्रस्त समस्या है जो सभी मौजूदा मानकों का पालन करती है (कुछ जो वर्तमान ब्राउज़र अभी भी पूरी तरह से नहीं करते हैं) बहुत कम बनाने वाला ब्राउज़र है जो वेब पर सभी वेब साइटों को सही ढंग से प्रस्तुत करता है (कोई नहीं कर सकता) वो करें)। लोग शिकायत करेंगे कि आपका ब्राउज़र मानकों को तोड़ता है और आगे बढ़ता है, लेकिन यह इतनी बड़ी समस्या नहीं है जितना कि लोग शिकायत करते हैं कि वे आपके ब्राउज़र से Google या फेसबुक का उपयोग नहीं कर सकते हैं। मैं किसी भी ब्राउज़र के बारे में नहीं सोच सकता, जिसने अपनी पहली रिलीज़ पर सभी (या यहां तक कि सबसे) मानकों का सही ढंग से पालन किया हो, इसलिए मैं कहता हूं कि कोशिश करना भी परेशान न करें।
आप अपने स्वयं के प्रतिपादन इंजन लिखने के रूप में मतलब है?
मैं केवल सौभाग्य कह सकता हूं। कई ब्राउज़रों की वर्तमान पीढ़ी में कई आदमी वर्ष चले गए हैं, यदि आप उनमें से किसी से भी बेहतर करना चाहते हैं तो आपको कुछ गंभीर कौशल की आवश्यकता होगी। यदि आपको यह पूछना है कि कहां से शुरू करना है, तो आपके पास शायद कुछ वर्षों से अधिक का अध्ययन है, इससे पहले कि यह इस तरह के कार्य का प्रयास करने के लिए समझ में आए।
कहा कि, यहाँ कुछ (स्पष्ट) संकेत हैं:
यहाँ नीचे संपादित करें
मेरा मतलब यह नहीं था कि या तो प्रेरित करने या डेमोस्ट्रेट करने के लिए, बस आपको यह दिखाने का प्रयास किया जाएगा कि ब्राउज़र वास्तव में एक बड़ी परियोजना है और वास्तव में बड़ी परियोजनाओं के लिए बहुत सारे विचार की आवश्यकता होती है। कुंद ईमानदारी हास्य के साथ छिड़का।
मैं अपने जीवन के दो तिहाई से अधिक के लिए प्रोग्रामिंग कर रहा हूं और मुझे लगता है कि मैं एक अच्छा सभ्य प्रोग्रामर हूं, लेकिन यह सोचना मेरे लिए मूर्खतापूर्ण होगा कि मैं स्क्रैच से एक सभ्य वेब ब्राउज़र लिखने का आधा मौका दूंगा ।
बेशक, अगर यह वही है जो आप करना चाहते हैं, तो मेरी टिप्पणी को अपने तरीके से खड़े न होने दें। आप शायद Internet Explorer से बेहतर कर सकते हैं।
यह एक बहुत ही महत्वाकांक्षी परियोजना है (विशेष रूप से एक एकल डेवलपर के लिए), लेकिन किसी दिन मुझे कुछ करना पसंद होगा - आप इसके बारे में बहुत कुछ सीख सकते हैं।
मुझे इस बारे में बहुत कुछ पता नहीं है कि प्रोटोकॉल कैसे काम करते हैं (कुछ ऐसा जो आपको निश्चित रूप से अनुसंधान करने की आवश्यकता है) या एक ब्राउज़र में क्या होता है, लेकिन शुरू करने के लिए एक शानदार जगह खुले स्रोत के ब्राउज़रों का स्रोत होगा, मुख्य रूप से क्रोम फ़ायरफ़ॉक्स। क्रोम एक विशेष रूप से अच्छी परियोजना है क्योंकि वे केवल वही करते हैं जो मैं आपसे शुरू करने की उम्मीद करूंगा: क्रोम और ब्राउज़र का बैकएंड। पहले एक रेंडरिंग इंजन बनाना भूल जाएँ - वेबकिट या गक्को का उपयोग करें।
जैसा कि बाकी सभी ने पहले ही कहा है, एक वेब ब्राउज़र एक बहुत बड़ी परियोजना है। आपको tcp / ip & sockets के बारे में चिंता करने की ज़रूरत है, html रेंडर करना, css का उपयोग करना, DOM मॉडल बनाना, जावास्क्रिप्ट निष्पादित करना, विकृत मार्कअप और कोड से निपटना, और सभी प्रकार की फ़ाइलों को संभालने से पहले आप उन सभी चीजों के बारे में भी सोच सकते हैं जिनसे लोग उम्मीद करते हैं। एक ब्राउज़र (यानी बुकमार्क, इतिहास, निजी ब्राउज़िंग, सुरक्षा, आदि) यह एक बहुत बड़ी परियोजना है।
कहा जा रहा है, यह किया जा सकता है। मेरा सुझाव फ़ायरफ़ॉक्स के स्रोत को देखना होगा। मुझे पता है कि आपने कहा था कि आप एक ब्राउज़र को स्क्रैच से बनाना चाहते हैं, लेकिन पहले एक ओपन-सोर्स प्रोजेक्ट से सीखना बहुत मददगार होगा ।
मैं फ़ायरफ़ॉक्स स्रोत को डाउनलोड करूँगा, और धीरे-धीरे इसे नीचे उतारूंगा। दूसरे शब्दों में, मैं स्रोत ले लूंगा और सभी बुकमार्किंग कार्यक्षमता को हटा दूंगा। फिर, मैं addons को संभालने की क्षमता को हटा दूँगा। फिर, मैं फ़ाइलों को सहेजने के बारे में सभी कोड हटा दूँगा। मैं इस प्रक्रिया को तब तक जारी रखूंगा जब तक मुझे एक बहुत ही मूल वेब ब्राउज़र नहीं मिल जाता। मैं उस कोड को देखूंगा।
फिर, मैं अपना खुद का निर्माण शुरू करूँगा। मैं अलग-अलग फ़ायरफ़ॉक्स लेने के बाद जो ज्ञान प्राप्त करता हूं, उसे ले लेता हूं और उसे एक नए ब्राउज़र के निर्माण में लगा देता हूं।
एक भाग्य का बहुत आप के लिए!
exe
फ़ाइल मिलती है , जिसे स्थापित करने पर, मुझे बहुत सारी dll
फ़ाइलों के साथ एक स्रोत फ़ोल्डर मिलता है । मैंने उस वास्तविक कोड का अध्ययन कैसे किया जो यह किया था, और तर्क जो इसके पीछे चल रहा है?
उडनेस के पास अब "बिल्डिंग ए वेब ब्राउज़र" नामक एक कोर्स है - https://www.udacity.com/course/programming-languages.cs262
आप अच्छी तरह से गठित और वैध एक्सएचटीएमएल के साथ शुरू कर सकते हैं, जो आपके जीवन के वास्तविक "जीवन" में आने वाले टैग सूप से आसान होना चाहिए।
तब आपको वेब से अपनी आवश्यकताओं के लिए वास्तविक HTML को मोड़ने का एक तरीका खोजना होगा।
लेकिन अपने आप को बच्चा न करें: एक ब्राउज़र एक छोटी परियोजना नहीं है।
बहुत महत्वाकांक्षी परियोजना है, लेकिन एक डेवलपर अकेले ऐसा नहीं कर सकता है जिसे आपको टीम (प्रोजेक्ट मैनेजर, टेस्टर ...) की आवश्यकता है और हो सकता है कि आप भाषा के अपने चयन की समीक्षा करें c # केवल खिड़कियों पर काम करें (मैं लिनक्स पर मोनो जानता हूं लेकिन यह नहीं है वही) वैसे भी मैं आपको शुभकामनाएं देता हूं और मुझे आपके ब्राउज़र का उपयोग करने में खुशी होगी: डी
आपके हाथ में वास्तव में बहुत सारा खाली समय है, है ना? AFAIK, अधिकांश ब्राउज़र C ++ में लिखे गए थे, सभी उपयोगकर्ताओं के पास उनके कंप्यूटर पर .NET फ्रेमवर्क स्थापित नहीं होता है और यदि वे ऐसा करते हैं तो हो सकता है कि आपके लिए आवश्यक संस्करण न हो।
इसमें आपको कई साल लग सकते हैं लेकिन फिर भी, वहाँ कई ओपन सोर्स ब्राउज़र हैं, फ़ायरफ़ॉक्स, गूगल क्रोम .. आदि, आप कोड पर एक नज़र डालकर शुरू कर सकते हैं, उस के साथ सौभाग्य :)