Changeset 112012 in spip-zone for _plugins_/less-css


Ignore:
Timestamp:
Oct 17, 2018, 9:52:07 AM (4 months ago)
Author:
cedric@…
Message:

Grosse amelioration du confort d'utilisation en developpement : on utilise la gestion de cache de Less_Cache qui parcourt le fichier pour voir si un @import a change
Du coup sur un var_mode=calcul uniquement les feuilles dont un composant a change sont recompilees, c'est donc en pratique tout le temps suffisant pour voir les mises a jour quand on modifie un less quelque part sur le projet, meme dans une surcharge de bootstrap, et c'est la plupart du temps aussi beaucoup plus rapide quand on travaille sur theme.less par exemple car c'est la seule feuille qui sera recompilee
A contrario, si vraiment on a besoin de forcer la mise a jour de toutes les feuilles un var_mode=css ou var_mode=recalcul le fera

En l'absence de var_mode, pour des raisons de perf en production, on se contente de comparer le timestamp du fichier compile avec le fichier source, sans regarder les inclusions, comme avant
Enjoy!

Location:
_plugins_/less-css/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/less-css/trunk/lesscss_fonctions.php

    r112011 r112012  
    2626}
    2727
     28function lesscss_import_dirs() {
     29        static $import_dirs = null;
     30        if (is_null($import_dirs)){
     31                $path = _chemin();
     32                $import_dirs = array();
     33                foreach($path as $p){
     34                        $import_dirs[$p] = protocole_implicite(url_absolue($p?$p:"./"));
     35                }
     36        }
     37        return $import_dirs;
     38}
     39
     40function lesscss_cache_dir() {
     41        static $cache_dir;
     42        if (is_null($cache_dir)) {
     43                $cache_dir = sous_repertoire (_DIR_VAR, 'cache-less');
     44                $cache_dir = sous_repertoire($cache_dir, 'compile');
     45        }
     46        return $cache_dir;
     47}
     48
    2849/**
    2950 * Compiler des styles inline LESS en CSS
     
    3758 */
    3859function lesscss_compile($style, $contexte = array()){
    39         static $import_dirs = null;
    4060        static $parser_options = null;
    4161        static $chemin = null;
     
    5070        }
    5171
    52         if (is_null($import_dirs)){
    53                 $path = _chemin();
    54                 $import_dirs = array();
    55                 foreach($path as $p){
    56                         $import_dirs[$p] = protocole_implicite(url_absolue($p?$p:"./"));
    57                 }
    58         }
    5972        if (is_null($parser_options)) {
    6073                $parser_options = array();
     
    6275                        $parser_options['sourceMap'] = true;
    6376                }
    64                 $dir = sous_repertoire (_DIR_VAR, 'cache-less');
    65                 $parser_options['cache_dir'] = sous_repertoire($dir, 'compile');
    66                 //$parser_options['cache_method'] = 'serialize';
     77                $parser_options['cache_dir'] = lesscss_cache_dir();
    6778                if (defined('_MEMOIZE_CACHE_LESS')
    6879                  and isset($GLOBALS['Memoization'])
     
    7182                        $parser_options['cache_callback_get'] = 'lesscss_compile_cache_get';
    7283                        $parser_options['cache_callback_set'] = 'lesscss_compile_cache_set';
     84                }
     85                $parser_options['import_dirs'] = lesscss_import_dirs();
     86
     87                if (defined('_VAR_MODE') and in_array(_VAR_MODE, array('css', 'recalcul'))) {
     88                        $parser_options['use_cache'] = false;
    7389                }
    7490        }
     
    101117
    102118        $parser = new Less_Parser($parser_options);
    103         $parser->setImportDirs($import_dirs);
    104119        $parser->relativeUrls = true;
    105120
    106121        try {
    107                 $parser->parse($style,$url_absolue);
    108                 spip_log('lesscss_compile parse '.(isset($contexte['file'])?$contexte['file']:substr($style,0,100)).' :: '.spip_timer('lesscss_compile'), 'less');
    109                 //die('ok1');
    110                 spip_timer('lesscss_compile');
    111                 $out = $parser->getCss();
     122                if (!$style and isset($contexte['file']) and $contexte['file'])  {
     123                        $internal_cache_file = $parser_options['cache_dir'] . Less_Cache::Get(array( $contexte['file'] => $url_absolue ), $parser_options);
     124                        $out = file_get_contents($internal_cache_file);
     125                        spip_log('lesscss_compile Compile CACHED ' . $contexte['file'] . ' :: '.spip_timer('lesscss_compile'), 'less');
     126                }
     127                else {
     128                        $parser->parse($style,$url_absolue);
     129                        spip_log('lesscss_compile parse '.(isset($contexte['file'])?$contexte['file']:substr($style,0,100)).' :: '.spip_timer('lesscss_compile'), 'less');
     130                        spip_timer('lesscss_compile');
     131                        $out = $parser->getCss();
     132                        spip_log('lesscss_compile getCSS '.(isset($contexte['file'])?$contexte['file']:substr($style,0,100)).' :: '.spip_timer('lesscss_compile'), 'less');
     133                }
    112134
    113135                if ($files = Less_Parser::AllParsedFiles()
     
    123145                }
    124146
    125                 spip_log('lesscss_compile getCSS '.(isset($contexte['file'])?$contexte['file']:substr($style,0,100)).' :: '.spip_timer('lesscss_compile'), 'less');
    126                 //die('ok2');
    127147                return $out;
    128148        }
     
    182202
    183203                # si la feuille compilee est plus recente que la feuille source
    184                 # l'utiliser sans rien faire, sauf si recalcul explicite
     204                # l'utiliser sans rien faire, sauf si il y a un var_mode
     205                # dans ca cas on passe par la compilation qui utilise un cache et est donc rapide si rien de change
    185206                $changed = false;
    186                 if (@filemtime($f) < @filemtime($source))
     207                if (@filemtime($f) < @filemtime($source)){
    187208                        $changed = true;
    188 
    189                 // si pas change ET pas de var_mode, rien a faire
     209                }
     210
     211                // si pas change ET pas de var_mode du tout, rien a faire (performance)
    190212                if (!$changed
    191                   AND !defined('_VAR_MODE'))
     213                        AND !defined('_VAR_MODE'))
    192214                        return $f;
    193215
    194                 if (!lire_fichier($source, $contenu))
    195                         return $source;
    196 
    197                 // si pas change ET par de var_mode=recalcul ET pas de @import dedans, rien a faire
    198                 // aka sur un var_mode=calcul on compute si y un @import mais si pas change
    199                 if (!$changed
    200                   AND (!defined('_VAR_MODE') OR !in_array(_VAR_MODE, array('recalcul','css')))
    201                   and strpos($contenu, '@import') === false)
    202                         return $f;
    203 
    204 
    205216                # compiler le LESS si besoin (ne pas generer une erreur si source vide
    206                 if (!$contenu){
     217                if (!filesize($source)){
    207218                        $contenu = "/* Source $source : vide */\n";
    208219                }
    209220                else {
    210                         $contenu = lesscss_compile($contenu, array('file'=>$source, 'dest'=>$f));
     221                        $contenu = lesscss_compile('', array('file'=>$source, 'dest'=>$f));
    211222                }
    212223                // si erreur de compilation on renvoit un commentaire, et il y a deja eu un log
  • _plugins_/less-css/trunk/paquet.xml

    r112011 r112012  
    22        prefix="lesscss"
    33        categorie="outil"
    4         version="1.3.0"
     4        version="1.4.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.