Librerie javascript importate dinamicamente

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Librerie javascript importate dinamicamente

Messaggio da SuperStep »

salve,

sto realizzando diverse funzioni Javascript che funzionano in modo analogo alla programmazione ad oggetti "classica".

alcune di queste "classi" hanno delle dipendenze da altre classi, e sono importate in una pagina seguendo questa logica:

il template importa tutte le librerie, a prescindere che siano state utilizzate oppure no, e se un oggetto viene istanziato allora la utilizza.

esempio pratico:

una pagina template importa tutte le librerie js utilizzate.

pagina1: utilizza funzione1 e funzione2, che sfruttano solo alcune delle librerie.

pagina2: utilizza funzione1 e funzione3 che sfrutta solo alcune delle librerie.

adesso, quello che vorrei fare è, direttamente in javascript, mettere le dipendenze che mi servono per ogni funzione, e se è già stato richiamato quel determinato file, allora non deve essere scaricato.

sorge un altro problema però;

le librerie javascript sono costruite a "run-time" alcune volte, mi spiego:

ho tre file che contengono 3 "classi" diverse, ben commentate, con un piccolo manuale interno per spiegare il codice;

adesso, quando viene importato, una funzione crea un file "pulito" contenente tutte e 3 le classi, in modo da risparmiare sugli header. (Questa operazione viene fatta da un modulo del server specificando i file)

quello che ne esce è un file compatto di minime dimensioni;

quindi il workflow di queste cose dovrebbe essere il seguente:

ogni modulo che viene utilizzata in una pagina ha il suo header che importa le classi essenziali senza dipendenze.

alla fine del caricamento dei moduli, una classe dovrebbe prendere tutte le dipendenze e caricarle dinamicamente.

potrei farlo con AJAX ed un controller sul server che data la richiesta comprime i file e li restituisce.
Ma una chiamata AJAX è più lenta di una semplice dipendenza carcata staticamente.

Come dovrei approcciarmi a questo problema?

qualcuno ha già risolto cose simili?
Ultima modifica di SuperStep il mercoledì 7 maggio 2014, 13:26, modificato 1 volta in totale.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Librerie javascript importate dinamicamente

Messaggio da Zoff »

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Librerie javascript importate dinamicamente

Messaggio da SuperStep »

con requirejs, cosa succede se due moduli chiedono la stessa libreria?
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Librerie javascript importate dinamicamente

Messaggio da Zoff »

Esattamente quello che chiedi.
Vedi la documentazione.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Librerie javascript importate dinamicamente

Messaggio da SuperStep »

analizzando un po la situazione, ho deciso di optare per un altra soluzione, ovvero la seguente:

Un modulo server possiede un array statico in cui vengono conservati man mano i file che servono ai moduli Javascript,

man mano che i moduli vengono richiamati nella pagina, un header di questi moduli si preoccupa di specificare quali altre classi esterne servono.

alla fine dell'import dei moduli, il server scarta i nomi dei file duplicati, e provvede a creare un unico file (separatamente per js e per css)
che contengono i programmi, (ovviamente compressi).

che te ne pare come soluzione?
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Librerie javascript importate dinamicamente

Messaggio da Zoff »

A me sembra uno spreco di risorse del server, tu fai calcolare al server per TUTTE le richieste quelle che potrebbero essere risorse statiche.
Ergo fai lavorare inutilmente il server.

Per cui: soluzione ingegnosa ma inefficiente, riondante e poco standard.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Librerie javascript importate dinamicamente

Messaggio da SuperStep »

avevo pensato anche a questo,

mi creo una mappa dei file assembrati con tanto di data di ultima modifica,
se esiste una build già fatta, e nessun file della build ha subito modifica, non effettua la compressione,
altrimenti sfrutta la compressione esistente.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Librerie javascript importate dinamicamente

Messaggio da Zoff »

È meno ma è sempre lavoro superfluo del server.
Tra l'altro stai comunque facendo chiamate al filesystem, sono i colli di bottiglia delle performance.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Librerie javascript importate dinamicamente

Messaggio da SuperStep »

potrei anche aggiungere un ulteriore controllo, se è in fase di sviluppo, "l'assemblatore" fa il controllo dell'update dei file, altrimenti no.

Volevo aggiungere anche un compilatore CSS come SCSS o SASS, in modo da avere una cosa del genere:

da una parte tutti i sorgenti (CSS / JS) commentati bene con funzioni extra create da me;

dall'altra i file minimizzati ai minimi termini, in un solo file, più veloci per il trasferimento.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Librerie javascript importate dinamicamente

Messaggio da Zoff »

È la prassi per il deploy sui sistemi di produzione, obbligatoria per sistemi ad elevato utilizzo.
Si esegue la compressione di tutti i file.

Non mi è chiara questa frase:
SuperStep ha scritto:Volevo aggiungere anche un compilatore CSS come SCSS o SASS
SCSS e SASS non sono compilatori CSS, sono generatori.
Non è che gli dai in pasto del CSS e loro te lo compilano/riducono.
Devi scrivere le regole nel loro linguaggio (generalmente piu' sintetico e versatile) poi questo viene tradotto in CSS.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Librerie javascript importate dinamicamente

Messaggio da SuperStep »

hai ragione, forse compilatore non e il nome adeguato; quello che intendevo, e di creare un pacchetto, in grado di aggiungere "funzioni" al css, in modo da creare variabili, ecc, ma che non alteri il codice.

insomma lo scenario e questo:

da una parte ho del codice pulito, commentato, diviso in diversi file sparsi per varie directory in base alla "categoria". dall'altra, per ogni pagina, i vari file che la compongono, (css, javascript) vengono compressi e messi in un unico file.

ovviamente questa operazione di leggere e costruire, diventerebbe troppo pesante se eseguita anche quando l'applicazione non e in fase di sviluppo, quindi, questo processo viene eseguito solo se ci sono modifiche nei file,
ed a ogni collezione di file che viene generato, viene accorpato un identificativo, cosi invece di utilizzare 30 file, e preoccuparmi di come importare le dipendenze, passo il controllo a questo modulo, che colleziona il tutto, appena finito,
genera per ogni pagina dei file che contengono le dipendenze in un unico file. (che magari si trova in /build/css/abcdefghijkseed.css")

p.s. scusa per le lettere non accentate ma sono su una tastiera usa.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti