Bagaimana cara mulai membuat browser web? [Tutup]

89

Saya memutuskan untuk berusaha membuat browser web dari awal. Apa saja fungsi umum, arsitektur, dan fitur browser web modern yang harus saya ketahui sebelum memulai?

Setiap rekomendasi sangat dihargai!

Galilyou
sumber
9
Ya, ini adalah proyek yang gila tapi kita tidak perlu mengambil mickey di sini - saya pikir ini adalah titik diskusi yang bagus tentang bagaimana Anda akan menyiasatinya :)
Ross
8
Saya ingat sebuah artikel beberapa waktu lalu di mana seseorang mengeluhkan kenyataan bahwa tidak ada lagi yang punya nyali untuk membangun mesin rendering baru. Browser baru dibutuhkan, katanya, karena komputer saat ini berbeda. Beberapa inti. Langkah pertama adalah Chrome dengan 1 proses per tab. Mari kita lihat apa yang akan terjadi selanjutnya.
stesch
36
Tumbuhkan beberapa bola dan lakukan apa yang Anda inginkan. Jika berhasil, bagus. Jika tidak, teruslah mencoba, jika tidak, Anda akan berakhir seperti separuh masyarakat lainnya yang berkata, "Jangan membuat sesuatu yang baru, gunakan saja kotoran rusak yang sudah kita miliki."
uSeRnAmEhAhAhAhAhA
7
Anda membutuhkan salah satu pil yang diminum Bradley Cooper di Limitless . ;)
Ali Gajani
3
Mencobanya. Saya yakin ini jauh lebih mudah daripada yang dikatakan orang di sini, terutama jika Anda menyambungkan banyak komponen yang ada. Seberapa sulit untuk mengurai beberapa teks dan menampilkan beberapa kotak berwarna dengan teks di dalamnya?
Ian Warburton

Jawaban:

131

Hancurkan menjadi beberapa bagian. Apa itu browser web? Apa fungsinya? Itu:

  • Mengambil konten eksternal. Jadi, Anda memerlukan pustaka HTTP atau (tidak disarankan) tulis sendiri. Ada banyak kerumitan / kehalusan pada protokol HTTP, misalnya menangani header yang kadaluwarsa, versi yang berbeda (meskipun sekarang ini sebagian besar 1.1), dll;
  • Menangani jenis konten yang berbeda. Ada registri Windos untuk hal-hal semacam ini yang dapat Anda dukung. Saya sedang berbicara menafsirkan konten berdasarkan tipe MIME di sini;
  • Parses HTML dan XML : untuk membuat DOM (Document Object Model);
  • Parsing dan terapkan CSS : ini memerlukan pemahaman semua properti, semua unit ukuran dan semua cara nilai dapat ditentukan (misalnya "perbatasan: 1px solid black" vs properti lebar-batas terpisah, dll);
  • Menerapkan model visual W3C (dan ini adalah penendang yang sebenarnya); dan
  • Memiliki mesin Javascript .

Dan pada dasarnya itu adalah browser Web secara singkat. Sekarang beberapa dari tugas ini sangat kompleks. Bahkan yang terdengar mudah pun bisa sulit. Ambil mengambil konten eksternal. Anda perlu menangani kasus penggunaan seperti:

  • Berapa banyak koneksi bersamaan untuk digunakan?
  • Kesalahan melaporkan kepada pengguna;
  • Proksi;
  • Opsi pengguna;
  • dll.

Alasan saya dan orang lain bersama-sama mengangkat alis kami adalah mesin rendering yang sulit (dan, seperti yang dicatat seseorang, bertahun-tahun manusia telah memasuki perkembangan mereka). Mesin rendering utama di sekitar adalah:

  • Trident: dikembangkan oleh Microsoft untuk Internet Explorer;
  • Gecko: digunakan di Firefox;
  • Webkit: digunakan di Safari dan Chrome 0-27;
  • KHTML: digunakan di lingkungan desktop KDE. Webkit bercabang dari KHTML beberapa tahun yang lalu;
  • Elektra: digunakan di Opera 4-6;
  • Presto: digunakan di Opera 7-12;
  • Berkedip: digunakan di Chrome 28+, Opera 15+, webkit fork;

Tiga teratas harus dipertimbangkan sebagai mesin rendering utama yang digunakan saat ini.

Mesin Javascript juga sulit. Ada beberapa di antaranya yang cenderung terkait dengan mesin rendering tertentu:

  • SpiderMonkey: digunakan di Gecko / Firefox;
  • TraceMonkey: akan menggantikan SpiderMonkey di Firefox 3.1 dan memperkenalkan kompilasi JIT (just-in-time);
  • KJS: digunakan oleh Konqueror, terkait dengan KHTML;
  • JScript: mesin Javascript dari Trident, digunakan di Internet Explorer;
  • JavascriptCore: digunakan di Webkit oleh browser Safari;
  • SquirrelFish: akan digunakan di Webkit dan menambahkan JIT seperti TraceMonkey;
  • V8: Mesin Javascript Google yang digunakan di Chrome dan Opera;
  • Opera (12.X dan kurang) juga menggunakan miliknya sendiri.

Dan tentu saja ada semua hal tentang antarmuka pengguna: navigasi antar halaman, riwayat halaman, membersihkan file sementara, mengetikkan URL, melengkapi URL secara otomatis, dan sebagainya.

Itu pekerjaan yang banyak .

cletus
sumber
* Gecko :) Juga setuju. Bagian utamanya adalah perender HTML dan mesin JavaScript.
abatishchev
1
Opera menciptakannya sendiri. Presto adalah yang saat ini, dan Electra adalah yang sebelumnya.
Tim Sullivan
Jawaban mendalam yang bagus - Saya lupa tentang penguraian JavaScript!
Ross
1
Namun, dunia membutuhkan lebih banyak orang yang punya nyali untuk membuat browser. Cp eff.org/deeplinks/2016/04/save-firefox .
Pacerier
28

Kedengarannya seperti proyek yang sangat menarik, tetapi ini akan mengharuskan Anda menginvestasikan upaya yang sangat besar.

Memang bukan hal yang mudah, tetapi dari sudut pandang akademis, Anda bisa belajar banyak darinya.

Beberapa sumber daya yang dapat Anda periksa:

Tetapi melihatnya dari sudut pandang realistis , upaya besar yang diperlukan untuk mengkodekannya dari awal mengingatkan saya pada komik ini:


(sumber: geekherocomic.com )

Semoga berhasil :-)

Christian C. Salvadó
sumber
Oh, apakah GHC melanjutkan? Pikir saya berhenti berlangganan ketika mereka mulai melakukan hal sarang Ross itu.
Ross
@ Ross: Ya, mereka masih mengirimkan komik, orang baru itu bernama Boris dari Rusia, dan dia adalah "
Peretas
17

Sebagian besar peramban web modern adalah makhluk raksasa, dan mungkin dirancang dengan cukup buruk karena mereka (dan web itu sendiri) berevolusi dengan cara yang agak serampangan.

Anda harus mulai dengan membuat gol terlebih dahulu proyek Anda (dan apa yang ingin Anda capai) sangat eksplisit. Apakah ini sesuatu yang Anda lakukan hanya untuk bersenang-senang, atau Anda berharap orang lain menggunakan browser Anda? Jika Anda mengharapkan orang lain untuk menggunakannya, apa insentifnya bagi mereka? Tidaklah realistis untuk mengharapkan bahwa Anda akan mengembangkan browser baru dari awal yang dapat digunakan semua orang sebagai pengganti Chrome, Safari, Firefox, IE, Opera, dll. Semua proyek tersebut akan dimulai selama 10-15 tahun. Anda, dan pada saat Anda berhasil menyusul mereka, mereka akan berada 10-15 tahun lagi di depan Anda. Ditambah mereka memiliki lebih banyak tenaga kerja di belakang mereka, jadi jika Anda ingin proyek Anda berhasil, Anda akan membutuhkan tenaga manusia itu di beberapa titik.

Inilah alasan mengapa Apple dan Google, perusahaan besar dengan banyak sumber daya, tidak memulai dari awal. Bahkan Microsoft tidak memulai dari awal. IE asli didasarkan pada Mosaic. Satu-satunya peramban penting yang masih ada saat ini yang dimulai dari awal adalah Opera , Konqueror dan Lynx, yang sayangnya semuanya memiliki pangsa pasar yang sangat kecil. Mari kita lupakan tentang Lynx untuk saat ini, karena ini adalah peramban teks saja dan mungkin satu-satunya alasan mengapa ia masih ada adalah karena ia melayani ceruk khusus itu. Opera bisa dibilang salah satu browser terbaik yang pernah dibuat, namun tidak pernah memiliki pangsa pasar yang besar, jadi ingatlah bahwa kesuksesan dan inovasi bukanlah hal yang sama. KHTML adalah mesin di belakang Konqueror, yang tidak pernah menjadi sangat sukses, tetapi merupakan dasar dari WebKit yang digunakan oleh Apple dan Google. Saya pikir orang pasti bisa membantah bahwa jika KHTML tidak pernah dibuat, baik Safari atau Chrome tidak akan ada. Yang cukup menarik, baik KHTML dan Opera sebagian besar diproduksi oleh programmer Norwegia yang bekerja di gedung yang sama di Oslo.

Anda perlu melihat membangun browser web seperti membangun sistem operasi, karena pada dasarnya itulah browser - ini adalah sistem operasi untuk menjalankan aplikasi web. Dan seperti sistem operasi, browser web adalah perangkat lunak yang sangat kompleks dengan banyak komponen. Tentu saja, orang telah berhasil membuat sistem operasi baru dari awal. Linus Torvalds muncul di benak Anda. Dia membuat Linux, salah satu sistem operasi paling sukses yang pernah ada.

Tentu saja, Anda menghadapi tantangan tambahan, yang membuat pembuatan browser baru yang sukses lebih sulit daripada membangun OS baru yang sukses . Browser diharapkan dapat menjalankan semua kode lama yang beredar di web dengan sempurna. Sekarang anggaplah Linus Torvalds telah diberitahu bahwa OS barunya tidak akan menjadi masalah kecuali jika itu kompatibel dengan UNIX atau beberapa OS yang ada. Saya ragu dia akan repot, dan Linux mungkin tidak akan ada hari ini. Secara realistis, tentu saja, satu-satunya alasan Linux menjadi populer adalah karena ia dirancang dengan baik dan proyek GNU mampu membuat alat untuk memindahkan sejumlah besar kode yang ada ke Linux. Tanpa dukungan ideologis GNU untuk Linux, itu tidak akan pernah memiliki kesempatan.

Jadi dengan asumsi Anda benar-benar ambisius (atau cukup bodoh) untuk mencoba membuat browser baru yang sukses, hal yang harus Anda fokuskan adalah arsitektur dan desain . Tidak ada alasan praktis untuk membangun peramban baru dari awal kecuali Anda yakin dapat meningkatkan desain peramban yang ada dengan beberapa cara. Itu berarti Anda harus cukup membiasakan diri dengan kode WebKit dan Gecko untuk memahami keputusan desain yang mereka buat, tetapi Anda tidak boleh mencoba menyalin desain mereka karena jika tidak, Anda sebaiknya menggunakan kode mereka.

Pemikiran pribadi saya (tanpa melakukan penelitian yang cukup) adalah bahwa browser saat ini tidak cukup modular. Jika saya akan membuat peramban baru, saya akan menemukan cara untuk membuatnya mudah untuk menukar barang masuk dan keluar (seperti mengganti satu mesin JavaScript dengan yang lain), dan memberi pengguna lebih banyak kendali daripada yang mereka miliki saat ini dengan peramban yang ada . Peramban modern dan perancang web telah mengambil hampir semua kendali dari pengguna. Mengapa saya, sebagai pengguna, tidak dapat memberi tahu browser web bagaimana saya ingin merender konten yang ditampilkan di mesin saya? HTML asli hanya memberikan pedoman tentang cara menyusun konten, dan seiring waktu, standar yang lebih baru menjadi semakin dogmatis, ke titik di mana pengguna sekarang berada pada belas kasihan perancang web. Daya tarik Linux adalah memberikan kembali kendali kepada pengguna, dan '

Hal lain yang akan saya habiskan untuk meneliti, jika saya jadi Anda, adalah prinsip desain sistem operasi. Merancang browser yang baik, setidaknya harus secara teori, memerlukan prinsip yang sama seperti merancang OS yang baik - terutama dalam hal proses bersamaan, model keamanan, dll.

Akhirnya, setelah melakukan banyak dan banyak penelitian, di sinilah Anda harus mulai membuat kode menurut saya:

  1. Merekayasa ulang Mosaic , tetapi dengan ide desain Anda sendiri. Ini juga yang akan saya sarankan jika Anda melakukannya untuk kesenangan atau keuntungan pendidikan Anda sendiri. Baca spesifikasi HTML 1.0 dan HTML 2.0 asli, serta spesifikasi HTTP 1.1 dan spesifikasi URI saat ini, dan pastikan browser Anda mematuhi semua spesifikasi tersebut. Anda tentu saja dapat mengunduh perangkat lunak yang ada yang sudah menangani protokol transport, konvensi URI, dll. Tetapi jika Anda serius mendesain peramban Anda sendiri, menurut saya itu adalah latihan yang baik untuk melakukan hal-hal ini dari awal juga, jadi Anda mendapatkan pemahaman yang baik tentang bagaimana semua potongan puzzle cocok satu sama lain. Di akhir langkah 0, Anda harus memiliki browser yang setidaknya sebanding dengan yang canggih di tahun 90-an. Ini adalah pencapaian pertama yang bagus. Dan Anda sebenarnya dapat mengunduh Mosaic asli diftp://ftp.ncsa.uiuc.edu/Mosaic/ dan lihat perbandingannya dengan browser Anda. Ini juga merupakan latihan yang baik untuk melihat bagaimana situs web saat ini ditampilkan di browser kuno seperti Mosaic.

  2. Tambahkan dukungan untuk DOM ke browser Anda. Fokuslah pada W3C DOM Level 1 dan Level 2 terlebih dahulu, karena hampir semua browser saat ini mendukungnya sepenuhnya. Kemudian lihat Level 3 dan Level 4. DOM sangat penting untuk pemrograman web, jadi jika Anda akan benar-benar membangun browser web modern, seluruh desain harus mempertimbangkan hal ini. Karena Anda menulis browser di C #, Anda mungkin ingin mempertimbangkan bagaimana Anda dapat memanfaatkan model objek .NET yang ada untuk keuntungan Anda.

  3. Lihat mesin skrip yang ada dan lihat apakah Anda dapat memindahkannya ke proyek Anda. Saya tidak menyarankan Anda untuk menulis penerjemah JavaScript Anda sendiri, tidak hanya karena itu sendiri merupakan proyek yang sangat besar, tetapi karena begitu banyak pekerjaan yang telah dilakukan untuk mengoptimalkan kompiler JS (misalnya V8). Jadi, kecuali Anda adalah seorang ahli dalam desain kompiler, interpreter JS buatan tangan Anda kemungkinan akan lebih rendah dari apa yang sudah ada di luar sana, meskipun itu mengikuti spesifikasi EMCAScript dengan sempurna. Sekali lagi, saya pikir mesin skrip harus menjadi sesuatu yang merupakan modul yang sepenuhnya terpisah dari peramban yang sebenarnya, jadi saya pikir akan jauh lebih berguna untuk memiliki kerangka kerja yang memungkinkan Anda untuk mengganti mesin skrip apa pun, daripada membangun mesin skrip yang hanya bekerja dengan browser Anda.

  4. Lihat kode sumber HTML / CSS / JS untuk 10-20 situs web teratas di Amerika Utara (Google, Facebook, YouTube, Twitter, Wikipedia, Amazon, platform blog populer, dll.) Dan rancang browser Anda untuk bekerja dengan baik dengan situs-situs ini . Ini adalah masalah yang agak lebih mudah dipecahkan daripada membuat browser yang mematuhi semua standar yang ada (sesuatu yang browser saat ini masih belum melakukannya dengan sempurna) apalagi membuat browser yang merender dengan benar semua situs web di web (tidak ada yang bisa lakukan itu). Orang-orang akan mengeluh bahwa browser Anda melanggar standar dan sebagainya, tetapi itu bukan masalah besar seperti orang-orang mengeluh bahwa mereka tidak dapat mengakses Google atau Facebook dengan browser Anda. Saya tidak dapat memikirkan browser apa pun yang dengan benar mengikuti semua (atau bahkan sebagian besar) standar pada rilis pertamanya, jadi saya katakan jangan repot-repot mencoba.

pengguna2188685
sumber
1
1 untuk sebagian besar kode peramban web saat ini sangat buruk dengan muatan kapal dari omong kosong warisan sejak tahun 1990-an . Google mencoba memecahkan masalah ini dengan membuat Blink yang pada dasarnya adalah Webkit dengan 8,8 juta baris sampah yang telah dihapus, tetapi tetap saja, masih ada muatan kapal dari sampah bercokol yang tidak dapat dilepas yang terjebak dalam Blink.
Pacerier
1
... Seandainya Google mulai membuat peramban hari ini, pasti akan membuatnya dari awal , tetapi sekarang terlalu mahal bagi mereka untuk menghidupkan Titanic karena semua karyawannya sudah mengetahui Blink. Sebuah startup baru dengan keterampilan yang mendalam dan didanai dengan uang untuk membuat OS peramban yang bersaing pasti dapat memiliki keunggulan atas Chrome.
Pacerier
15

Maksud Anda seperti menulis mesin rendering Anda sendiri?

Saya hanya bisa mengatakan semoga sukses. Banyak tahun manusia telah berlalu ke generasi saat ini dari berbagai browser, Jika Anda ingin melakukan yang lebih baik daripada salah satu dari mereka, Anda memerlukan keterampilan yang serius. Jika Anda harus bertanya dari mana harus memulai, Anda mungkin memiliki lebih dari beberapa tahun studi lagi sebelum masuk akal untuk mencoba tugas semacam itu.

Karena itu, berikut adalah beberapa petunjuk (jelas):

  1. tulis banyak kode yang melakukan hal-hal kecil, seperti menyelesaikan semua masalah projecteuler.net
  2. pelajari semua yang Anda bisa tentang toolkit Anda dan standar komunitasnya
  3. tulis lebih banyak kode
  4. mendapatkan pemahaman yang kuat nyata tentang mesin negara hingga
  5. tulis kode lagi
  6. pelajari semua tentang tcp / ip stack dan cara penggunaannya untuk http
  7. pelajari semua yang Anda bisa tentang http
  8. pelajari standarnya (html, xml, sgml, css)
  9. rayakan ulang tahun ke 150 Anda.
  10. memulai proyek browser yang sebenarnya.

edit di bawah sini

Saya tidak bermaksud untuk memotivasi atau mendemotivasi, hanya upaya untuk menunjukkan kepada Anda bahwa browser adalah proyek yang sangat besar dan bahwa proyek yang sangat besar membutuhkan banyak pemikiran. Kejujuran yang terus terang ditaburi humor.

Saya telah memprogram selama lebih dari dua pertiga hidup saya dan saya suka berpikir bahwa saya adalah programmer yang cukup baik, tetapi akan bodoh bagi saya untuk berpikir bahwa saya akan memiliki setengah kesempatan untuk menulis browser web yang layak dari awal .

Tentu saja, jika ini yang ingin Anda lakukan, jangan biarkan komentar saya menghalangi Anda. Anda mungkin bisa melakukan lebih baik daripada Internet Explorer.

Keris
sumber
12
Saya harus menyebutkan: Jika Anda ingin membuat pai apel dari awal, Anda harus mulai dengan menciptakan alam semesta.
Kris
@ Mk12: memang, terima kasih. diperbarui.
Kris
1
@Kris Bagaimana Anda membuat Semesta jika tidak ada yang bisa digunakan untuk membuatnya?
uSeRnAmEhAhAhAhAhA
1
@ user2645707: Saya tidak tahu, saya hanya meniru seseorang yang lebih pintar dari saya. quotationspage.com/quote/26980.html
Kris
12
+1 untuk "Anda mungkin dapat melakukan lebih baik daripada Internet Explorer".
Pulah Nandha
14

Ini adalah proyek yang sangat ambisius (terutama untuk satu pengembang) tetapi sesuatu yang ingin saya lakukan suatu hari nanti - Anda dapat belajar banyak darinya.

Saya tidak tahu banyak tentang bagaimana protokol bekerja (sesuatu yang pasti perlu Anda teliti) atau banyak tentang apa yang terjadi di browser tetapi tempat yang bagus untuk memulai adalah sumber dari browser sumber terbuka, terutama Chrome dan Firefox. Chrome adalah proyek yang sangat bagus untuk dilihat karena mereka hanya melakukan apa yang saya harapkan untuk Anda mulai: chrome dan bagian belakang peramban. Lupakan membuat mesin rendering pada awalnya - gunakan Webkit atau Gekko.

Ross
sumber
8

Seperti yang telah dikatakan orang lain, browser web adalah proyek besar. Anda harus khawatir tentang tcp / ip & sockets, rendering html, menggunakan css, membuat model DOM, menjalankan javascript, menangani markup dan kode yang salah, dan menangani semua jenis file bahkan sebelum Anda dapat memikirkan semua hal yang diharapkan orang dari browser (mis. bookmark, riwayat, penelusuran pribadi, keamanan, dll.) Ini adalah proyek yang sangat besar.

Bisa dikatakan, itu bisa dilakukan. Saran saya adalah melihat sumber Firefox. Saya tahu bahwa Anda mengatakan ingin membuat browser dari awal, tetapi akan sangat membantu jika Anda belajar dari proyek sumber terbuka terlebih dahulu.

Saya akan mengunduh sumber Firefox, dan perlahan-lahan menghapusnya. Dengan kata lain, saya akan mengambil sumbernya dan menghapus semua fungsi bookmark. Kemudian, saya akan menghapus kemampuan untuk menangani addons. Kemudian, saya akan menghapus semua kode terkait penyimpanan file. Saya akan melanjutkan proses ini sampai saya mendapatkan browser web yang sangat dasar. Saya akan memeriksa kode itu.

Kemudian, saya akan mulai membangun sendiri. Saya akan mengambil pengetahuan yang saya peroleh dari membongkar Firefox, dan saya akan menggunakannya untuk membuat browser baru.

Sebuah seluruh banyak keberuntungan untuk Anda!

stalepretzel
sumber
Dapatkah Anda memberikan petunjuk tentang cara menghancurkan Firefox? Maksud saya, saya mendapatkan exefile, setelah menginstalnya, saya mendapatkan folder sumber dengan banyak dllfile. Bagaimana saya mempelajari kode sebenarnya yang melakukan ini, dan logika yang ada di balik ini?
SexyBeast
Komentar ini terlambat ke pesta, tapi bagaimanapun juga. File .EXE dan .DLL adalah hasil dari langkah kompilasi dan Anda tidak dapat berharap banyak untuk memahaminya. Anda akan membutuhkan kode sumber (beberapa C ++ dan bahasa lain dalam file yang berbeda) untuk memahami program. Pemrogram perlu memahami program mereka sendiri, sehingga mereka cenderung memisahkan dan mendokumentasikan berbagai bagian fungsional dari kode.
Roy Prins
4

Anda dapat memulai dengan XHTML valid dan format yang bagus, yang seharusnya lebih mudah daripada tag sup yang akan ditemui browser Anda dalam "kehidupan" yang sebenarnya.

Kemudian Anda harus menemukan cara untuk menyesuaikan HTML yang sebenarnya dari web dengan kebutuhan Anda.

Tapi jangan menipu diri sendiri: Browser bukanlah proyek kecil.

stesch
sumber
3

... lalu mulailah mengkhawatirkan keamanan

(masalah non-fungsional dan lintas sektoral umumnya harus dipertimbangkan di depan :))

Matt
sumber
1

proyek yang sangat ambisius tetapi satu pengembang tidak dapat melakukan ini sendirian, Anda memerlukan tim (manajer proyek, penguji ...) dan mungkin Anda harus meninjau pilihan bahasa c # hanya berfungsi di windows (saya tahu mono di linux tetapi bukan sama) bagaimanapun saya berharap semoga sukses dan saya akan senang menggunakan browser Anda: D

Hannoun Yassir
sumber
0

Anda benar-benar memiliki banyak waktu luang, bukan? AFAIK, sebagian besar browser ditulis dalam C ++, tidak semua pengguna memiliki kerangka .NET yang diinstal di komputer mereka dan jika mereka melakukannya mungkin bukan versi yang Anda butuhkan.

Ini bisa memakan waktu bertahun-tahun tetapi bagaimanapun, ada banyak browser open source di luar sana, FireFox, Google Chrome .. dll, Anda dapat mulai dengan melihat kodenya, semoga berhasil :)

Waleed Eissa
sumber
1
Chrome bukanlah open source; Tetapi sebagian besar kode sumbernya dapat ditemukan di proyek chromium
Anonim