如何在不同网页的文件组中自动化Javascript组合和缩小
How to automate Javascript combining and minification, in groups of files for different webpages?
假设我的页面结构是:
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
等等。有些页面的访问量比其他页面多,比如说 3 个页面占网站所有页面浏览量的 99%。
我正在寻找以下解决方案:
i( 合并并最小化可以包含在页面中的组文件。
ii( 具有一些逻辑将组的文件名映射到最终组合的文件名。
iii(包括一个最小化器,如谷歌闭包编译器/YUI压缩器。
我看过的一个解决方案是:PHP缩小
其中大部分。但是它对我来说有以下缺点:
i( 我将在 CDN 服务器上托管我的静态组合文件,而不是在托管 PHP minify 的同一 Web 服务器上,因此 PHP minify 按组名服务器文件的逻辑对我不起作用。
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>
而不是调用PHP Minify的PHP脚本来获取组的文件,这是实际上是一个PHP页面调用,然后提供以前的JavaScript内容生成的文件:
<script type="text/javascript" src="http://www.MYWEBSERVER.com/min/?g=onePage" ></script>
(我同意通过将不同的解决方案与自定义部署脚本和缩小工具(例如 ANT、FABRIC + YUICompressor/ClosureCompiler(相结合,其中大部分是可行的,但我正在寻找一个开发良好的可配置解决方案,我可能错过了(
更新以显示缩小示例
使用缩小似乎确实可行。我不确定您是否尝试过这个,但把它放在那里给可能需要它的其他任何人
1( Minify 可以生成脚本的组合和 gzip 副本,并将其用作缓存,这样它就不需要处理您的所有文件。要启用此功能,只需使用临时目录的位置编辑 config.php 文件
$min_cachePath = 'c:''xampp''htdocs''min''cache';
2(在groupsConfig.php中添加所有组后,只需向每个组发出请求,以便minify在缓存文件夹中生成输出文件
3(对于每个组,您将在临时文件夹中找到2个文件,命名为:
minify_g=group1_08da191ba9c60a0ed611d0de455bb7a4
minify_g=group1_08da191ba9c60a0ed611d0de455bb7a4.gz
4( 您可以重命名文件并根据需要将其直接部署到您的 CDN
5( 如果您的 CDN 允许重写 url,您可以重写脚本 url 以提供 JS,而无需更改您服务的页面中的位置。
除非你有大量不同的配置,否则我建议你使用YUICompressor并部署到你的CDN网络。使用简单的 shell 脚本自动执行这样的事情实际上是非常简单的。但是,如果您的设置非常复杂,则可以考虑使用在node.js上运行的构建工具,例如grunt。我一直在使用 Grunt 使用相同的代码库为不同的项目构建 JS 文件,它运行良好。此外,支持 OOTB 的 lint 和压缩。
我自己的项目很像你的;带有外部和实习 JavaScript、CSS 和图像的 HTML。我也四处寻找现成的解决方案,但找不到它,所以我开发了自己的解决方案。以下是我创建的系统的概要。如果你要走这条路,我希望这能让你知道要寻找什么。
系统首先签出要部署的项目的特定修订版。您需要在本地文件系统上的路径与其各自的远程路径(例如 CDN 或 Web 服务器(之间建立转换;就我而言,所有资产都是从项目内的固定目录加载的。
我首先解析所有HTML模板(我有一个MVC将HTML与PHP代码分开(;这收集了所有的JavaScript,CSS和图像引用:
- HTML,JavaScript或CSS中的图像引用被替换为它们在CDN上的位置。
- 实习的JavaScript和CSS分别使用Closure Compiler和YUI进行即时压缩。
- 连续的外部JavaScript和CSS块被压缩代码/样式的单个捆绑包所取代;捆绑包名称是文件名及其各自版本的哈希(CDN将为这些文件提供最长到期日期,因此任何更改都必须导致唯一的文件名(。
然后,所有捆绑包都会被压缩、压缩、保存并上传到 CDN 以及任何映像,以准备部署。PNG 文件也被"粉碎"以减小其大小。
最后,上传和部署整个项目(在多个服务器的情况下(。
结论 这是很多工作,但是当它运行时,很高兴看到它工作:)
创建一个分组配置文件 (xml/php(,其中包含用于静态 HTML 的分组规则。
<groupings>
<group path='grouped_minified_js.js'><!-- multiple groups can be used for grouping js/css files. reuse this group by including the id in multiple views -->
<resource>PATCH_OF_FILE_TO_BE_GROUPED</resource><!-- multiple file to be grouped -->
.
.
.
</group>
<group path='xyz.css' /> ...<!-- additional grouping rule -->
</groupings>
创建一个PHP脚本,该脚本读取此配置并使用PHP minify在组定义中指定的路径创建分组的缩小的JS/CSS文件。
使用这些路径可将分组文件包含在静态 html 文件中。运行脚本以测试页面并将分组文件部署到 CDN。
咕噜声很棒。 如果这不起作用,请尝试盒式磁带:http://getcassette.com/
- 如何使用jquery从下拉列表(javascript)中选择192.168.3.0进行测试自动化
- 用于文件移动到另一个文件夹的Javascript自动化
- VBA-处理IE自动化弹出的Javascript
- SeleniumIDE自动化似乎打破了JavaScript窗口
- PG-13 JavaScript自动化机器
- 弗兰肯斯坦图像交换JavaScript需要整洁和可能的自动化
- 使用JavaScript调用Shell脚本以实现自动化
- 为网站自动化生成 JavaScript 测试对象的最佳方法是什么?
- 如何使用 JavaScript 实现自动化登录到脚本编辑器中的消息窗口
- 如何在优胜美地中打开一个新的Chrome窗口,其中包含javascript自动化
- 窗口原生键输入在javascript中用于挤压自动化工具
- 如何在不同网页的文件组中自动化Javascript组合和缩小
- 使用 javascript 准备自动化测试以测试模块
- JavaScript/VBA自动化:更改onclick属性
- 从javascript中自动化wordforwindows2007
- 自动化Javascript单元测试..从哪里开始
- 如何在Javascript中自动化工作幻灯片
- 是否可以通过javascript实现嵌入式flash登录的自动化
- CRUD Excelsheets使用Javascript创建具有Protractor的自动化框架
- Powershell网站自动化:Javascript弹出框冻结