2011-12-15 12 views
5

Le codebase per i browser Web moderni come Chrome, Firefox e Safari (WebKit) sono piuttosto grandi. Sono curioso di sapere cosa rende le loro implementazioni così semplici da non aver bisogno di grandi quantità di codice.Perché i codebase per i browser Web moderni sono così grandi?

Come domanda correlata, se un ipotetico browser supportava solo HTML5 e JavaScript rigidi, per evitare gli hack della compatibilità, il codebase sarebbe significativamente più piccolo?

+0

+1 per il corollario. – Thilo

risposta

7

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):

  1. Diversi parser: XML, HTML, JavaScript, CSS, almeno.
  2. Almeno quattro sistemi di layout separati (modello box CSS, flexbox, SVG, MathML).
  3. 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).
  4. 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).
  5. Un'implementazione DOM, che include varie cose come le interfacce DOM specifiche per HTML e SVG e così via.
  6. Funzionalità di elaborazione audio e video (di nuovo Safari su Mac e IE scaricano questi nel sistema operativo).
  7. 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.
  8. 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.
  9. Per i browser multipiattaforma, una sorta di livello di portabilità che astrae i bit specifici della piattaforma.
  10. Un editor HTML con transazioni e un'API programmabile; pensa contenteditable.
  11. Un editor di testo in chiaro per i textareas. Alcuni di questi possono essere condivisi con l'editor HTML, forse.
  12. Un correttore ortografico, che può o meno essere scaricato nel sistema operativo.
  13. 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.
  14. 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.
  15. Almeno un'implementazione del database (sqlite sembra essere popolare).
  16. Codice vario per l'interfaccia utente reale e quant'altro.
  17. 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.

+0

Forse la metà delle dimensioni - ma non dieci volte più piccole, IMHO. –

+0

Si potrebbe quasi certamente scendere a circa 1/3 del codice o meno se si è disposti a tornare alle funzionalità web circa 2001 meno CSS ... Ma è difficile dire con certezza. –

+1

Stavo pensando: gli attuali browser web si sono concentrati sugli standard e sul rapido sviluppo. Se una squadra focalizzata fosse messa al servizio di creare una versione snella, credo nelle meraviglie. –

1

Penso che i browser Web moderni siano app complicate. Principalmente, hanno motori di rendering che devono gestire diversi tipi di HTML, capacità di gestire formati non HTML (come XML, RSS ecc.), Gestori CSS, motori Javascript a volte con un JIT.

Oltre a ciò, hanno architetture di plug-in e API, parti per astrarre le differenze tra le piattaforme e vengono generalmente create utilizzando i componenti utilizzati da altre app.

Questo li rende piuttosto non banali. Per quanto riguarda il tuo collettivo, penso di si. Lynx è piuttosto piccolo e non supporta Javascript o codice HTML elaborato.

+0

Lynx è un cattivo esempio. Supporta solo il codice HTML più vecchio possibile. La domanda era se ci si fosse limitati solo al codice HTML più recente e conforme agli standard (senza riguardo alle peculiarità dell'eredità), ciò avrebbe comportato una base di codice significativamente più snella (o solo leggermente più semplice). – Thilo

+0

Volevo solo sottolineare che meno funzioni supportate, maggiore sarebbe il browser. Lancia l'API plugin e diventerebbe più semplice. Allo stesso modo per il resto delle funzionalità. Lynx è un esempio "estremo". –

Problemi correlati