我需要一种工具,可以缩小,优化和挖掘那些可能类型的许多文件
最终结果应该是一个仅包含所有JavaScript和CSS的HTML文件,或者分别用于HTML,JS和CSS的最差场景3文件.
我知道像YUI Compressor等工具.我目前还没有找到的压缩器类型将适用于所有这些文件类型,并将它们合并到一个巨大的文件中.
我想在编译项目时使用YUI Compressor来组合和压缩我的css和js文件集.YUI Compressor仅作为输入单个文件.我已尝试使用以下(Windows)命令附加到输出文件,但出现附件的输出中出现奇怪的字符.我如何使用Windows命令行或powershell来实现这一目标?
java -jar yuicompressor-2.4.2.jar --charset utf-8 jquery-1.3.2.js > scripts-all.min.js
java -jar yuicompressor-2.4.2.jar --charset utf-8 jquery.superfish.js >> scripts-all.min.js
Run Code Online (Sandbox Code Playgroud) 我已经在命令行(在Windows上)测试了YUI压缩器,它似乎工作得很好.
但是由assetic创建的.css没有被压缩,并且在顶部附带此消息(在.css内部!):
/*
[exception] 500 | Internal Server Error | RuntimeException
[message]
[1] RuntimeException:
at n/a
in E:\websites\symfony2\public_html\Symfony\vendor\assetic\src\Assetic\Filter\Yui\BaseCompressorFilter.php line 81
at Assetic\Filter\Yui\BaseCompressorFilter->compress('
Run Code Online (Sandbox Code Playgroud)
这是配置问题吗?或者资产中的错误?
这是我在twig模板中使用的代码:
{% stylesheets '@CompanyBundlenameBundle/Resources/public/css/style.css' filter='yui_css' %}
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
{% endstylesheets %}
Run Code Online (Sandbox Code Playgroud) 在我们的Jenkins CI服务器上运行的ant构建任务期间,我们使用YUI压缩器压缩我们的javascript(和css文件).但是,确定哪些js文件YUI压缩器有错误是非常困难的.我们看到了很多类似的东西:
[minify-js] [ERROR] 3:35:unterminated string literal [minify-js] [minify-js] [ERROR] 3:35:syntax error [minify-js] [minify-js] [ERROR] 4:8:syntax error [minify-js] [minify-js] [ERROR] 1:0:Compilation produced 3 syntax errors. [minify-js] org.mozilla.javascript.EvaluatorException: Compilation produced 3 syntax errors. [minify-js] at com.yahoo.platform.yui.compressor.YUICompressor$1.runtimeError(YUICompressor.java:135) [minify-js] at org.mozilla.javascript.Parser.parse(Parser.java:410) [minify-js] at org.mozilla.javascript.Parser.parse(Parser.java:355) [minify-js] at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:312) [minify-js] at com.yahoo.platform.yui.compressor.JavaScriptCompressor.(JavaScriptCompressor.java:533) [minify-js] at com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.java:112) [minify-js] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [minify-js] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [minify-js] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [minify-js] at java.lang.reflect.Method.invoke(Method.java:616) [minify-js] at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:20) [minify-js] Result: 2
在输出中,但我不知道错误来自数百个JS文件中的哪一个.我们的ant任务看起来像:
<target name="minify-js">
<apply executable="yuicompressor" parallel="false" dest="${global.dir}/" taskname="minify-js" force="true">
<fileset dir="${global.dir}/" …
Run Code Online (Sandbox Code Playgroud) 我知道这不是我可以用KB保存的很多,但为了在Google PageSpeed Insights中获得更好的分数,从而可能更好的SEO排名,我该如何解决这个问题?
来自https://developers.google.com/speed/pagespeed/insights/?hl=en&url=www.tradebench.com:
Minify JavaScript for the following resources to reduce their size by 2.8KiB (2% reduction). Minifying http://d2bfamm4k6zojq.cloudfront.net/…tion-ea806932c941fb875b7512a557ebead3.js could save 2.8KiB (2% reduction) after compression.
Run Code Online (Sandbox Code Playgroud)
它告诉我我的CSS文件同样的事情.
从我的production.rb文件:
config.assets.compress = true
config.assets.js_compressor = Uglifier.new(:mangle => true)
config.assets.css_compressor = :yui
Run Code Online (Sandbox Code Playgroud)
看看uglifier docs/options,我看不出如何配置它以获得最后的2KB.
任何人都知道如何让它压缩最后一点以删除PageSpeed关于它的通知?也许使用另一台压缩机而不是Uglifier?
谢谢 :-)
ruby-on-rails yui-compressor ruby-on-rails-3 google-pagespeed ruby-on-rails-3.2
我正在尝试在Visual Studio项目中配置YUICompressor.NET.
据我所知,我必须创建一个.proj文件并将其添加到我的解决方案中.之后,我需要创建一个构建后的事件来构建这个.proj文件,然后我将得到我想要的输出(缩小的js/css文件).
所以我有:
这个.proj包含:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
<UsingTask TaskName="CssCompressorTask" AssemblyFile="\..\packages\YUICompressor.NET.MSBuild.2.7.0.0\lib\NET20\Yahoo.Yui.Compressor.Build.MsBuild.dll" />
<UsingTask TaskName="JavaScriptCompressorTask" AssemblyFile="\..\packages\YUICompressor.NET.MSBuild.2.7.0.0\lib\NET20\Yahoo.Yui.Compressor.Build.MsBuild.dll" />
<Target Name="Minify">
<ItemGroup>
<!-- Single files, listed in order of dependency -->
<CssFiles Include="Content\*.css"/>
<JavaScriptFiles Include="Scripts\*.js"/>
</ItemGroup>
<CssCompressorTask
SourceFiles="@(CssFiles)"
OutputFile="Content\min.css"
/>
<JavaScriptCompressorTask
SourceFiles="@(JavaScriptFiles)"
OutputFile="Scripts\min.js"
/>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其构建如下:
我收到以下错误:
The command "msbuild C:\Users\Me\Desktop\MvcApplicationExample\MvcApplicationExample\YuiCompressorMsBuild.proj" exited with code 9009.
Run Code Online (Sandbox Code Playgroud)
此错误表明"msbuild"不是有效命令.那么,我该如何构建这种类型的项目呢?(我已经按照本教程:youtube)
谢谢你的帮助.
假设我的页面结构是:
1. one.html :
includes -> a.js , b.js , c.js ,d.js
2. two.html :
includes -> a.js , b.js, x.js, y.js, z.js
3. three.html :
includes -> a.js , b.js, s.js, x.js, y.js
Run Code Online (Sandbox Code Playgroud)
等等.有些页面访问量比其他页面更多,比如3页提供了网站所有页面浏览量的99%.
我正在寻找一个解决方案:
i)组合并最小化可以包含在页面中的组中的文件.
ii)具有将组的文件名映射到最终组合文件名的逻辑.
iii)包括像Google Closure编译器/ YUI压缩器这样的缩小器.
我看过的一个解决方案是: PHP缩小
它完成了大部分工作.但是它对我有以下缺点:
i)我将在CDN服务器上托管我的静态组合文件,而不是托管PHP minify的同一个Web服务器,因此PHP按组名缩小服务器文件的逻辑对我来说不起作用.
ii)PHP Minify使用PHP CGI来处理和提供脚本,而我希望我的缩小内容直接从CDN服务器提供.
PHP Minify是否有一些功能可以将组名映射到组合文件名,我可以在我的网页中使用它来直接设置组合JS文件的CDN路径.例如
<?php
$groupName = array("onePage" => array('a.js','b.js','c.js','d.js');
?>
<script type="text/javascript" src="http://www.MYSTATICSERVER.com/js/<?php getMergedFileName($groupName)"></script>
Run Code Online (Sandbox Code Playgroud)
而不是调用PHP Minify的PHP脚本来获取组的文件,这实际上是一个PHP页面调用,然后从以前生成的文件中提供javascript内容:
<script type="text/javascript" src="http://www.MYWEBSERVER.com/min/?g=onePage" ></script>
Run Code Online (Sandbox Code Playgroud)
(我同意大部分可以通过将不同的解决方案与自定义部署脚本和缩小工具相结合来实现,例如ANT,FABRIC + YUICompressor/ClosureCompiler,但我正在寻找一个我可能错过的完善的可配置解决方案)
javascript cdn minify yui-compressor google-closure-compiler
在Ant构建脚本中搜索如何使用YUI Compressor几天之后,我终于让它工作了.存在许多用于创建Ant任务并在构建脚本中使用它的旧示例(<2010),但这对我来说太过分了.
许多示例也很旧,需要更多的Ant知识或配置Ant任务.下面的解决方案对我来说简单快捷,简单有效.
我正在尝试创建两个css聚合 - 一个用于公共站点,另一个用于站点的应用程序部分.
如果我输出文件${project.build.directory}/${project.build.finalName}/css/public-all.css
,一切正常.
[INFO] generate aggregation : C:\Users\me\IdeaProjects\myapp-development\target\myapp-1.0\css\public-all.css
[INFO] public-all.css (32029b)
[INFO] generate aggregation : C:\Users\me\IdeaProjects\myapp-development\target\myapp-1.0\css\application-all.css
[INFO] application-all.css (50446b)
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将聚合文件输出到另一个子目录,例如${project.build.directory}/${project.build.finalName}/css/public/all.css
,则会出现以下错误:
[INFO] generate aggregation : C:\Users\me\IdeaProjects\myapp-development\target\myapp-1.0\css\public\all.css
[WARNING] all.css not created
[INFO] generate aggregation : C:\Users\me\IdeaProjects\myapp-development\target\myapp-1.0\css\application\all.css
[WARNING] all.css not created
Run Code Online (Sandbox Code Playgroud)
为什么他们没有被创造?为什么这甚至是一个警告而不是插件的失败?
这是pom.xml
我指定聚合的部分.为什么这不起作用?
<aggregation>
<removeIncluded>false</removeIncluded>
<insertNewLine>true</insertNewLine>
<output>${project.build.directory}/${project.build.finalName}/css/public/all.css</output>
<includes>
<include>**/public/base.css</include>
<include>**/fancybox/jquery.fancybox-1.3.4.css</include>
</includes>
</aggregation>
<aggregation>
<removeIncluded>false</removeIncluded>
<insertNewLine>true</insertNewLine>
<output>${project.build.directory}/${project.build.finalName}/css/application/all.css</output>
<includes>
<include>**/application/reset.css</include>
<include>**/application/text.css</include>
<include>**/application/960.css</include>
<include>**/smoothness/jquery-ui-1.8.11.custom.css</include>
<include>**/application/base.css</include>
<include>**/jcrop/jquery.jcrop.css</include>
<include>**/farbtastic/farbtastic.css</include>
</includes>
</aggregation>
Run Code Online (Sandbox Code Playgroud)
我检查过,这些目录也存在.如果我尝试指向不存在的目录,yuicompressor:compress
则会失败.我只是不明白为什么构建过程实际成功给定有效目录,但它不会在这些目录中创建文件.这没有道理!
我想也许这可能是一个文件系统安全问题,但事实并非如此.
我真的很困惑,为什么这不起作用.
请帮忙.
是否有任何压缩机负责移除在应用程序中无法调用的开关盒?
function execute_case(id) {
switch(id) {
case 0:
console.log("0");
break;
case 1:
console.log("1");
break;
case 2:
console.log("2");
break;
case 3:
console.log("3");
break;
default:
console.log("default");
break;
}
}
execute_case(1);
Run Code Online (Sandbox Code Playgroud)
如果以上就是我所拥有的,那么理论上情况0,2,3就是死代码并且永远不会被执行.在缩小代码时,是否有任何压缩器具有删除此代码的智能?
我正在看一段代码,它在一个switch语句中有超过200,000个案例,因此问题.
谢谢,-Vikrant
javascript performance yui-compressor google-closure-compiler
yui-compressor ×10
javascript ×5
ant ×2
css ×2
minify ×2
build ×1
cdn ×1
html ×1
java ×1
jenkins ×1
jscompress ×1
maven ×1
performance ×1
php ×1
powershell ×1
symfony ×1