Open nemesifier opened 12 years ago
Devi fare due branch, uno di produzione ed uno di sviluppo
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
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"?
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.
@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ì.
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.
@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?
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
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:
Procedo nei prossimi giorni. Per l'ultimo punto mi servirà una mano :-)
PS: per minificazione intendo usare strumenti tipo closure compiler http://closure-compiler.appspot.com/home o YUI compressor http://refresh-sf.com/yui/
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.
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.
ma vabbè si può fare ma è davvero scomodo. Per esempio se vuoi modificare un html quante ore ci metti :D
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
e pure tu c'hai ragione :D
appena puoi fai la modifica per il content encoding così facciamo provare il risultato a @gubi
@nemesisdesign @gubi fatto. ora il server invia di default gzip content enconding stanne per png/gif
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?
woff quanti cavoli :D
cmq no il content vuoto c'e un if che nn lo invia tranqui
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.
Fico ma poi mettete documentazione per rifarlo? :)
ti riferisci alla compressione?
yes
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?