Webpack e carico lento per applicazioni Web su larga scala

3

Sfondo

Sto cercando di sviluppare con Webpack e JavaScript. Webpack raggrupperebbe tutto il codice sorgente in un singolo file. Quando l'applicazione diventa grande, il file potrebbe essere molto grande e causare un impatto negativo sulle prestazioni.

Webpack

Funzionalità fornita dal pacchetto Web denominata suddivisione del codice che dividerebbe l'output del gruppo in diversi secondo il punto di ingresso predefinito. Aiuterà ad aumentare le prestazioni se l'applicazione diventa troppo grande. Tuttavia, ha richiesto di ristrutturare l'applicazione e comprendere a fondo l'applicazione, quindi l'applicazione spitted in diversi moduli che sarebbero i punti di ingresso per la compilazione. Inoltre, richiederebbe la modifica del codice quando un altro è obbligato a chiamare la funzione tramite il caricamento lento.

SystemJs

SystemJs è un caricatore di moduli Es dinamico che caricherà il modulo richiesto in runtime.

Domanda

Devo usare webpack per applicazioni di grande vendita?

Soluzione possibile

Il codice sorgente JavaScript Il raggruppamento è necessario per applicazioni di grandi dimensioni, ma l'applicazione può essere distribuita in sottomoduli e può essere lazy load nell'applicazione se il sottomodulo viene caricato.

Aggiorna

Proposta stage 3 specifica la sintassi di importazione dinamica che avrebbe usato per risolvere il mio problema (carico pigro per parte specifica).

import('./test.js').then(function(Test){
  var test = new Test.default();
  test.doSomething()
})

Che è simile a

import Test from './test';
var test = new Test();
test.doSomething();

Supporto per il Webpack

Richiesto per configurare il percorso pubblico, chunkFilename e aggiungere syntax-dynamic-import per abilitare la nuova sintassi (import ()).

const path = require('path');

module.exports = {
    entry: {
        app:    './src/app.js'
    },
    output: {
        publicPath: 'bin/',
        path: path.resolve(__dirname, 'bin'),
        filename: '[name].bundle.js',
        chunkFilename: '[name].bundle.js'
    },
    devtool: 'source-map',
    module: {
        loaders: [
            {
                test: /\.js$/,
                loaders: [
                    {
                        loader: 'babel-loader',
                        options: {
                            presets: ['es2015'],
                            plugins: ["syntax-dynamic-import"]
                        }
                    }
                ]               
            }
        ]
    }
}; 
    
posta Ben Cheng 02.12.2017 - 13:44
fonte

1 risposta

3

Tutti gli strumenti di caricamento e raggruppamento JavaScript maturi, da Webpack a RequireJS a SystemJS, forniscono le tecniche per farlo.

In Webpack è abilitato da una funzionalità nota come suddivisione del codice .

In SystemJS è abilitato da funzionalità come l'aritmetica dei pacchetti, la cache di dep e l'iniezione di bundle e viene fornito da JSPM o dall'uso diretto di SystemJS Builder.

Ho dimenticato la terminologia di RequireJS ma la funzionalità esiste anche lì ed è fornita da r.js .

Quindi cerca solo.

Tuttavia, per rispondere alla domanda diretta, tutti questi strumenti, incluso il Webpack, sono adatti per lo sviluppo di applicazioni di grandi dimensioni. In effetti eccellono in questo. La mia preferenza personale non è per Webpack ma piuttosto per JSPM.

Come nota Ben Cheng, l'approccio di suddivisione del codice di Webpack richiede di strutturare la tua applicazione in termini di diversi punti di ingresso, che puoi considerare moralmente come sotto-pacchetti o sotto-app. Detto questo, questa tecnica di strutturazione gioca un ruolo nel dividere i bundle in tutti questi strumenti.

Rompere la tua applicazione in queste unità più indipendenti può essere un compito difficile.

Dichiarazione di non responsabilità: sono un membro del team JSPM

    
risposta data 02.12.2017 - 14:34
fonte