2012-07-19 81 views
9

我在文档中有一个带有CSS和Javascript的.html文档(没有外部文件)。是否有一些在线工具,将minify文件和JavaScript的一些非常小的足迹?我看到很多脚本是不可读的,其中所有变量和函数名称都用单字母名称替换,等等。请指教。如何用CSS和Javascript来缩小HTML?

+1

我认为您在这里寻找的关键字是“缩小” – Jrod 2012-07-19 20:37:02

+1

@Jrod:和“混淆”:) – mouad 2012-07-19 20:37:47

回答

10

编辑2(2017年2月22日):现在来缩小你的资产的最佳工具(和更多,通过添加装载机和插件)绝对是Webpack。配置的

例将您的所有.css在一个文件中,然后再缩小它:

{ 
    test: /\.css$/, 
    use: [ 
    { 
     loader: 'css-loader', 
     options: { 
     minimize: true 
     } 
    } 
    ] 
} 

编辑1(2014年9月16日):更妙的是,现在你有任务亚军GulpGrunt

任务亚军是用于自动化许多 费时,乏味(但很重要),而开发一个项目,你必须 任务做一次小的应用程序。其中包括运行 测试,连接文件,缩小和CSS预处理等任务。通过 只需创建一个任务文件,您可以指示任务运行者自动处理 任何开发任务,您可以在您对文件进行更改时想到 。这是一个非常简单的想法 ,这将节省您大量的时间,并让您保持专注于 发展。

必读:使用JavaScript级联和缩小(和JSHint)任务的Getting started with Gulp.js

例子:

gulp.task('scripts', function() { 
    return gulp.src('src/scripts/**/*.js') 
    .pipe(jshint('.jshintrc')) 
    .pipe(jshint.reporter('default')) 
    .pipe(concat('main.js')) 
    .pipe(gulp.dest('dist/assets/js')) 
    .pipe(rename({suffix: '.min'})) 
    .pipe(uglify()) 
    .pipe(gulp.dest('dist/assets/js')) 
    .pipe(notify({ message: 'Scripts task complete' })); 
}); 

原来的答复(2012年7月19日):我劝可以缩小你的JS和CSS的HTML5 Boilerplate Build Script

3

通过使用manyavailableminifiers之一。

evensome minify CSS。

+1

但是,javascript minifiers不会将函数名称更改为单字母名称,如果文档使用,例如'onload =“pageLoad”' - 然后'pageLoad'保持: -/ – 2012-07-19 20:38:27

+2

一些缩小器可以选择是否缩小文字/函数名称/变量名称。 – 2012-07-19 20:39:18

+0

但到目前为止,我总是发现只是非复杂的minifiers。我想使用一些照顾所有部分:js,css,html – 2012-07-19 20:41:47

0

从来没有尝试过,但听说过真正的谷歌的封闭compiler..You评语好可能想尝试一下

1

尽管JavaScript代码可以在JavaScript中压缩和解压缩(请参阅其他答案),但实际上很难在CSS中实现相同的结果。目前没有任何工具可以去除不必要的空白(参见Are there any agressive CSS Minification tools?),因为在不破坏HTML和CSS之间的链接的情况下,标识符和类名不能更改。

此外,除了空格之外,您不能从HTML标记中删除任何内容。那么,你可以缩小类名和标识符,但是目前没有工具可以更新CSS/JS文件中的缩小值,所以这会使你的网站变得丑陋和破碎。甚至为了获得一些CSS效果,通常需要空元素(是的,我在看你,IE6)。这也适用于JavaScript函数名称。

TL; DR:不幸的是,这里没有all-in-one-minify-everything工具。最接近的是htmlcompressor

+0

我期望的是在html中替换函数名,然后在Javascript中。就目前而言,例如,如果你有'onload = pageLoad',那么这个函数的名字就会保持这个大小,但是用一个简短的(一个两个字母)的名字取代它会很好。所以有一些潜力超出空白压缩... – 2012-07-19 21:13:59

+0

好吧,它基本上与CSS/HTML相同的问题 - 你必须改变各地的函数名称,并注意碰撞。 – Zeta 2012-07-19 21:15:59

3

恐怕你就必须做的两个步骤:

  1. 手动搜索,并在文本编辑器全局对象的替代
  2. minifiers完成对CSS的工作和js

前段时间我有一个类似的问题(关于全局对象和对象键)。我得到的答案是没有工具会对全球背景做出假设。在你的例子中,他们不会缩小“pageLoad”,因为它可能被另一个你没有提供的html或js片段使用。

在你的榜样一种解决方法是使页面加载函数的局部和动态脚本添加onload事件:

elt.onload=function(){pageLoad();}; 
+0

+1 ::动态载入的好点 - 谢谢 – 2012-07-21 12:05:03

5

Closure compiler已正确推荐JS;但很少有人知道谷歌的Closure stylesheets。其中一个封闭样式表功能被重命名,其中

<style> 
    .descriptive-parent-class-name .descriptive-element-class-name {color:red;} 
</style> 
<div class="descriptive-parent-class-name"> 
    <p class="descriptive-element-class-name">Lorem ipsum</p> 
    <p class="descriptive-element-class-name">Lorem ipsum</p> 
</div> 

将成为

<style> 
    .a-b .a-c {color:red;} 
</style> 
<div class="a-b"> 
    <p class="a-c">Lorem ipsum</p> 
    <p class="a-c">Lorem ipsum</p> 
</div> 

将会有进一步缩小太多;并且考虑到OP表示所有资源都包含在html中的事实,这可能最终节省流量开销。

注意:如果你检查任何谷歌搜索结果页面中,你会看到他们的阶级和ID名是几乎超过4个随机字符

1

尝试http://prettydiff.com/永远不再。它提供了自动语言检测功能,可以缩小html,css和javascript。这个工具假定没有MIME类型或与JavaScript相关的MIME类型的脚本标记必须包含javascript或不包含任何内容。同样,没有MIME类型或“text/css”MIME类型的样式标签被假定为包含CSS。 CSS和JavaScript被相应地缩小。该工具本身是用JavaScript编写的。没有理由你应该使用多个工具。

+0

它不会重命名为例如类等 - 通过这样做(如果...)它会使结果更短 – 2012-07-21 13:20:36

+0

正确,重命名不是缩小。这是混淆。除了评论之外,缩小的目的不是损害在使用美化工具之后阅读文档的能力。一个好的缩小器不会重命名任何东西,也不会改变javascript或css的功能,只用最少量的空白将整个文档的代码放在一行中,而不会影响内容。 – austincheney 2012-07-21 13:22:02

0

我建议你试试WebMarkupMin Online

WebMarkupMin Online是一个免费的在线工具,用于缩小您的HTML,XHTML和XML代码。 HTML和XHTML缩小器支持从style标记和属性缩小CSS代码,并从script标记,事件属性和带有javascript:伪协议的超链接缩小JavaScript代码。这些缩小器支持多种CSS缩小算法(Mads Kristensen的Efficient stylesheet minifier,Microsoft Ajax CSS MinifierYUI CSS Compressor)和JavaScript缩小(Douglas Crockford的JSMin,Microsoft Ajax JS MinifierYUI JS Compressor)。

这些工具基于WebMarkupMin库。