ninuxorg / nodogsplashninux

NoDogSplash-0.9_beta9.9.6 with htdocs folder(s) from Ninux (check out the different git branches)
GNU General Public License v2.0
7 stars 3 forks source link

minification #1

Open nemesifier opened 12 years ago

nemesifier commented 12 years ago

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 commented 12 years ago

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

zioproto commented 12 years ago

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 commented 12 years ago

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 commented 12 years ago

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 commented 12 years ago

@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 commented 12 years ago

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 commented 12 years ago

@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 commented 12 years ago

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 commented 12 years ago

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 commented 12 years ago

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

claudyus commented 12 years ago

In https://github.com/ninuxorg/nodogsplashninux/commit/bcebbe9fd58fc1e022116b9e2e704d331d275ee5 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 commented 12 years ago

Ho caricato la versione compressa: https://github.com/ninuxorg/nodogsplashninux/commit/0ea28ca7a7e1f6eb8d42423b60bfbdb0469c9afb

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 commented 12 years ago

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

nemesifier commented 12 years ago

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 commented 12 years ago

e pure tu c'hai ragione :D

nemesifier commented 12 years ago

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

claudyus commented 12 years ago

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

nemesifier commented 12 years ago

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 commented 12 years ago

woff quanti cavoli :D

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

nemesifier commented 12 years ago

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 commented 12 years ago

Fico ma poi mettete documentazione per rifarlo? :)

nemesifier commented 12 years ago

ti riferisci alla compressione?

gubi commented 12 years ago

yes