Per la vostra prima domanda, prendere in considerazione le cose che un browser moderno ha bisogno per implementare (alcuni browser spingono una parte di questo lavoro fuori ai servizi del sistema operativo):
- Diversi parser: XML, HTML, JavaScript, CSS, almeno.
- Almeno quattro sistemi di layout separati (modello box CSS, flexbox, SVG, MathML).
- Almeno una libreria grafica; per i browser multipiattaforma ciò richiede backend per piattaforma (IE9 + utilizza solo la libreria di sistema Direct2D, Safari su Mac utilizza Quartz per quanto ne so).
- Una macchina virtuale ad alte prestazioni con JIT, un garbage collector, un po 'una libreria standard (in continua crescita, vedere array digitati e varie altre funzionalità JavaScript recenti).
- Un'implementazione DOM, che include varie cose come le interfacce DOM specifiche per HTML e SVG e così via.
- Funzionalità di elaborazione audio e video (di nuovo Safari su Mac e IE scaricano questi nel sistema operativo).
- Strutture di elaborazione delle immagini, con supporto per almeno JPG/GIF/PNG. Ancora una volta, alcuni browser potrebbero essere in grado di scaricare parti di questo nel sistema operativo.
- Una libreria per la conversione di flussi di byte in caratteri Unicode. Ancora una volta, a volte questo può essere scaricato sul sistema operativo e talvolta no.
- Per i browser multipiattaforma, una sorta di livello di portabilità che astrae i bit specifici della piattaforma.
- Un editor HTML con transazioni e un'API programmabile; pensa contenteditable.
- Un editor di testo in chiaro per i textareas. Alcuni di questi possono essere condivisi con l'editor HTML, forse.
- Un correttore ortografico, che può o meno essere scaricato nel sistema operativo.
- Una libreria di rete che supporta HTTP, forse SPDY, probabilmente FTP e forse qualche altro protocollo. Ancora una volta, questo può o non può essere scaricato sul sistema operativo.
- Una libreria di crittografia per gestire SSL e varie altre esigenze di crittografia. Ancora una volta, questo può o non può essere scaricato sul sistema operativo.
- Almeno un'implementazione del database (sqlite sembra essere popolare).
- Codice vario per l'interfaccia utente reale e quant'altro.
- Codice di colla per gestire le interazioni tra tutti questi: codice che gestisce le chiamate avanti e indietro tra JavaScript e DOM, codice che gestisce il ricalcolo di stile e informazioni di layout quando il DOM cambia, codice che gestisce cose come
document.write
iniettando stringhe da JavaScript nel flusso di input del parser e così via. Si noti che la quantità di codice della colla è generalmente quadratica nel numero di moduli interagenti.
Probabilmente mi mancano alcune cose, ma questo è fuori di testa.
In aggiunta a questo, almeno Gecko e WebKit dispongono di librerie di modelli per elementi come stringhe e matrici (poiché le librerie standard C++ presentano vari svantaggi).
Per il resto ... a questo punto molti "hack di compatibilità" sono in realtà parte degli standard Web. Quindi non puoi evitarli esattamente. Lo scenario parla di JavaScript e HTML ma non di SVG o MathML o CSS. Se in realtà intendi solo HTML e JavaScript ma non CSS o il resto, potresti ovviamente ritagliare un po 'di codice. Se includi tutti questi elementi, oltre alle funzionalità audio e video di HTML5 e desideri che il tuo browser funzioni bene, dubito che tu possa renderlo molto più piccolo.
fonte
2011-12-15 07:44:26
+1 per il corollario. – Thilo