Tôi quyết định nỗ lực xây dựng một trình duyệt web từ đầu. Các chức năng, kiến trúc và tính năng phổ biến của các trình duyệt web hiện đại mà tôi nên biết trước khi bắt đầu là gì?
Bất kỳ khuyến nghị được đánh giá cao!
Tôi quyết định nỗ lực xây dựng một trình duyệt web từ đầu. Các chức năng, kiến trúc và tính năng phổ biến của các trình duyệt web hiện đại mà tôi nên biết trước khi bắt đầu là gì?
Bất kỳ khuyến nghị được đánh giá cao!
Câu trả lời:
Hãy chia nhỏ nó thành nhiều mảnh. Trình duyệt Web là gì? Nó làm gì? Nó:
Tóm lại, về cơ bản đó là một trình duyệt Web. Bây giờ một số nhiệm vụ này là vô cùng phức tạp. Ngay cả những cái dễ nghe cũng có thể khó. Thực hiện tìm nạp nội dung bên ngoài. Bạn cần xử lý các trường hợp sử dụng như:
Lý do tôi và những người khác thường nhướng mày là công cụ kết xuất khó (và, như ai đó đã lưu ý, con người đã trải qua nhiều năm phát triển). Các công cụ kết xuất chính xung quanh là:
Ba công cụ hàng đầu phải được coi là công cụ kết xuất chính được sử dụng ngày nay.
Các công cụ Javascript cũng khó. Có một số trong số này có xu hướng gắn liền với công cụ kết xuất cụ thể:
Và tất nhiên có tất cả những thứ về giao diện người dùng: điều hướng giữa các trang, lịch sử trang, xóa các tệp tạm thời, nhập URL, tự động hoàn thành URL, v.v.
Đó là rất nhiều công việc.
Nghe có vẻ là một dự án thực sự thú vị, nhưng nó sẽ đòi hỏi bạn phải đầu tư một nỗ lực rất lớn.
Đó không phải là điều dễ dàng, nhưng từ quan điểm học thuật, bạn có thể học được rất nhiều điều từ nó.
Một số tài nguyên mà bạn có thể kiểm tra:
Nhưng nhìn nó từ một quan điểm thực tế , nỗ lực rất lớn cần thiết để viết mã nó từ đầu đã nhắc nhở tôi truyện tranh này:
(nguồn: geekherocomic.com )
Chúc may mắn :-)
Hầu hết các trình duyệt web hiện đại đều là những con thú khổng lồ, và có lẽ được thiết kế khá kém vì chúng (và chính web) phát triển theo một cách khá lộn xộn.
Bạn cần phải bắt đầu bằng cách đưa ra các mục tiêu của dự án (và những gì bạn hy vọng đạt được) thật rõ ràng. Đây có phải là điều bạn chỉ làm cho vui hay bạn mong người khác sử dụng trình duyệt của mình? Nếu bạn mong đợi người khác sử dụng nó, động cơ cho họ sẽ là gì? Không thực tế khi mong đợi rằng bạn sẽ phát triển một trình duyệt mới từ đầu mà mọi người sẽ có thể sử dụng để thay thế cho Chrome, Safari, Firefox, IE, Opera, v.v. Tất cả các dự án đó đều bắt đầu từ 10-15 năm. bạn, và vào thời điểm bạn bắt kịp họ, họ sẽ đi trước bạn 10-15 năm nữa. Thêm vào đó, họ có rất nhiều sức mạnh đàn ông đằng sau họ, và vì vậy nếu bạn muốn dự án của mình thành công, bạn sẽ cần sức mạnh đàn ông đó vào một lúc nào đó.
Đây là lý do mà Apple và Google, những công ty lớn với rất nhiều nguồn lực, đã không làm lại từ đầu. Ngay cả Microsoft cũng không bắt đầu lại từ đầu. IE ban đầu dựa trên Mosaic. Các trình duyệt quan trọng duy nhất vẫn còn tồn tại cho đến ngày nay được bắt đầu từ đầu là Opera , Konqueror và Lynx, đáng tiếc là tất cả đều có thị phần nhỏ. Hãy quên Lynx vào lúc này, vì nó là một trình duyệt chỉ có văn bản và có lẽ lý do duy nhất mà nó vẫn tồn tại là vì nó phục vụ cho thị trường ngách cụ thể đó. Opera được cho là một trong những trình duyệt tốt nhất từng được tạo ra, nhưng nó chưa bao giờ có thị phần lớn, vì vậy hãy nhớ rằng thành công và đổi mới không giống nhau. KHTML là công cụ đằng sau Konqueror, bản thân nó chưa bao giờ trở nên rất thành công, nhưng là cơ sở của WebKit mà cả Apple và Google đều sử dụng. Tôi nghĩ người ta chắc chắn có thể tranh luận rằng nếu KHTML chưa bao giờ được tạo ra, thì cả Safari hay Chrome đều không tồn tại. Điều thú vị là cả KHTML và Opera đều do các lập trình viên người Na Uy làm việc trong cùng một tòa nhà ở Oslo sản xuất.
Bạn cần xem việc xây dựng một trình duyệt web giống như xây dựng một hệ điều hành, bởi vì về cơ bản đó là những gì một trình duyệt - đó là một hệ điều hành để chạy các ứng dụng web. Và giống như một hệ điều hành, trình duyệt web là một phần mềm rất phức tạp với nhiều thành phần. Tất nhiên, mọi người đã thành công trong việc tạo ra hệ điều hành mới từ đầu. Linus Torvalds nghĩ đến. Ông đã tạo ra Linux, một trong những hệ điều hành thành công nhất từ trước đến nay.
Tất nhiên, bạn phải đối mặt với một thách thức bổ sung, khiến việc xây dựng một trình duyệt thành công mới khó hơn việc xây dựng một hệ điều hành thành công mới . Các trình duyệt dự kiến sẽ chạy hoàn hảo tất cả các mã kế thừa trôi nổi trên web. Bây giờ, giả sử rằng Linus Torvalds đã được thông báo rằng hệ điều hành mới của anh ấy sẽ không thành vấn đề trừ khi nó hoàn toàn tương thích ngược với UNIX hoặc một số hệ điều hành hiện có. Tôi nghi ngờ anh ấy đã làm phiền, và Linux có lẽ sẽ không tồn tại ngày nay. Tất nhiên, trên thực tế, lý do duy nhất khiến Linux trở nên phổ biến là vì nó được thiết kế tốt và dự án GNU có thể tạo ra các công cụ để chuyển một lượng lớn mã hiện có sang Linux. Nếu không có sự hỗ trợ tư tưởng của GNU cho Linux, nó sẽ không bao giờ có cơ hội.
Vì vậy, giả sử bạn thực sự đủ tham vọng (hoặc ngu ngốc) để cố gắng tạo ra một trình duyệt mới thành công, điều bạn nên tập trung vào là kiến trúc và thiết kế . Không có lý do thực tế nào để xây dựng một trình duyệt mới từ đầu trừ khi bạn chắc chắn rằng mình có thể cải thiện thiết kế của các trình duyệt hiện có theo một cách nào đó. Điều đó có nghĩa là bạn cần tự làm quen với mã của WebKit và Gecko đủ để hiểu các quyết định thiết kế mà họ đưa ra, nhưng bạn không nên cố gắng sao chép thiết kế của họ vì nếu không, bạn cũng có thể chỉ sử dụng mã của họ.
Suy nghĩ cá nhân của tôi (mà không cần thực hiện đủ nghiên cứu) là các trình duyệt ngày nay không đủ mô-đun. Nếu tôi định tạo một trình duyệt mới, tôi sẽ tìm cách giúp dễ dàng hoán đổi mọi thứ vào và ra (như thay thế một công cụ JavaScript này bằng một công cụ JavaScript khác) và cung cấp cho người dùng nhiều quyền kiểm soát hơn so với các trình duyệt hiện có. . Các trình duyệt hiện đại và các nhà thiết kế web đã lấy đi hầu hết mọi quyền kiểm soát từ người dùng. Tại sao tôi, người dùng, không thể cho trình duyệt web biết cách tôi muốn nó hiển thị nội dung đang được hiển thị trên máy của tôi? HTML ban đầu chỉ đưa ra các hướng dẫn về cách cấu trúc nội dung và theo thời gian, các tiêu chuẩn mới hơn ngày càng trở nên giáo điều hơn, đến mức người dùng giờ đây hoàn toàn phụ thuộc vào người thiết kế web. Điểm hấp dẫn của Linux là nó đã trao lại quyền kiểm soát cho người dùng và điều đó '
Điều khác mà tôi sẽ dành thời gian nghiên cứu, nếu tôi là bạn, là các nguyên tắc thiết kế hệ điều hành. Thiết kế một trình duyệt tốt, ít nhất về lý thuyết, đòi hỏi các nguyên tắc giống như thiết kế một hệ điều hành tốt - đặc biệt là liên quan đến các quy trình đồng thời, các mô hình bảo mật, v.v.
Cuối cùng, sau khi thực hiện rất nhiều nghiên cứu, đây là nơi bạn nên bắt đầu viết mã, tôi nghĩ:
Tái thiết kế Mosaic, nhưng với ý tưởng thiết kế của riêng bạn. Đây cũng là những gì tôi sẽ đề xuất nếu bạn chỉ làm điều đó vì niềm vui hoặc lợi ích giáo dục của riêng bạn. Đọc thông số kỹ thuật HTML 1.0 và HTML 2.0 gốc, cũng như thông số kỹ thuật HTTP 1.1 và thông số kỹ thuật URI hiện tại, đồng thời đảm bảo trình duyệt của bạn tuân thủ tất cả các thông số kỹ thuật đó. Tất nhiên, bạn có thể tải xuống phần mềm hiện có đã xử lý các giao thức truyền tải, quy ước URI, v.v. nhưng nếu bạn nghiêm túc về việc thiết kế trình duyệt của riêng mình, tôi nghĩ cũng nên làm những việc này từ đầu, vì vậy bạn sẽ cảm giác tốt về cách tất cả các mảnh ghép khớp với nhau. Ở cuối bước 0, bạn sẽ có một trình duyệt ít nhất có thể so sánh được với trình duyệt hiện đại vào những năm 90. Đây là một cột mốc quan trọng đầu tiên. Và bạn thực sự có thể tải xuống Mosaic gốc tạiftp://ftp.ncsa.uiuc.edu/Mosaic/ và xem nó như thế nào so với trình duyệt của bạn. Đây cũng là một bài tập tốt để xem các trang web hiện tại hiển thị như thế nào trong một trình duyệt cổ như Mosaic.
Thêm hỗ trợ cho DOM vào trình duyệt của bạn. Trước tiên, hãy tập trung vào W3C DOM Level 1 và Level 2, vì hầu hết tất cả các trình duyệt hiện tại đều hỗ trợ hoàn toàn. Sau đó, hãy nhìn vào Cấp độ 3 và Cấp độ 4. DOM cực kỳ cơ bản đối với lập trình web, và vì vậy nếu bạn thực sự định xây dựng một trình duyệt web hiện đại, thì toàn bộ thiết kế phải xem xét điều này. Vì bạn đang viết trình duyệt bằng C #, bạn có thể muốn xem xét cách bạn có thể tận dụng mô hình đối tượng .NET hiện có để làm lợi thế của mình.
Xem xét các công cụ viết kịch bản hiện có và xem liệu bạn có thể chuyển chúng vào dự án của mình hay không. Tôi không khuyến khích bạn viết trình thông dịch JavaScript của riêng mình, không chỉ vì bản thân đó là một dự án rất lớn, mà còn vì quá nhiều công việc đã được đưa vào việc tối ưu hóa trình biên dịch JS (ví dụ: V8). Vì vậy, trừ khi bạn là một chuyên gia về thiết kế trình biên dịch, trình thông dịch JS được xây dựng bằng tay của bạn có thể sẽ kém hơn so với những gì đã có ở đó, ngay cả khi nó tuân theo các thông số kỹ thuật của EMCAScript một cách hoàn hảo. Một lần nữa, tôi nghĩ công cụ viết kịch bản dù sao cũng nên là một mô-đun hoàn toàn riêng biệt với trình duyệt thực tế, vì vậy tôi nghĩ sẽ hữu ích hơn nhiều nếu có một khung công tác cho phép bạn thay thế bất kỳ công cụ tạo tập lệnh nào, thay vì xây dựng một công cụ viết kịch bản chỉ hoạt động với trình duyệt của bạn.
Xem mã nguồn HTML / CSS / JS cho 10-20 trang web hàng đầu ở Bắc Mỹ (Google, Facebook, YouTube, Twitter, Wikipedia, Amazon, các nền tảng blog phổ biến, v.v.) và thiết kế trình duyệt của bạn để hoạt động tốt với các trang web này . Đây là một vấn đề có thể giải quyết được dễ dàng hơn so với việc tạo ra một trình duyệt tuân theo tất cả các tiêu chuẩn hiện có (điều mà các trình duyệt hiện tại vẫn chưa làm hoàn hảo) ít hơn nhiều việc tạo ra một trình duyệt hiển thị chính xác tất cả các trang web trên web (không ai có thể làm vậy đi). Mọi người sẽ phàn nàn rằng trình duyệt của bạn phá vỡ các tiêu chuẩn, v.v., nhưng đó không phải là vấn đề lớn như mọi người phàn nàn rằng họ không thể truy cập Google hoặc Facebook bằng trình duyệt của bạn. Tôi không thể nghĩ ra bất kỳ trình duyệt nào tuân theo chính xác tất cả (hoặc thậm chí hầu hết) các tiêu chuẩn trong bản phát hành đầu tiên của nó, vì vậy tôi nói rằng đừng bận tâm thử.
Ý bạn là như khi viết công cụ kết xuất của riêng bạn?
Tôi chỉ có thể nói chúc may mắn. Nhiều năm con người đã đi vào thế hệ hiện tại của các trình duyệt khác nhau, Nếu bạn muốn làm tốt hơn một trong hai trình duyệt đó, bạn sẽ cần một số kỹ năng nghiêm túc. Nếu bạn phải hỏi bắt đầu từ đâu, có lẽ bạn phải học thêm vài năm nữa trước khi thực hiện một nhiệm vụ như vậy sẽ có ý nghĩa gì.
Điều đó nói rằng, đây là một số gợi ý (hiển nhiên):
chỉnh sửa bên dưới đây
Tôi không có ý nói nó là động lực hay động cơ, chỉ là một nỗ lực để cho bạn thấy rằng trình duyệt là một dự án thực sự lớn và những dự án thực sự lớn đòi hỏi rất nhiều suy nghĩ. Sự trung thực cùn pha chút hài hước.
Tôi đã lập trình hơn 2/3 cuộc đời và tôi muốn nghĩ rằng mình là một lập trình viên khá giỏi, nhưng sẽ thật ngu ngốc khi nghĩ rằng tôi sẽ có một nửa cơ hội để viết một trình duyệt web tử tế từ đầu .
Tất nhiên, nếu đây là điều bạn muốn làm, đừng để nhận xét của tôi cản đường bạn. Bạn có thể làm tốt hơn Internet Explorer.
Đó là một dự án cực kỳ tham vọng (đặc biệt là đối với một nhà phát triển duy nhất) nhưng điều gì đó tôi muốn làm vào một ngày nào đó - bạn có thể học được rất nhiều điều từ nó.
Tôi không biết nhiều về cách các giao thức hoạt động (điều mà bạn chắc chắn cần phải nghiên cứu) hoặc nhiều về những gì diễn ra trong một trình duyệt nhưng một nơi tuyệt vời để bắt đầu sẽ là nguồn của các trình duyệt mã nguồn mở, chủ yếu là Chrome và Firefox. Chrome là một dự án đặc biệt tốt để xem xét vì chúng chỉ làm những gì tôi mong đợi bạn bắt đầu: chrome và phần phụ trợ của trình duyệt. Hãy quên việc tạo công cụ kết xuất lúc đầu - hãy sử dụng Webkit hoặc Gekko.
Như mọi người đã nói, trình duyệt web là một dự án lớn. Bạn phải lo lắng về tcp / ip & sockets, hiển thị html, sử dụng css, tạo mô hình DOM, thực thi javascript, xử lý mã và đánh dấu không đúng định dạng và xử lý tất cả các loại tệp trước khi bạn có thể nghĩ về tất cả những điều mọi người mong đợi từ một trình duyệt (tức là dấu trang, lịch sử, duyệt web riêng tư, bảo mật, v.v.) Đó là một dự án lớn.
Điều đó đang được nói, nó có thể được thực hiện. Đề xuất của tôi là hãy xem mã nguồn của Firefox. Tôi biết rằng bạn đã nói rằng bạn muốn xây dựng một trình duyệt từ đầu, nhưng sẽ rất hữu ích nếu bạn học từ một dự án mã nguồn mở.
Tôi sẽ tải xuống nguồn Firefox và từ từ gỡ nó xuống. Nói cách khác, tôi sẽ lấy nguồn và loại bỏ tất cả chức năng đánh dấu trang. Sau đó, tôi sẽ loại bỏ khả năng xử lý các addon. Sau đó, tôi sẽ xóa tất cả mã liên quan đến việc lưu tệp. Tôi sẽ tiếp tục quá trình này cho đến khi tôi có một trình duyệt web rất cơ bản. Tôi sẽ xem qua mã đó.
Sau đó, tôi sẽ bắt đầu xây dựng của riêng mình. Tôi lấy kiến thức thu được từ việc tách Firefox ra và đưa nó vào việc xây dựng một trình duyệt mới.
Rất nhiều may mắn cho bạn!
exe
tệp, khi cài đặt nó, tôi nhận được một thư mục nguồn với rất nhiều dll
tệp. Làm cách nào để tôi nghiên cứu mã thực tế đã thực hiện điều này và logic đằng sau điều này?
Udacity hiện có một khóa học có tên "Xây dựng trình duyệt web" - https://www.udacity.com/course/programming-languages--cs262
Bạn có thể bắt đầu với XHTML được định dạng tốt và hợp lệ, điều này sẽ dễ dàng hơn so với thẻ tag mà trình duyệt của bạn gặp phải trong "cuộc sống" thực.
Sau đó, bạn phải tìm cách bẻ cong HTML thực từ web theo nhu cầu của bạn.
Nhưng đừng tự đùa: Một trình duyệt không phải là một dự án nhỏ.
dự án rất tham vọng nhưng một nhà phát triển không thể làm điều này một mình, bạn cần một nhóm (người quản lý dự án, người kiểm tra ...) và có lẽ bạn nên xem lại lựa chọn ngôn ngữ c # của mình chỉ hoạt động trên windows (tôi biết mono trên linux nhưng nó không phải là giống nhau) dù sao tôi cũng chúc bạn may mắn và tôi sẽ hạnh phúc khi sử dụng trình duyệt của bạn: D
Bạn thực sự có rất nhiều thời gian rảnh rỗi trong tay, phải không? AFAIK, hầu hết các trình duyệt được viết bằng C ++, không phải tất cả người dùng đều cài đặt .NET framework trên máy tính của họ và nếu họ làm như vậy có thể không phải là phiên bản bạn cần.
Điều này có thể khiến bạn mất nhiều năm nhưng dù sao, có rất nhiều trình duyệt mã nguồn mở, FireFox, Google Chrome, v.v., bạn có thể bắt đầu bằng cách xem mã, chúc may mắn với điều đó :)