Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

minification #1

Open
nemesifier opened this issue May 15, 2012 · 23 comments
Open

minification #1

nemesifier opened this issue May 15, 2012 · 23 comments

Comments

@nemesifier
Copy link
Member

Ma se minifico tutto come faccio poi a tenere i file non minificati nel repository senza andare ad occupare lo spazio dei device su cui si installa tutto?

@zioproto
Copy link
Member

Devi fare due branch, uno di produzione ed uno di sviluppo

@zioproto
Copy link
Member

fammi vedere esattamente quello che vuoi fare cosi:

git checkout -b features/minification
(apply your changes and make commits)
git push -i remote features/minification

@nemesifier
Copy link
Member Author

Ho capito che stai in fissa col libro di git :-D, la mia domanda non era
relativa a git, ma a questo software.

Devo fare una versione dei file html, css, javascript, immagini, ecc,
compressa, però devo tenere la copia degli originali nel repository, la
domanda è: tutti i file del repository vanno a finire sul device o no?

Se la risposta è sì va fatto un repository solo per la splash page di
gubi, se la risposta è no va fatta una cartella nel repository che
contiene i file originali non compressi ma che non va ad occupare lo
spazio del device.

Un altra domanda è: sul device ci gira per caso php, python, cgi o
qualunque cazzo che renda possibile l'invio di un header che dice al
browser di considerare il file come contenuto con mime type
"application/gzip"?

@zioproto
Copy link
Member

Il fatto di tenere due versioni lo fai usando le branch di git
Una branch ha i files compressi, e sara' quella la branch chiamata nel Makefile del package OpenWRT. In questo momento il package compila la master branch:
https://github.com/ninuxorg/ninux-openwrt-packages/blob/stablepackages/nodogsplashninux/Makefile#L16

Solo quella branch con i file compressi finisce sul device. Le altre branches no. Non serve fare un altro repository quindi.

Sul device puoi fare un cgi in /bin/sh, no php no python. Ma su questo non so rispondere in modo completo. Chiedi a Clauz o Claudyus.

@nemesifier
Copy link
Member Author

@claudyus @cl4u2

Per risparmiare spazio si possono comprimere i file con gzip, il problema è che bisogna far inviare un header che dice al browser il mime type corretto e che la compressione è gzip.

Questo è quello che ho dovuto fare in php:

ho preso un file css, l'ho gzippato via commandline, poi ho fatto un altro file php che prende il contenuto e lo serve con due header:

<?php
header("Content-Encoding: gzip");
header("Content-Type: text/css");
echo file_get_contents("base.min.css.gz");
?>

Così funziona e si risparmia il 60% di spazio.

Come si può fare questa cosa con open-wrt? Bisogna solo inviare quei due header lì.

@nemesifier
Copy link
Member Author

ho dato un occhiata al firmware di ubiquiti con Dario, usano http://www.php.net/manual/phpfi2.php#funcs

Comunque a noi non serve necessariamente PHP, basta poter far inviare quei due header al web-server per certi files.

@claudyus
Copy link
Member

@nemesisdesign @zioproto

no io non userei 2 branch ma modificherei il makefile per fargli eseguire gzip su tutti i file interessati, tipo approfittando di find -exec.

Cmq sto nodogsplash usa un suo server web?
Ne consegue che dovremmo modificarlo per fargli servire i */gzip?

@claudyus
Copy link
Member

Non dovrebbe essere troppo difficile

questi sono i punti da analizzare per fargli servire i gzip
https://github.com/ninuxorg/nodogsplashninux/blob/master/libhttpd/api.c#L393
https://github.com/ninuxorg/nodogsplashninux/blob/master/libhttpd/protocol.c#L630

@nemesifier
Copy link
Member Author

Ottimo!

Sai come si fa ad aggiungere l'header che gli dice che il file è compresso con gzip?
Sul manuale di libhttpd c'è scritto:

httpdAddHeader(server, “Location: http://www.foo.com/some/new/location”);

quindi suppongo che nel nostro caso sia:

httpdAddHeader(server, “Content-Encoding: gzip”);

ma dobbiamo farlo solo per html, css e javascript perchè le immagini jpeg, ico, png e i font in formato woff sono già compressi.

Questa è la procedura che propongo:

  1. effettuare una copia dei file originali
  2. minificare html, javascript e css
  3. rinominare i file tpl in html onde evitare problemi tipo che il server non capisce che content-type mandare
  4. ottimizzare le immagini con delle utility tipo PNGoptimizer e simili
  5. ci sono 4 fonts nella cartella fonts ma solo 2 vengono utilizzati, quindi 2 si possono cancellare
  6. comprimere con gzip tutti i file html, css, javascript, se questa cosa può essere fatta in automatico in fase di compilazione benvenga, ma la minificazione al punto 2 è meglio farla manualmente
  7. aggiungere l'header "Content-Encoding: gzip" solo per i file html, css e javascript

Procedo nei prossimi giorni. Per l'ultimo punto mi servirà una mano :-)

@nemesifier
Copy link
Member Author

PS: per minificazione intendo usare strumenti tipo closure compiler http://closure-compiler.appspot.com/home o YUI compressor http://refresh-sf.com/yui/

@claudyus
Copy link
Member

In bcebbe9 ho fatto un commit che aggiunge il content encoding nel server ma testarlo è un casino questo nodosplash.

Non sono sicuro che un content-Encoding vuoto sia accettato dai client.

@nemesifier
Copy link
Member Author

Ho caricato la versione compressa: 0ea28ca

Bisogna inviare tutti i file html, css e javascript con l'header per l'encoding gzip altrimenti non funziona un cazzo :D
Quindi @claudyus bisogna cambiare quella riga che avevi introdotto e fare in modo che per tutti i file html, css e javascript manda l'header per il content encoding, io direi di fare una prova.

@claudyus
Copy link
Member

ma vabbè si può fare ma è davvero scomodo.
Per esempio se vuoi modificare un html quante ore ci metti :D

@nemesifier
Copy link
Member Author

se si vuole modificare un HTML si deve modificare la versione non compressa, quindi comprimerla. Ma ogni quanto accadrà? La vecchia splashpage ogni quanto la cambiavate? :D :D

@claudyus
Copy link
Member

e pure tu c'hai ragione :D

@nemesifier
Copy link
Member Author

appena puoi fai la modifica per il content encoding così facciamo provare il risultato a @gubi

@claudyus
Copy link
Member

@nemesisdesign @gubi
fatto. ora il server invia di default gzip content enconding stanne per png/gif

@nemesifier
Copy link
Member Author

credo che così con il content-encoding vuoto non funzionerà, inoltre mandaresti l'header anche per il file .ico e i font .woff, potrebbe implodere tutto! lol

Non puoi fare un blocco condizionale che controlla il suffisso del file e solo in caso questo sia .html, .css o.js aggiunga l'header?

@claudyus
Copy link
Member

woff
quanti cavoli :D

cmq no il content vuoto c'e un if che nn lo invia tranqui

@nemesifier
Copy link
Member Author

ok anche l'ico. E' una tecnica un pò rischiosa questa perchè presuppone che tutti i file serviti devono essere gzippati mentre invece solo i files contenenti testo (txt, js, css, html, xml e simili) possono esserlo.

@gubi
Copy link
Member

gubi commented May 21, 2012

Fico ma poi mettete documentazione per rifarlo? :)

@nemesifier
Copy link
Member Author

ti riferisci alla compressione?

@gubi
Copy link
Member

gubi commented May 21, 2012

yes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants