È buona norma avere un pacchetto per visualizzazione in Asp Net MVC

6

Poiché il raggruppamento e la minimizzazione riguardano l'ottimizzazione e il caricamento delle pagine più veloce, mi sembra logico creare un pacchetto per gli script e un pacchetto per gli stili per visualizzazione, in modo da caricare tutti gli script e gli stili a il browser dovrà effettuare al massimo 2 richieste. Quindi diciamo che ho un _Layout.cshtml dove ho bisogno di 3 file js bootstrap.js , jquery.js e alcuni custom1.js Posso creare un pacchetto, qualcosa del genere:

bundles.Add(new ScriptBundle("~/bundles/layout").Include(
          "~/Scripts/bootstrap.js",
          "~/Scripts/jquery.js",
          "~/Scripts/custom1.js"));

Diciamo che ho un'altra vista User.cshtml dove ho bisogno di bootstrap.js , jquery.js e custom2.js , di nuovo creo un pacchetto:

bundles.Add(new ScriptBundle("~/bundles/user").Include(
          "~/Scripts/bootstrap.js",
          "~/Scripts/jquery.js",
          "~/Scripts/custom2.js"));

Lo stesso approccio può essere utilizzato per i pacchetti di stile. Ma da quello che vedo non è una pratica comune farlo in questo modo solitamente vengono creati dei bundle sulla base del tipo, ad esempio uno per il bootstrap, uno per jquery, uno per i file js / css personalizzati ecc. Ma non lo farebbe aumentare il tempo di caricamento della pagina, perché avere più pacchetti significa più richiesta al server. Inoltre, qual è il problema di fare le cose come ho descritto all'inizio?

    
posta Mykhailo Seniutovych 02.07.2017 - 09:01
fonte

3 risposte

2

Penso che potrebbe persino essere controproducente utilizzare un singolo pacchetto per pagina.

C'è un sovraccarico per la creazione del pacchetto ... anche se il sovraccarico si verifica una volta per istanza dell'applicazione (viene memorizzato nella cache dall'applicazione dopo la prima chiamata), ma se si dispone di un nuovo pacchetto per ogni pagina, ciò significa che ogni pagina distinta che visiti, un nuovo pacchetto deve essere creato prima che possa essere servito. Penso che lo scopo dei pacchetti sia lo stesso, credo.

Al contrario, di solito ho due pacchetti: un pacchetto principale che ogni pagina dovrebbe richiedere e difficilmente cambierà una volta che il progetto iniziale è stato impostato. Ciò include gli stili core, jQuery / knockout, altre librerie di base-vendor.

Il secondo pacchetto di solito è il contesto per applicazione (ad esempio, il pacchetto Users potrebbe avere roba modulare relativa agli utenti in generale, ma non necessariamente a una pagina specifica).

Qualunque cosa sia specifica per una pagina di solito non entra nemmeno in un pacchetto.

L'effetto pratico del bundling (almeno per le applicazioni aziendali che tendo a scrivere) non è poi così grande, considerando che una volta che il client l'ha chiamato la prima volta, è lì finché non cambia di nuovo comunque.

Se disponi di un sito pubblico in cui prevedi un numero maggiore di visitatori per la prima volta, potresti adottare un approccio leggermente diverso.

    
risposta data 02.07.2017 - 15:45
fonte
3

No.

A causa del caching del browser, ottieni i migliori risultati complessivi utilizzando lo stesso bundle o bundle su tutte le pagine. Ciò significa che l'utente scaricherà tutti i css e js quando raggiungono la prima pagina e riutilizzano quel file nelle pagine successive.

Dato che la maggior parte del bundle sarà impacchettato in framework javascript come jquery e bootstrap. I pochi byte aggiuntivi di codice personalizzato hanno un effetto insignificante sulla velocità di caricamento complessiva della pagina.

    
risposta data 02.07.2017 - 11:39
fonte
2

Lo svantaggio di un pacchetto per pagina è che il pacchetto memorizzato nella cache da una pagina non può essere utilizzato su un'altra pagina, quello che normalmente si desidera è la maggior parte degli script (ad es. jQuery bootstrap ecc ...) che viene scaricato una volta e memorizzato nella cache per tutte le pagine del sito.

La soluzione "ottimale" dal punto di vista della cache sarebbe quella di avere un unico bundle contenente tutti i file .js per tutte le pagine dell'intero sito, il lato negativo di tale approccio è che il bundle finisce per essere piuttosto grande che significa la pagina iniziale il caricamento è più lento, il che potrebbe non essere auspicabile per i siti Web che affrontano i clienti in cui le impressioni iniziali sono tutto.

Probabilmente la soluzione "migliore" sarà un mix di tecniche, ad es.

  • Un bundle "principale" (come jQuery e Bootstrap utilizzato in quasi tutte le pagine) più un pacchetto per pagina
  • Un singolo pacchetto per l'intero sito, forse escludendo una pagina pesante javascript che aggiunge molto alla dimensione del gruppo
risposta data 02.07.2017 - 16:03
fonte

Leggi altre domande sui tag