23 puntos por credible 2026-01-28 | 14 comentarios | Compartir por WhatsApp

¡Hola! Soy un estudiante de último año de preparatoria que está por entrar a la carrera de Ingeniería en Computación.
Durante 8 semanas hice desde cero un pequeño motor de navegador usando C++ y Qt.
Como fue mi primera vez usando C++, tuve muchísimos ensayos y errores, pero aprendí mucho al llevar directamente a código los elementos clave del pipeline de renderizado.

Implementé todo el pipeline de renderizado dividiéndolo en 5 etapas:

  1. Análisis de la cadena HTML y creación del árbol DOM (incluyendo corrección de errores)

  2. Parseo de reglas CSS y cálculo de Computed Style mediante Cascade

  3. Cálculo de posición y tamaño de cajas basado en el modelo block/inline

  4. Caché y carga de imágenes, y procesamiento del recálculo de layout (Reflow)

  5. Painting final usando Qt Graphics View Framework

Como es código escrito en C++ que apenas estoy aprendiendo, seguramente tiene muchas carencias.
¡Si me pudieran dar feedback sobre la estructura del código o sobre cómo mejorarlo, lo agradecería mucho!

Pueden ver más detalles en https://github.com/beginner-jhj/mini_browser/blob/main/README.ko.md

14 comentarios

 
baeba 2026-02-02

Antes que nada, mis felicitaciones.
Pensar en crear un navegador web...

Ahora que ya tuviste una buena experiencia...
podrías descargar el código de Chromium...
probar compilarlo
y también sería bueno pasar por la experiencia de analizarlo.

Porque la creación es la madre de la imitación.

 
conanoc 2026-02-02

Qué trabajo tan interesante hicieron. Creo que habrían podido aprender aún más si lo hubieran hecho directamente sin usar Claude, pero como aprovechar la IA es la tendencia, también me parece que fue una buena experiencia.

Por darles una idea, ¿qué tal si, a partir de esta experiencia, crean un parser de etiquetas og?
Las etiquetas og son información simple, como la imagen miniatura principal configurada en una página web; traer eso es una tarea sencilla si se usa un parser de DOM, pero existe el problema de que un parser de DOM es pesado.
Así que, en lugar de usar otro parser de DOM y sin parsear todo el DOM completo, si implementan un parser pequeño y eficiente que simplemente obtenga la información de ciertas etiquetas específicas, podría convertirse en una librería muy útil.

Sobre todo en apps móviles he sentido la falta de una librería así. Si la hicieran para mobile usando JavaScript/Kotlin/Swift, podría convertirse en una librería open source muy popular.

 
lux1024 2026-01-29

Solo recuerdo haberme divertido muchísimo desde que terminó el CSAT hasta que entré a la universidad... Pero al leer el README, parece que entendiste muy bien los puntos clave. Yo también leí este libro y hasta lo implementé en swift. Jaja.

 
ffdd270 2026-01-30

Uy, ¿de qué libro será, por casualidad? Leí el README una vez, pero no parece que mencione ningún libro...!

 
lux1024 2026-01-31

No estaba en el README. Como el contenido se parecía al del libro, me confundí... perdón;;;

Es un libro llamado 'Desde cero: navegador web'. Los ejemplos del libro están implementados en Python.

 
ffdd270 2026-01-31

Muchísimas gracias por avisar :D ¡Tendré que echarle un vistazo rapidito en Kyobo Book Centre..!

 
taptaps 2026-01-29

Cuando estaba en el último año de prepa, como sabía más o menos instalar Linux APM, andaba de fanfarrón en comunidades de desarrollo.
Uf, no manches.

 
autumnal 2026-01-29

¡Lo leí y me gustó mucho!

Creo que desde el hecho de haber puesto esfuerzo e intentado hacerlo ya es de primer nivel. El README parecía casi un informe, así que fue todavía más interesante.

Me da curiosidad ver qué será lo próximo jaja

 
cpuz158 2026-01-28

Eres realmente impresionante.
Lo revisé por encima, pero cuando yo estaba en mi último año de preparatoria ni siquiera me habría atrevido a imaginar algo así. Espero que estudies bien CS y te conviertas en un gran ingeniero.

 
credible 2026-01-28

¡Gracias! ¡Me esforzaré mucho para crecer y convertirme en un excelente ingeniero!

 
rycont 2026-01-28

¡Lo leí muy entretenido y me gustó mucho! Personalmente quería preguntarte algo: ¿habrá alguna forma de contactarte?

 
credible 2026-01-28

¡Muchísimas gracias por leer este texto tan largo! Pueden contactarme en hj5014221@gmail.com.

 
vb6ko 2026-01-28

Parece que el enlace está roto :(

 
credible 2026-01-28

¡Ah, les comparto el enlace del repo principal! https://github.com/beginner-jhj/mini_browser