示例#1
0
        public CssMinifier(ILoggerFactory loggerFactory)
        {
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            _logger   = loggerFactory.CreateLogger <CssMinifier>();
            _minifier = new KristensenCssMinifier();
        }
        private static Dictionary <string, Tuple <string, byte[]> > LoadCache(string basePath, string[] extensions = null)
        {
            //put static files minificated in a memory store -> cache
            var staticFilesStorage = new Dictionary <string, Tuple <string, byte[]> >();
            //read all static files and load into mmemory
            var files = Directory.GetFiles(basePath, "*", SearchOption.AllDirectories).ToList();

            if (extensions != null)
            {
                files = files.Where(f => extensions.Contains(Path.GetExtension(f))).ToList();
            }
            var minifyJs   = new WebMarkupMin.Core.CrockfordJsMinifier();
            var minifyCss  = new WebMarkupMin.Core.KristensenCssMinifier();
            var minifyHtml = new WebMarkupMin.Core.HtmlMinifier();

            files.ForEach(file =>
            {
                var content = File.ReadAllBytes(file);
                var ext     = Path.GetExtension(file);
                //compress or minify
                if (Environment.GetEnvironmentVariable("minifyResponse") != "false")
                {
                    switch (ext)
                    {
                    case ".js":
                        //javascript minify
                        var js         = System.Text.UTF8Encoding.Default.GetString(content);
                        var minifiedJs = minifyJs.Minify(js, false);
                        if (!minifiedJs.Errors.Any())
                        {
                            content = System.Text.UTF8Encoding.Default.GetBytes(minifiedJs.MinifiedContent);
                        }
                        break;

                    case ".css":
                        //css minify
                        var css         = System.Text.UTF8Encoding.Default.GetString(content);
                        var minifiedCss = minifyCss.Minify(css, false);
                        if (!minifiedCss.Errors.Any())
                        {
                            content = System.Text.UTF8Encoding.Default.GetBytes(minifiedCss.MinifiedContent);
                        }
                        break;

                    case ".html":
                        //html minify
                        var html         = System.Text.UTF8Encoding.Default.GetString(content);
                        var minifiedHtml = minifyHtml.Minify(html, false);
                        if (!minifiedHtml.Errors.Any())
                        {
                            content = System.Text.UTF8Encoding.Default.GetBytes(minifiedHtml.MinifiedContent);
                        }
                        break;
                    }
                }
                staticFilesStorage.Add(file, new Tuple <string, byte[]>(MimeMapping.MimeUtility.GetMimeMapping(file), content));
            });

            var usedMemory = Math.Round(staticFilesStorage.Select(s => s.Value).Sum(s => s.Item2.Length) / 1024.0 / 1024.0);

            Console.WriteLine($"{staticFilesStorage.Count} static files loaded into memory using {usedMemory} MB");
            return(staticFilesStorage);
        }