代码之家  ›  专栏  ›  技术社区  ›  Jarett Millard

上传时自动缩小CSS和Javascript

  •  9
  • Jarett Millard  · 技术社区  · 16 年前

    谢谢

    8 回复  |  直到 16 年前
        1
  •  7
  •   nickf    16 年前

    嗯,缩小CSS只是几个正则表达式。

    // (PHP) but should be easily portable to any language
    function compressCSS($css) {
        return
            preg_replace(
                array('@\s\s+@','@(\w+:)\s*([\w\s,#]+;?)@'),
                array(' ','$1$2'),
                str_replace(
                    array("\r","\n","\t",' {','} ',';}'),
                    array('','','','{','}','}'),
                    preg_replace('@/\*[^*]*\*+([^/][^*]*\*+)*/@', '', $css)
                )
            )
        ;
    }
    

    迪安·爱德华兹的Javascript打包机已经移植到 PHP, Perl, .NET and WSH ,因此,如果您正在使用这些技术中的任何一种,您实际上可以让它在您自己的服务器上运行。。。记住要缓存结果!

        2
  •  7
  •   William Casarin    16 年前

    PUBDIR=../../static/js/
    OUTDIR=./build/
    COMPRESSOR=../yui/build/yuicompressor-2.4.2.jar
    ARGS=
    VPATH=${OUTDIR}
    INST_TARGETS=${OUTDIR}jgblue.js
    
    jgblue.js: combined.js
        java -jar ${COMPRESSOR} ${ARGS} ${OUTDIR}$< -o ${OUTDIR}$@
    
    combined.js: main.js listview.js tabs.js
        cat $^ > ${OUTDIR}$@
    
    .PHONY: install
    
    install:
        cp ${INST_TARGETS} ${PUBDIR}
    

    make && make install
    

    首先,它将所有开发文件连接到一个文件中,然后将连接的文件压缩并复制到公共目录中。我正在使用 YUICompressor

        3
  •  5
  •   Sampson    16 年前

    既然你是共享主机,我建议你使用 YUICompressor

    您还可以在服务器上放置一个脚本,该脚本将定期重新编写css/js文件,并通过缩小过程传递这些文件,然后在上传后手动调用该脚本。

        4
  •  2
  •   Dykam    16 年前

    Minify . 它支持动态压缩和裁剪html、javascript和css。

    它非常灵活,可以集成到现有的应用程序中。

    更多 功能是将多个javascript文件组合成一个,css也是如此。它有多种方式来定义要组合的文件,这对于测试非常有用。这样,您就不必每次都修改设置。

        5
  •  2
  •   Tristan Havelick    16 年前

    我刚刚用python编写了这个minfier脚本。与Bills解决方案一样,它使用YUI压缩机,但将在少造环境中工作。它假定原始(未NIFIE)文件将位于/some/path/src/中,并且缩小的版本应位于/some/path/中。它还假定yuicompressor jar文件位于当前文件夹中:

    import os, glob
    from subprocess import Popen,PIPE
    
    def RunCommand( cmd, show_output  ):
        p = Popen(cmd, shell=True,stdout=PIPE,stderr=PIPE)
        for line in p.stdout:
            if show_output:
                print line
    
    
        outerr = "\n".join(p.stderr.readlines() )   
    
        if len(outerr) > 0:
            print "ERROR: " + outerr
            sys.exit()
    
        code = p.wait()         
        if ( code > 0 ):
            print ("ERROR CODE: %i" % code )
            sys.exit()
    
    
    
    compresser = "yuicompressor-2.4.2.jar"
    dirs = [ "../wwwroot/css/", "../wwwroot/JavaScript/"]
    
    extensions = ["*.js", "*.css" ]
    
    for dir in dirs:
        src = dir + "/src/"
        for ext in extensions:      
            for path in glob.glob( os.path.join( src, ext)):
                file = os.path.basename(path)
                src_file = os.path.normpath( src + "/" +  file )
                dest_file = os.path.normpath( dir + "/" + file )
                if not os.path.isfile(dest_file) or os.path.getmtime(src_file) > os.path.getmtime(dest_file):
                    print "minifying %s..." % (dest_file) 
                    command = "java -jar %s %s -o %s" % ( compresser, src_file, dest_file )
                    RunCommand(command, True)
    
        6
  •  1
  •   Tim Down    16 年前

    我建议在您的开发机器上进行压缩(以某种自动化的方式),并在上传到您的实时服务器之前进行测试。从根本上改变JavaScript作为部署过程的最后一个阶段是引入错误的明显风险。

        7
  •  1
  •   funktioneer    16 年前

    真正酷的解决方案,使js和css的自动服务成为一个梦想。

    http://code.google.com/p/minify/

    特征

    • 将多个CSS或JavaScript文件合并并缩小为单个下载
      • 缓存服务器端(文件/apc/memcache)以避免做不必要的工作
      • 大多数模块根据需要延迟加载(304个响应使用最少的代码)
      • 启用缓存后,Minify能够在中等功能的服务器上每秒处理数百个请求。
      • 内容编码:gzip,基于请求头。缓存允许它比Apache的mod_deflate选项更快地提供gzip文件!
      • 大多数组件的测试用例
      • enter code here
        8
  •  0
  •   bcosca    16 年前

    有一个更轻的解决方案(JS和CSS),所以你可以“在飞行中缩小”。您应该能够很容易地将其移植到任何语言(目前使用的是PHP)。它实际上是PHP无脂肪框架的一个片段和组成部分。按照此链接查看我的代码。这只是一个单一的功能。不要寻找像组合文件、base-X编码、缩短变量甚至gzip编码(尽管这可以很容易地添加)之类的花言巧语。

    Fat-Free Minify