Decidí esforzarme en construir un navegador web desde cero. ¿Cuáles son las funciones, arquitecturas y características comunes de los navegadores web modernos que debería conocer antes de comenzar?
¡Cualquier recomendación es muy apreciada!
Decidí esforzarme en construir un navegador web desde cero. ¿Cuáles son las funciones, arquitecturas y características comunes de los navegadores web modernos que debería conocer antes de comenzar?
¡Cualquier recomendación es muy apreciada!
Respuestas:
Bueno, rómpelo en pedazos. ¿Que es un navegador web? ¿Qué hace? Eso:
Y eso es básicamente un navegador web en pocas palabras. Ahora bien, algunas de estas tareas son increíblemente complejas. Incluso los que suenan fáciles pueden ser difíciles. Toma la búsqueda de contenido externo. Necesita lidiar con casos de uso como:
La razón por la que otros y yo estamos levantando nuestras cejas colectivamente es que el motor de renderizado es difícil (y, como alguien señaló, han pasado años en su desarrollo). Los principales motores de renderización son:
Los tres primeros deben considerarse los principales motores de renderizado que se utilizan en la actualidad.
Los motores de JavaScript también son difíciles. Hay varios de estos que tienden a estar vinculados al motor de renderizado en particular:
Y, por supuesto, está todo el material de la interfaz de usuario: navegación entre páginas, historial de páginas, borrar archivos temporales, escribir una URL, completar automáticamente las URL, etc.
Eso es mucho trabajo.
Suena como un proyecto realmente interesante, pero requerirá que inviertas un esfuerzo enorme.
No es fácil, pero desde un punto de vista académico, podrías aprender mucho de él.
Algunos recursos que podrías consultar:
Pero viéndolo desde un punto de vista realista , el enorme esfuerzo necesario para codificarlo desde cero me recordó este cómic:
(fuente: geekherocomic.com )
Buena suerte :-)
La mayoría de los navegadores web modernos son bestias gigantes, y probablemente estén bastante mal diseñados porque ellos (y la propia web) evolucionaron de una manera bastante desordenada.
Primero debe comenzar haciendo muy explícitos los objetivos de su proyecto (y lo que espera lograr). ¿Es esto algo que solo hace por diversión o espera que otras personas usen su navegador? Si espera que otros lo usen, ¿cuál será el incentivo para ellos? No es realista esperar que desarrolle un nuevo navegador desde cero que todos puedan usar como reemplazo de Chrome, Safari, Firefox, IE, Opera, etc. Todos esos proyectos tienen una ventaja de 10 a 15 años. usted, y para cuando los alcance, estarán otros 10-15 años por delante de usted. Además, tienen mucha más mano de obra detrás de ellos, por lo que si desea que su proyecto tenga éxito, necesitará esa mano de obra en algún momento.
Ésta es la razón por la que Apple y Google, grandes empresas con muchos recursos, no partieron de cero. Ni siquiera Microsoft empezó de cero. El IE original se basó en Mosaic. Los únicos navegadores importantes que aún existen hoy en día y que comenzaron desde cero son Opera , Konqueror y Lynx., que lamentablemente todos tienen una participación de mercado minúscula. Olvidémonos de Lynx por el momento, ya que es un navegador de solo texto y presumiblemente la única razón por la que todavía está disponible es porque sirve para ese nicho específico. Opera es posiblemente uno de los mejores navegadores jamás creados y, sin embargo, nunca ha tenido una gran cuota de mercado, así que recuerda que el éxito y la innovación no son lo mismo. KHTML es el motor detrás de Konqueror, que nunca tuvo mucho éxito, pero es la base de WebKit que utilizan tanto Apple como Google. Creo que definitivamente se podría argumentar que si KHTML nunca se hubiera creado, ni Safari ni Chrome existirían. Curiosamente, tanto KHTML como Opera fueron producidos en gran parte por programadores noruegos que trabajaban en el mismo edificio en Oslo.
Debe considerar la construcción de un navegador web como construir un sistema operativo, porque eso es esencialmente lo que es un navegador: es un sistema operativo para ejecutar aplicaciones web. Y al igual que un sistema operativo, un navegador web es una pieza de software muy compleja con muchos componentes. Por supuesto, la gente ha tenido éxito en la creación de nuevos sistemas operativos desde cero. Me viene a la mente Linus Torvalds. Hizo Linux, uno de los sistemas operativos más exitosos de la historia.
Por supuesto, se enfrenta a un desafío adicional, que hace que construir un nuevo navegador exitoso sea más difícil que crear un nuevo SO exitoso . Se espera que los navegadores ejecuten sin problemas todo el código heredado que flota en la web. Ahora suponga que a Linus Torvalds se le ha dicho que su nuevo sistema operativo no importaría a menos que fuera perfectamente compatible con UNIX o algún sistema operativo existente. Dudo que se hubiera molestado, y probablemente Linux no existiría hoy. De manera realista, por supuesto, la única razón por la que Linux se hizo popular fue porque estaba bien diseñado y el proyecto GNU era capaz de crear herramientas para portar grandes cantidades de código existente a Linux. Sin el apoyo ideológico de GNU para Linux, nunca habría tenido la oportunidad.
Entonces, asumiendo que realmente eres lo suficientemente ambicioso (o temerario) como para intentar hacer un nuevo navegador exitoso, en lo que deberías centrarte es en la arquitectura y el diseño . No hay ninguna razón práctica para crear un nuevo navegador desde cero a menos que esté seguro de que puede mejorar el diseño de los navegadores existentes de alguna manera. Eso significa que debe familiarizarse lo suficiente con el código de WebKit y Gecko para comprender las decisiones de diseño que tomaron, pero no debería intentar copiar su diseño porque, de lo contrario, también podría usar su código.
Mi opinión personal (sin haber investigado lo suficiente) es que los navegadores actuales no son lo suficientemente modulares. Si fuera a hacer un nuevo navegador, encontraría una manera de facilitar el intercambio de cosas (como reemplazar un motor de JavaScript por otro) y darle al usuario mucho más control del que tiene actualmente con los navegadores existentes. . Los navegadores y diseñadores web modernos le han quitado casi todo el control al usuario. ¿Por qué yo, el usuario, no puedo decirle al navegador web cómo quiero que represente el contenido que se muestra en mi máquina? El HTML original solo daba pautas sobre cómo estructurar el contenido y, con el tiempo, los estándares más nuevos se han vuelto cada vez más dogmáticos, hasta el punto en que el usuario está ahora a merced total del diseñador web. El atractivo de Linux fue que devolvió el control al usuario, y que '
La otra cosa en la que dedicaría tiempo a investigar, si fuera usted, son los principios de diseño del sistema operativo. Diseñar un buen navegador, al menos en teoría, debería requerir los mismos principios que diseñar un buen sistema operativo, especialmente en lo que respecta a procesos concurrentes, modelos de seguridad, etc.
Finalmente, después de haber investigado mucho, aquí es donde deberías comenzar a codificar, creo:
Mosaico de reingeniería, pero con tus propias ideas de diseño. Esto también es lo que sugeriría si lo hace por diversión o para su propio beneficio educativo. Lea las especificaciones originales de HTML 1.0 y HTML 2.0, así como las especificaciones HTTP 1.1 y las especificaciones URI actuales, y asegúrese de que su navegador cumpla con todas esas especificaciones. Por supuesto, puede descargar software existente que ya maneja los protocolos de transporte, las convenciones URI, etc., pero si se toma en serio el diseño de su propio navegador, creo que es un buen ejercicio hacer estas cosas también desde cero, para que obtenga un buen sentido de cómo encajan todas las piezas del rompecabezas. Al final del paso 0, debería tener un navegador que sea al menos comparable a lo que era el estado de la técnica en los años 90. Este es un buen primer hito. Y puedes descargar el mosaico original enftp://ftp.ncsa.uiuc.edu/Mosaic/ y vea cómo se compara con su navegador. También es un buen ejercicio para ver cómo se procesan los sitios web actuales en un navegador antiguo como Mosaic.
Agregue soporte para DOM a su navegador. En primer lugar, céntrese en el nivel 1 y el nivel 2 del DOM del W3C, ya que prácticamente todos los navegadores actuales los admiten por completo. Luego, mire el Nivel 3 y el Nivel 4. El DOM es extremadamente fundamental para la programación web, por lo que si realmente va a construir un navegador web moderno, todo el diseño debe tener esto en cuenta. Dado que está escribiendo el navegador en C #, es posible que desee tener en cuenta cómo podría aprovechar el modelo de objetos .NET existente para su beneficio.
Mire los motores de secuencias de comandos existentes y vea si puede portarlos a su proyecto. Le desaconsejaría escribir su propio intérprete de JavaScript, no solo porque es un proyecto muy grande en sí mismo, sino porque ya se ha trabajado mucho para optimizar los compiladores JS (por ejemplo, V8). Entonces, a menos que sea un gurú en el diseño de compiladores, su intérprete JS construido a mano probablemente será inferior a lo que ya existe, incluso si sigue las especificaciones de EMCAScript a la perfección. Nuevamente, creo que el motor de secuencias de comandos debería ser algo que sea un módulo completamente separado del navegador real de todos modos, por lo que creo que sería mucho más útil tener un marco que le permita sustituir cualquier motor de secuencias de comandos, en lugar de construir un motor de secuencias de comandos. que solo funciona con su navegador.
Mire el código fuente HTML / CSS / JS de los 10-20 sitios web principales en América del Norte (Google, Facebook, YouTube, Twitter, Wikipedia, Amazon, plataformas de blogs populares, etc.) y diseñe su navegador para que funcione bien con estos sitios. . Este es un problema algo más manejable de resolver que hacer un navegador que se adhiera a todos los estándares existentes (algo que los navegadores actuales todavía no hacen perfectamente) y mucho menos hacer un navegador que muestre correctamente todos los sitios web en la web (nadie puede Haz eso). La gente se quejará de que su navegador rompe los estándares y demás, pero eso no es un problema tan grande como las personas que se quejan de que no pueden acceder a Google o Facebook con su navegador. No puedo pensar en ningún navegador que haya seguido correctamente todos (o incluso la mayoría) de los estándares en su primera versión, así que digo que ni siquiera se moleste en intentarlo.
¿Te refieres a escribir tu propio motor de renderizado?
Solo puedo decir buena suerte. Han pasado muchos años en la generación actual de los distintos navegadores. Si quiere hacerlo mejor que cualquiera de ellos, necesitará algunas habilidades serias. Si tiene que preguntar por dónde empezar, probablemente tenga más de unos pocos años de estudio antes de que tenga sentido intentar tal tarea.
Dicho esto, aquí hay algunos consejos (obvios):
editar aquí abajo
No quise que fuera motivador o desmotivador, solo un intento de mostrarle que un navegador es un proyecto realmente grande y que los proyectos realmente grandes requieren mucho pensamiento. Franca honestidad salpicada de humor.
He programado más de dos tercios de mi vida y me gusta pensar que soy un programador bastante decente, pero sería una tontería pensar que tendría la mitad de la oportunidad de escribir un navegador web decente desde cero. .
Por supuesto, si esto es lo que quieres hacer, no dejes que mi comentario se interponga en tu camino. Probablemente pueda hacerlo mejor que Internet Explorer.
Es un proyecto increíblemente ambicioso (especialmente para un solo desarrollador), pero algo que me encantaría hacer algún día, podrías aprender mucho de él.
No sé mucho sobre cómo funcionan los protocolos (algo que definitivamente necesitas investigar) o mucho sobre lo que sucede en un navegador, pero un buen lugar para comenzar sería la fuente de los navegadores de código abierto, principalmente Chrome y Firefox. Chrome es un proyecto especialmente bueno para mirar, ya que solo hacen lo que espero que comiences con: Chrome y el backend del navegador. Olvídese de crear un motor de renderizado al principio: use Webkit o Gekko.
Como ya han dicho todos los demás, un navegador web es un proyecto enorme. Tienes que preocuparte por tcp / ip & sockets, renderizar html, usar css, crear un modelo DOM, ejecutar javascript, lidiar con marcado y código mal formados y manejar todo tipo de archivos antes de que puedas pensar en todas las cosas que la gente espera de un navegador (es decir, marcadores, historial, navegación privada, seguridad, etc.) es un proyecto enorme.
Dicho esto, se puede hacer. Mi sugerencia sería buscar la fuente de Firefox. Sé que dijiste que querías construir un navegador desde cero, pero sería muy útil aprender primero de un proyecto de código abierto.
Descargaría la fuente de Firefox y la eliminaría lentamente. En otras palabras, tomaría la fuente y eliminaría todas las funciones de marcadores. Luego, eliminaría la capacidad de manejar complementos. Luego, eliminaría todo el código relacionado con guardar archivos. Continuaría con este proceso hasta obtener un navegador web muy básico. Revisaría ese código.
Entonces, empezaría a construir el mío. Tomaría el conocimiento que había adquirido al desarmar Firefox y lo pondría en la construcción de un nuevo navegador.
¡ Mucha suerte para ti!
exe
archivo, al instalarlo, obtengo una carpeta de origen con muchos dll
archivos. ¿Cómo estudio el código real que hizo esto y la lógica que está detrás de esto?
Udacity ahora tiene un curso llamado "Construyendo un navegador web" - https://www.udacity.com/course/programming-languages--cs262
Puede comenzar con XHTML válido y bien formado, que debería ser más fácil que la sopa de etiquetas que su navegador encontrará en la "vida" real.
Luego, debe encontrar una manera de adaptar el HTML real de la web a sus necesidades.
Pero no se engañe: un navegador no es un proyecto pequeño.
proyecto muy ambicioso, pero un desarrollador no puede hacer esto solo, necesita un equipo (gerente de proyecto, probadores ...) y tal vez debería revisar su elección de lenguaje c # funciona solo en Windows (sé mono en Linux pero no es el mismo) de todos modos le deseo buena suerte y estaré feliz de usar su navegador: D
Realmente tienes mucho tiempo libre en tu mano, ¿no es así? AFAIK, la mayoría de los navegadores fueron escritos en C ++, no todos los usuarios tienen el marco .NET instalado en sus computadoras y, si lo tienen, puede que no sea la versión que necesita.
Esto podría llevarte años, pero de todos modos, hay muchos navegadores de código abierto, FireFox, Google Chrome, etc., podrías comenzar por echar un vistazo al código, buena suerte con eso :)