처음부터 웹 브라우저를 구축하기 위해 노력하기로 결정했습니다. 시작하기 전에 알아야 할 최신 웹 브라우저의 일반적인 기능, 아키텍처 및 기능은 무엇입니까?
모든 권장 사항을 높이 평가합니다!
처음부터 웹 브라우저를 구축하기 위해 노력하기로 결정했습니다. 시작하기 전에 알아야 할 최신 웹 브라우저의 일반적인 기능, 아키텍처 및 기능은 무엇입니까?
모든 권장 사항을 높이 평가합니다!
답변:
그것을 조각으로 나누십시오. 웹 브라우저 란 무엇입니까? 그것은 무엇을합니까? 그것:
그리고 그것은 기본적으로 웹 브라우저입니다. 이제 이러한 작업 중 일부는 매우 복잡합니다. 쉽게 들리는 것조차 어려울 수 있습니다. 외부 콘텐츠를 가져옵니다. 다음과 같은 사용 사례를 처리해야합니다.
나와 다른 사람들이 공동으로 눈썹을 올리는 이유는 렌더링 엔진이 어렵 기 때문입니다 (누군가가 언급했듯이 인간의 세월이 개발에 들어갔습니다). 주변의 주요 렌더링 엔진은 다음과 같습니다.
상위 3 개는 오늘날 사용되는 주요 렌더링 엔진으로 간주되어야합니다.
자바 스크립트 엔진도 어렵습니다. 특정 렌더링 엔진에 연결되는 경향이있는 몇 가지가 있습니다.
물론 페이지 간 탐색, 페이지 기록, 임시 파일 지우기, URL 입력, URL 자동 완성 등과 같은 모든 사용자 인터페이스가 있습니다.
그것은 많은 일입니다.
정말 흥미로운 프로젝트처럼 들리지만 엄청난 노력을 투자해야합니다.
쉬운 일은 아니지만 학문적 관점에서 볼 때 많은 것을 배울 수 있습니다.
확인할 수있는 몇 가지 리소스 :
그러나 현실적인 관점 에서 보았을 때 처음부터 코드를 작성하는 데 필요한 엄청난 노력은이 만화를 생각 나게했습니다.
(출처 : geekherocomic.com )
행운을 빕니다 :-)
대부분의 최신 웹 브라우저는 거대한 짐승이며, 웹 브라우저와 웹 자체가 다소 우연한 방식으로 진화했기 때문에 설계가 상당히 부실합니다.
먼저 프로젝트 의 목표 (그리고 달성하고자하는 것)를 매우 명시 적으로 만드는 것부터 시작해야합니다 . 이것은 당신이 재미로하는 일입니까, 아니면 다른 사람들이 당신의 브라우저를 사용하기를 기대합니까? 다른 사람들이 그것을 사용하기를 기대한다면, 그들에 대한 인센티브는 무엇입니까? 모든 사람이 Chrome, Safari, Firefox, IE, Opera 등의 대체물로 사용할 수있는 새로운 브라우저를 처음부터 개발할 것이라고 기대하는 것은 비현실적입니다. 모든 프로젝트는 10 ~ 15 년 앞당겨 시작됩니다. 당신, 그리고 당신이 그들을 따라 잡을 때, 그들은 당신보다 10-15 년 앞서있을 것입니다. 게다가 그들은 그들 뒤에 훨씬 더 많은 인력을 가지고 있으므로 프로젝트가 성공하기를 원한다면 언젠가는 그 인력이 필요할 것입니다.
많은 자원을 가진 대기업 인 Apple과 Google이 처음부터 시작하지 않은 이유입니다. 마이크로 소프트도 처음부터 시작하지 않았습니다. 원래 IE는 Mosaic을 기반으로했습니다. 오늘날 처음부터 시작된 유일한 중요한 브라우저는 Opera , Konqueror 및 Lynx입니다., 불행히도 모두 시장 점유율이 미미합니다. Lynx는 텍스트 전용 브라우저이고 아마도 여전히 존재하는 유일한 이유는 특정 틈새 시장을 제공하기 때문일 것입니다. Opera는 틀림없이 지금까지 만들어진 최고의 브라우저 중 하나이지만 시장 점유율이 높지 않았으므로 성공과 혁신이 같은 것이 아님을 기억하십시오. KHTML은 Konqueror의 엔진으로, 그 자체로는 성공하지 못했지만 Apple과 Google이 모두 사용하는 WebKit의 기반입니다. KHTML이 만들어지지 않았다면 Safari 나 Chrome도 존재하지 않을 것이라고 분명히 주장 할 수 있다고 생각합니다. 흥미롭게도 KHTML과 Opera는 주로 오슬로의 같은 건물에서 일하는 노르웨이 프로그래머에 의해 제작되었습니다.
운영 체제 구축과 같은 웹 브라우저 구축을 살펴 봐야합니다. 기본적으로 브라우저가 웹 앱을 실행하기위한 운영 체제이기 때문입니다. 운영 체제와 마찬가지로 웹 브라우저는 많은 구성 요소가 포함 된 매우 복잡한 소프트웨어입니다. 물론 사람들은 처음부터 새로운 운영 체제를 만드는 데 성공했습니다. Linus Torvalds가 떠 오릅니다. 그는 지금까지 가장 성공적인 운영 체제 중 하나 인 Linux를 만들었습니다.
물론 새로운 성공적인 OS를 구축하는 것보다 새로운 성공적인 브라우저를 구축하는 것이 더 어려워 지는 또 다른 도전에 직면하게 됩니다. 브라우저는 웹에 떠 다니는 모든 레거시 코드를 완벽하게 실행할 것으로 예상됩니다. 이제 Linus Torvalds가 UNIX 또는 기존 OS와 완벽하게 역 호환되지 않는 한 새로운 OS가 중요하지 않다고 들었다고 가정 해 보겠습니다. 나는 그가 귀찮게했을 것 같지 않다. 그리고 리눅스는 아마도 오늘날 존재하지 않았을 것이다. 물론 현실적으로 리눅스가 인기를 얻게 된 유일한 이유는 그것이 잘 설계되었고 GNU 프로젝트가 엄청난 양의 기존 코드를 리눅스로 이식하기위한 도구를 만들 수 있었기 때문입니다. Linux에 대한 GNU의 이데올로기 적 지원 없이는 결코 기회가 없었을 것입니다.
그래서 당신이 새로운 성공적인 브라우저를 만들기 위해 충분히 야심적이거나 어리 석다고 가정한다면, 당신이 집중해야 할 것은 아키텍처 와 디자인 입니다. 어떤 식 으로든 기존 브라우저의 디자인을 개선 할 수 있다고 확신하지 않는 한 처음부터 새 브라우저를 빌드 할 실질적인 이유가 없습니다. 즉, WebKit 및 Gecko 의 코드를 충분히 숙지하여 그들이 내린 디자인 결정을 이해할 수 있어야하지만, 그렇지 않으면 해당 코드를 사용하는 것이 좋을 수 있으므로 해당 디자인을 복사해서는 안됩니다.
제 개인적인 생각은 (충분한 조사를하지 않은 채) 오늘날의 브라우저가 모듈식이 아니라는 것입니다. 새 브라우저를 만들려고한다면 자바 스크립트 엔진을 다른 것으로 교체하는 것과 같이 쉽게 교체 할 수있는 방법을 찾고 기존 브라우저에서 현재 가지고있는 것보다 훨씬 더 많은 제어 권한을 사용자에게 제공 할 것입니다. . 최신 브라우저와 웹 디자이너는 거의 모든 제어권을 사용자로부터 빼앗 았습니다. 사용자가 내 컴퓨터에 표시되는 콘텐츠를 렌더링하는 방법을 웹 브라우저에 알릴 수없는 이유는 무엇입니까? 원본 HTML은 콘텐츠를 구성하는 방법에 대한 지침 만 제공했으며, 시간이 지남에 따라 새로운 표준이 점점 더 독단적이되어 사용자가 이제 웹 디자이너의 전적인 자비를 받게되었습니다. Linux의 매력은 사용자에게 제어권을 되돌려 주었다는 것입니다.
제가 당신이라면 연구에 시간을 할애 할 또 다른 것은 운영 체제 디자인 원칙입니다. 좋은 브라우저를 설계하려면 적어도 이론적으로는 좋은 OS를 설계하는 것과 동일한 원칙이 필요합니다. 특히 동시 프로세스, 보안 모델 등과 관련하여 그렇습니다.
마지막으로, 많은 연구를 마친 후 여기에서 코딩을 시작해야한다고 생각합니다.
모자이크 리 엔지니어, 그러나 자신의 디자인 아이디어로. 이것은 또한 당신이 단지 재미를 위해 또는 당신 자신의 교육적 이익을 위해 그것을하는 경우에 제가 제안하는 것입니다. 원본 HTML 1.0 및 HTML 2.0 사양, HTTP 1.1 사양 및 현재 URI 사양을 읽고 브라우저가 모든 사양을 준수하는지 확인하세요. 물론 전송 프로토콜, URI 규칙 등을 이미 처리하는 기존 소프트웨어를 다운로드 할 수 있지만, 자신의 브라우저를 디자인하는 데 진지한 경우 이러한 작업을 처음부터 수행하는 것도 좋은 연습이라고 생각합니다. 모든 퍼즐 조각이 어떻게 맞춰 지는지 잘 알 수 있습니다. 0 단계가 끝나면 최소한 90 년대의 최첨단 브라우저와 비슷한 브라우저가 있어야합니다. 이것은 좋은 첫 번째 이정표입니다. 실제로 원본 모자이크를 다운로드 할 수 있습니다.ftp://ftp.ncsa.uiuc.edu/Mosaic/ 및 브라우저와 어떻게 비교되는지 확인하십시오. 현재 웹 사이트가 Mosaic과 같은 고대 브라우저에서 어떻게 렌더링되는지 확인하는 것도 좋은 연습입니다.
브라우저에 DOM 지원을 추가하십시오. 거의 모든 현재 브라우저가 완전히 지원하므로 W3C DOM 레벨 1 및 레벨 2에 먼저 초점을 맞 춥니 다. 그런 다음 레벨 3과 레벨 4를 살펴보십시오. DOM은 웹 프로그래밍의 매우 기본이됩니다. 따라서 실제로 최신 웹 브라우저를 구축하려면 전체 디자인이이를 고려해야합니다. C #으로 브라우저를 작성하고 있으므로 기존 .NET 개체 모델을 활용하는 방법을 고려할 수 있습니다.
기존 스크립팅 엔진을보고 프로젝트에 이식 할 수 있는지 확인합니다. 자체적으로 매우 큰 프로젝트이기 때문일뿐만 아니라 JS 컴파일러 (예 : V8)를 최적화하는 데 이미 많은 작업이 투입 되었기 때문에 자신 만의 JavaScript 인터프리터를 작성하지 않는 것이 좋습니다. 따라서 컴파일러 설계의 전문가가 아니라면 직접 제작 한 JS 인터프리터는 EMCAScript 사양을 완벽하게 따르더라도 이미 나와있는 것보다 열등 할 것입니다. 다시 말하지만, 스크립팅 엔진은 어쨌든 실제 브라우저와는 완전히 별개의 모듈이어야한다고 생각하므로 스크립팅 엔진을 구축하는 것보다 스크립팅 엔진을 대체 할 수있는 프레임 워크를 갖는 것이 훨씬 더 유용 할 것이라고 생각합니다. 브라우저에서만 작동합니다.
북미의 상위 10-20 개 웹 사이트 (Google, Facebook, YouTube, Twitter, Wikipedia, Amazon, 인기 블로깅 플랫폼 등)에 대한 HTML / CSS / JS 소스 코드를 확인하고 이러한 사이트와 잘 작동하도록 브라우저를 엔지니어링합니다. . 이것은 기존의 모든 표준 (현재 브라우저가 아직 완벽하게 수행하지 않는 부분)을 준수하는 브라우저를 만드는 것보다 웹의 모든 웹 사이트를 올바르게 렌더링하는 브라우저를 만드는 것보다 훨씬 더 다루기 쉬운 문제입니다. 그렇게). 사람들은 귀하의 브라우저가 표준을 위반한다고 불평 할 것입니다. 그러나 그것은 사람들이 귀하의 브라우저로 Google이나 Facebook에 액세스 할 수 없다고 불평하는 것만 큼 큰 문제는 아닙니다. 첫 번째 릴리스에서 모든 (또는 대부분) 표준을 올바르게 준수한 브라우저를 생각할 수 없으므로 시도조차하지 마십시오.
자신의 렌더링 엔진을 작성하는 것과 같은 의미입니까?
행운을 빕니다. 다양한 브라우저의 현재 세대에 많은 사람이 들어갔습니다. 둘 중 하나보다 더 잘하고 싶다면 심각한 기술이 필요합니다. 어디서부터 시작해야하는지 물어야한다면 그러한 작업을 시도하는 것이 합리적이기 전에 몇 년 이상의 연구를 거쳐야 할 것입니다.
즉, 다음은 몇 가지 (명백한) 포인터입니다.
여기 아래에서 편집
동기를 부여하거나 동기를 떨어 뜨리는 것이 아니라 브라우저가 정말 큰 프로젝트이며 정말 큰 프로젝트에는 많은 생각이 필요하다는 것을 보여 주려는 시도였습니다. 무뚝뚝한 정직함에 유머가 뿌려졌습니다.
저는 제 인생의 3 분의 2 이상을 프로그래밍 해 왔고 제가 꽤 괜찮은 프로그래머라고 생각하고 싶지만, 괜찮은 웹 브라우저를 처음부터 작성하는 데 절반의 기회가있을 것이라고 생각하는 것은 어리석은 일입니다. .
물론 이것이 당신이 원하는 일이라면 내 의견이 당신을 방해하지 않도록하십시오. Internet Explorer보다 더 잘할 수 있습니다.
이 프로젝트는 엄청나게 야심 찬 프로젝트이지만 (특히 단일 개발자를위한) 언젠가하고 싶은 일입니다.이 프로젝트에서 많은 것을 배울 수 있습니다.
프로토콜이 어떻게 작동하는지 (확실히 조사해야 할 사항) 또는 브라우저에서 진행되는 작업에 대해 많이 알지 못하지만 시작하기에 좋은 곳은 주로 Chrome 및 Firefox. Chrome은 브라우저의 크롬과 백엔드와 같이 내가 시작할 것으로 기대하는 작업 만 수행하기 때문에 특히 좋은 프로젝트입니다. 처음에는 렌더링 엔진을 만드는 것을 잊어 버려-Webkit 또는 Gekko를 사용하십시오.
다른 사람들이 이미 말했듯이 웹 브라우저는 거대한 프로젝트입니다. 사람들이 기대하는 모든 것을 생각하기 전에 tcp / ip & sockets, html 렌더링, css 사용, DOM 모델 생성, 자바 스크립트 실행, 잘못된 마크 업 및 코드 처리, 모든 유형의 파일 처리에 대해 걱정해야합니다. 브라우저 (예 : 북마크, 기록, 개인 브라우징, 보안 등) 그것은 거대한 프로젝트입니다.
즉, 할 수 있습니다. 내 제안은 Firefox의 소스를 살펴 보는 것입니다. 브라우저를 처음부터 만들고 싶다고 말씀 하셨지만 먼저 오픈 소스 프로젝트에서 배우는 것이 매우 도움이 될 것 입니다.
Firefox 소스를 다운로드하고 천천히 제거합니다. 즉, 소스를 가져 와서 모든 북마크 기능을 제거 합니다. 그런 다음 애드온을 처리하는 기능을 제거합니다. 그런 다음 파일 저장과 관련된 모든 코드를 삭제합니다. 아주 기본적인 웹 브라우저를 얻을 때까지이 과정을 계속할 것 입니다. 그 코드를 살펴 보겠습니다.
그런 다음 내 자신을 만들기 시작합니다. 저는 Firefox를 분해하여 얻은 지식을 가져 와서 새 브라우저를 만드는 데 사용했습니다.
행운의 훨씬 당신에게!
exe
파일을 얻고 , 설치할 때 많은 dll
파일 이있는 소스 폴더를 얻습니다 . 이 작업을 수행 한 실제 코드와이를 뒷받침하는 논리를 어떻게 연구합니까?
Udacity의 지금 "웹 브라우저를 구축"이라는 과정을 가지고 - https://www.udacity.com/course/programming-languages--cs262
당신은 정말로 당신의 손에 많은 자유 시간을 가지고 있지 않습니까? AFAIK, 대부분의 브라우저는 C ++로 작성되었으며 모든 사용자가 자신의 컴퓨터에 .NET 프레임 워크를 설치 한 것은 아니며 필요한 버전이 아닐 수도 있습니다.
몇 년이 걸릴 수 있지만 어쨌든 많은 오픈 소스 브라우저, FireFox, Google Chrome 등이 있습니다. 코드를 살펴 보는 것으로 시작할 수 있습니다. 행운을 빕니다. :)