Sıfırdan bir web tarayıcısı oluşturmak için biraz çaba harcamaya karar verdim. Başlamadan önce bilmem gereken modern web tarayıcılarının ortak işlevleri, mimarileri ve özellikleri nelerdir?
Herhangi bir öneri çok takdir edilmektedir!
Sıfırdan bir web tarayıcısı oluşturmak için biraz çaba harcamaya karar verdim. Başlamadan önce bilmem gereken modern web tarayıcılarının ortak işlevleri, mimarileri ve özellikleri nelerdir?
Herhangi bir öneri çok takdir edilmektedir!
Yanıtlar:
Onu parçalara ayırın. Web tarayıcısı nedir? Bu ne işe yarıyor? O:
Ve bu temelde kısaca bir Web tarayıcısıdır. Şimdi bu görevlerden bazıları inanılmaz derecede karmaşık. Kulağa kolay gelenler bile zor olabilir. Harici içerik getirmeyi ele alın. Aşağıdaki gibi kullanım durumlarıyla ilgilenmeniz gerekir:
Benim ve diğerlerinin topluca kaşlarımızı kaldırmamızın nedeni, işleme motorunun zor olması (ve birinin de belirttiği gibi, yıllarca onların gelişimine girmiş olmaları). Etrafındaki ana işleme motorları şunlardır:
İlk üç, bugün kullanılan başlıca işleme motorları olarak düşünülmelidir.
Javascript motorları da zordur. Bunlardan belirli oluşturma motoruna bağlı olma eğiliminde olan birkaç tane vardır:
Ve elbette tüm kullanıcı arayüzü unsurları var: sayfalar arasında gezinme, sayfa geçmişi, geçici dosyaları temizleme, bir URL girme, URL'leri otomatik tamamlama vb.
Bu çok fazla iş.
Kulağa gerçekten ilginç bir proje gibi geliyor, ancak muazzam bir çaba harcamanızı gerektirecek.
Bu kolay bir şey değil, ama akademik bir bakış açısından, ondan çok şey öğrenebilirsin .
Kontrol edebileceğiniz bazı kaynaklar:
Ancak gerçekçi bir bakış açısından bakıldığında, onu sıfırdan kodlamak için gereken büyük çaba bana şu çizgi romanı hatırlattı:
(kaynak: geekherocomic.com )
İyi şanslar :-)
Çoğu modern web tarayıcısı dev canavarlardır ve muhtemelen oldukça kötü tasarlanmışlardır çünkü onlar (ve web'in kendisi) oldukça gelişigüzel bir şekilde gelişmiştir.
Öncelikle projenizin hedeflerini (ve neyi başarmayı umduğunuzu) çok açık hale getirerek başlamalısınız . Bu sadece eğlence için mi yaptığınız bir şey mi yoksa başkalarının tarayıcınızı kullanmasını mı bekliyorsunuz? Başkalarının onu kullanmasını bekliyorsanız, onlar için teşvik ne olur? Chrome, Safari, Firefox, IE, Opera vb. Yerine herkesin kullanabileceği, sıfırdan yeni bir tarayıcı geliştirmenizi beklemek gerçekçi değildir. Tüm bu projelerin başlangıç tarihi 10-15 yıldır. sen ve onları yakaladığın zaman, onlar senden 10-15 yıl daha ileride olacaklar. Ayrıca arkalarında çok daha fazla insan gücü var ve bu yüzden projenizin başarılı olmasını istiyorsanız, bir noktada o insan gücüne ihtiyacınız olacak.
Pek çok kaynağı olan büyük şirketler olan Apple ve Google'ın sıfırdan başlamamasının nedeni budur. Microsoft bile sıfırdan başlamadı. Orijinal IE, Mosaic'e dayanıyordu. Bugün hala sıfırdan başlatılan önemli tarayıcılar Opera , Konqueror ve Lynx'tir., maalesef hepsinin küçük bir pazar payı var. Şu an için Lynx'i unutalım, çünkü bu bir salt metin tarayıcısı ve muhtemelen hala etrafta olmasının tek nedeni, o belirli nişe hizmet etmesidir. Opera tartışmasız şimdiye kadar yapılmış en iyi tarayıcılardan biridir ve yine de hiçbir zaman büyük bir pazar payına sahip olmamıştır, bu nedenle başarı ve yeniliğin aynı şey olmadığını unutmayın. KHTML, Konqueror'un arkasındaki motordur ve kendisi hiçbir zaman çok başarılı olamamıştır, ancak hem Apple hem de Google'ın kullandığı WebKit'in temelini oluşturur. Bence kesinlikle KHTML yapılmasaydı ne Safari ne de Chrome var olmayacaktı. İlginçtir ki, hem KHTML hem de Opera büyük ölçüde Oslo'da aynı binada çalışan Norveçli programcılar tarafından üretildi.
Bir işletim sistemi oluşturmak gibi bir web tarayıcısı oluşturmaya bakmanız gerekir, çünkü esasen tarayıcı budur - web uygulamalarını çalıştırmak için bir işletim sistemidir. Ve bir işletim sistemi gibi, bir web tarayıcısı, birçok bileşeni olan çok karmaşık bir yazılım parçasıdır. Tabii ki, insanlar sıfırdan yeni işletim sistemleri oluşturmada başarılı oldular. Linus Torvalds akla geliyor. Şimdiye kadarki en başarılı işletim sistemlerinden biri olan Linux'u yaptı.
Elbette, yeni ve başarılı bir tarayıcı oluşturmayı yeni ve başarılı bir işletim sistemi oluşturmaktan daha zor hale getiren ek bir zorlukla karşı karşıyasınız. Tarayıcıların web'de dolaşan tüm eski kodları kusursuz bir şekilde çalıştırması beklenir. Şimdi Linus Torvalds'a, UNIX veya bazı mevcut işletim sistemleriyle mükemmel bir şekilde geriye dönük uyumlu olmadığı sürece yeni işletim sisteminin önemli olmayacağı söylendiğini varsayalım. Rahatsız edeceğinden şüpheliyim ve muhtemelen bugün Linux olmayacaktı. Gerçekçi olarak, elbette, Linux'un popüler olmasının tek nedeni, iyi tasarlanmış olması ve GNU projesinin mevcut büyük miktarda kodu Linux'a taşımak için araçlar yapabilmesiydi. GNU'nun Linux için ideolojik desteği olmasaydı, asla şansı olmazdı.
Dolayısıyla, yeni ve başarılı bir tarayıcı yapmayı deneyecek kadar hırslı (veya çılgın) olduğunuzu varsayarsak, odaklanmanız gereken şey mimari ve tasarımdır . Mevcut tarayıcıların tasarımını bir şekilde iyileştirebileceğinizden emin değilseniz sıfırdan yeni bir tarayıcı oluşturmanın pratik bir nedeni yoktur. Bu, WebKit ve Gecko'nun kodlarına, verdikleri tasarım kararlarını anlayacak kadar aşina olmanız gerektiği anlamına gelir , ancak tasarımlarını kopyalamaya çalışmamalısınız, çünkü aksi takdirde sadece kodlarını kullanabilirsiniz.
Kişisel düşüncelerim (yeterince araştırma yapmadan) günümüz tarayıcılarının yeterince modüler olmadığıdır. Yeni bir tarayıcı yapacak olsaydım, bir şeyleri içeri ve dışarı değiştirmeyi kolaylaştırmanın (bir JavaScript motorunu diğeriyle değiştirmek gibi) ve kullanıcıya şu anda mevcut tarayıcılarda olduğundan çok daha fazla kontrol vermenin bir yolunu bulurdum. . Modern tarayıcılar ve web tasarımcıları neredeyse tüm kontrolü kullanıcıdan almışlardır. Neden kullanıcı olarak web tarayıcısına makinemde görüntülenen içeriği nasıl oluşturmasını istediğimi söyleyemiyorum? Orijinal HTML yalnızca içeriğin nasıl yapılandırılacağına dair yönergeler verdi ve zamanla yeni standartlar, kullanıcının artık web tasarımcısının insafına kaldığı noktaya kadar giderek daha dogmatik hale geldi. Linux'un cazibesi, kullanıcıya kontrolü geri vermesiydi ve '
Yerinde olsam araştırmak için harcayacağım bir diğer şey de işletim sistemi tasarım ilkeleridir. İyi bir tarayıcı tasarlamak, en azından teorik olarak, iyi bir işletim sistemi tasarlamakla aynı ilkeleri gerektirmelidir - özellikle eşzamanlı süreçler, güvenlik modelleri vb. İle ilgili olarak.
Son olarak, pek çok araştırma yaptıktan sonra, kodlamaya başlamanız gereken yer burası sanırım:
Mozaik Yeniden Tasarlaama kendi tasarım fikirlerinizle. Bu aynı zamanda, bunu sadece eğlence için veya kendi eğitim yararınız için yapıyorsanız size önereceğim şeydir. Orijinal HTML 1.0 ve HTML 2.0 spesifikasyonlarının yanı sıra HTTP 1.1 spesifikasyonlarını ve mevcut URI spesifikasyonlarını okuyun ve tarayıcınızın tüm bu spesifikasyonlara uyduğundan emin olun. Elbette, taşıma protokollerini, URI kurallarını, vb. Halihazırda işleyen mevcut yazılımı indirebilirsiniz, ancak kendi tarayıcınızı tasarlama konusunda ciddiyseniz, bunları sıfırdan yapmanın da iyi bir egzersiz olduğunu düşünüyorum. tüm yapboz parçalarının nasıl bir araya geldiğine dair iyi bir fikir. Adım 0'ın sonunda, en azından 90'lardaki en son teknolojiye benzeyen bir tarayıcıya sahip olmalısınız. Bu iyi bir ilk kilometre taşıdır. Orijinal Mozaiği şu adresten indirebilirsiniz:ftp://ftp.ncsa.uiuc.edu/Mosaic/ ve tarayıcınızla karşılaştırıldığında nasıl olduğunu görün. Ayrıca, mevcut web sitelerinin Mosaic gibi eski bir tarayıcıda nasıl görüntülendiğini görmek için iyi bir egzersiz.
Tarayıcınıza DOM için destek ekleyin. Öncelikle W3C DOM Seviye 1 ve Seviye 2'ye odaklanın, çünkü hemen hemen tüm mevcut tarayıcılar bunları tamamen desteklemektedir. Ardından Seviye 3 ve Seviye 4'e bakın. DOM, web programlaması için son derece temeldir ve bu nedenle, gerçekten modern bir web tarayıcısı oluşturacaksanız, tüm tasarımının bunu dikkate alması gerekir. Tarayıcıyı C # ile yazdığınızdan, var olan .NET nesne modelini kendi yararınıza nasıl kullanabileceğinizi düşünmek isteyebilirsiniz.
Mevcut komut dosyası motorlarına bakın ve bunları projenize taşıyıp taşıyamayacağınızı görün. Kendi JavaScript yorumlayıcınızı yazmanız konusunda sizi cesaretlendirmek isterim, bu sadece kendi başına çok büyük bir proje olduğu için değil, aynı zamanda JS derleyicilerini (örneğin V8) optimize etmek için zaten çok fazla çalışma yapıldığı için. Bu nedenle, derleyici tasarımında uzman değilseniz, el yapımı JS yorumlayıcınız, EMCAScript özelliklerini kusursuz bir şekilde takip etse bile, muhtemelen mevcut olanlardan daha düşük olacaktır. Yine, komut dosyası motorunun yine de gerçek tarayıcıdan tamamen ayrı bir modül olması gerektiğini düşünüyorum, bu yüzden bir komut dosyası motoru oluşturmak yerine herhangi bir komut dosyası motorunun yerini almanıza izin veren bir çerçeveye sahip olmanın çok daha yararlı olacağını düşünüyorum. bu yalnızca tarayıcınızla çalışır.
Kuzey Amerika'daki en iyi 10-20 web sitesinin (Google, Facebook, YouTube, Twitter, Wikipedia, Amazon, popüler blog platformları vb.) HTML / CSS / JS kaynak koduna bakın ve tarayıcınızı bu sitelerle iyi çalışması için tasarlayın. . Bu, mevcut tüm standartlara (mevcut tarayıcıların hala mükemmel bir şekilde yapmadığı bir şey) uyan bir tarayıcı yapmaktan çok daha az çözülmesi daha izlenebilir bir problemdir. yap bunu). İnsanlar tarayıcınızın standartları ihlal ettiğinden şikayet edecekler, ancak bu, tarayıcınızla Google veya Facebook'a erişemediklerinden şikayet eden insanlar kadar büyük bir sorun değil. İlk sürümünde tüm standartları (hatta çoğu) doğru bir şekilde uygulayan herhangi bir tarayıcı düşünemiyorum, bu yüzden denemeye bile zahmet etmeyin diyorum.
Kendi oluşturma motorunuzu yazmaktan mı bahsediyorsunuz?
Sadece iyi şanslar diyebilirim. Birçok insan yıllarca çeşitli tarayıcıların mevcut nesline girmiştir, eğer ikisinden de daha iyisini yapmak istiyorsanız, bazı ciddi becerilere ihtiyacınız olacak. Nereden başlayacağınızı sormanız gerekiyorsa, böyle bir göreve girişmenin mantıklı olması için muhtemelen birkaç yıldan fazla bir eğitiminiz vardır.
Bununla birlikte, işte bazı (bariz) işaretler:
aşağıda düzenleyin
Bunun motive edici ya da motivasyon kırıcı olmasını istemedim, sadece size bir tarayıcının gerçekten büyük bir proje olduğunu ve gerçekten büyük projelerin çok fazla düşünmeyi gerektirdiğini gösterme girişimi. Mizah serpilmiş künt dürüstlük.
Hayatımın üçte ikisinden fazlası için programlama yapıyorum ve oldukça iyi bir programcı olduğumu düşünmeyi seviyorum, ancak sıfırdan düzgün bir web tarayıcısı yazmak için yarım şansıma sahip olduğumu düşünmek aptallık olur .
Tabii ki, yapmak istediğiniz buysa, yorumumun yolunuza çıkmasına izin vermeyin. Muhtemelen Internet Explorer'dan daha iyisini yapabilirsiniz.
Bu delice hırslı bir proje (özellikle tek bir geliştirici için) ama bir gün yapmayı çok istediğim bir şey - ondan çok şey öğrenebilirsiniz.
Protokollerin nasıl çalıştığı hakkında (kesinlikle araştırmanız gereken bir şey) veya bir tarayıcıda neler olup bittiğiyle ilgili pek bir şey bilmiyorum, ancak başlamak için harika bir yer, başta Chrome ve olmak üzere açık kaynaklı tarayıcıların kaynağı olacaktır. Firefox. Chrome, yalnızca başlamanızı beklediğim şeyi yaptıkları için bakılması özellikle iyi bir projedir: Chrome ve tarayıcının arka ucu. İlk başta bir işleme motoru oluşturmayı unutun - Webkit veya Gekko kullanın.
Herkesin söylediği gibi, bir web tarayıcısı devasa bir projedir. İnsanların beklediği her şeyi düşünmeden önce tcp / ip ve soketler, html oluşturma, css kullanma, DOM modeli oluşturma, javascript yürütme, hatalı biçimlendirilmiş işaretleme ve kodla başa çıkma ve her tür dosyayı işleme konusunda endişelenmeniz gerekir. bir tarayıcı (yani yer imleri, geçmiş, özel tarama, güvenlik vb.) Bu büyük bir proje.
Olduğu söyleniyor, yapılabilir. Benim önerim Firefox'un kaynağına bakmak olacaktır. Sıfırdan bir tarayıcı oluşturmak istediğini söylediğini biliyorum, ancak önce açık kaynaklı bir projeden öğrenmek çok faydalı olacaktır .
Firefox kaynağını indirir ve yavaşça çıkarırdım. Başka bir deyişle, kaynağı alır ve tüm yer imi işlevlerini kaldırırdım . Ardından, eklentileri işleme yeteneğini kaldırırdım. Ardından, dosyaları kaydetmeyle ilgili tüm kodu silerim. Çok basit bir web tarayıcısına sahip olana kadar bu işleme devam edecektim . O koda bakardım.
Sonra kendiminkini inşa etmeye başlarım. Firefox'u parçalara ayırarak edindiğim bilgileri alıp yeni bir tarayıcı oluşturmaya koyardım.
Bir şans sürü size!
exe
yükledikten sonra çok sayıda dll
dosya içeren bir kaynak klasör elde ettiğim bir dosya alıyorum . Bunu yapan gerçek kodu ve bunun arkasında yatan mantığı nasıl inceleyebilirim?
Udacity'nin artık "Web Tarayıcısı Oluşturma" adlı bir kursu var - https://www.udacity.com/course/programming-languages--cs262
İyi biçimlendirilmiş ve geçerli XHTML ile başlayabilirsiniz, bu, tarayıcınızın gerçek "hayatta" karşılaşacağı etiket çorbasından daha kolay olmalıdır.
O halde, gerçek HTML'yi web'den ihtiyaçlarınıza göre bükmenin bir yolunu bulmalısınız.
Ancak kendinizi kandırmayın: Tarayıcı küçük bir proje değildir.
çok hırslı bir proje ancak bir geliştirici bunu tek başına yapamaz, bir takıma ihtiyacınız var (proje yöneticisi, testçiler ...) ve belki de dil seçiminizi gözden geçirmelisiniz c # yalnızca pencerelerde çalışır (linux'ta mono biliyorum ama bu değil aynı) yine de size iyi şanslar diliyorum ve tarayıcınızı kullanmaktan mutluluk duyacağım: D
Elinde gerçekten çok boş vaktin var, değil mi? AFAIK, çoğu tarayıcı C ++ ile yazılmıştır, tüm kullanıcıların bilgisayarlarında .NET çerçevesi yüklü değildir ve eğer yaparsa, ihtiyacınız olan sürüm olmayabilir.
Bu yıllar sürebilir ama her neyse, orada pek çok açık kaynak tarayıcı var, FireFox, Google Chrome ... vb, koda bir göz atarak başlayabilirsiniz, bunda bol şans :)