Php Javascript小型化自动化

Php Javascript小型化自动化,php,javascript,performance,minify,Php,Javascript,Performance,Minify,我有一个网站,它使用了很多jquery/javascript。现在,在索引页面,我的头部包含了大约10个javascript文件: <head> <script src="/js/jquery.js"></script> <script src="/js/jquery_plugin_1.js"></script> <script src="/js/jquery_plugin_2.js"></script> <

我有一个网站,它使用了很多jquery/javascript。现在,在索引页面,我的头部包含了大约10个javascript文件:

<head>
<script src="/js/jquery.js"></script>
<script src="/js/jquery_plugin_1.js"></script>
<script src="/js/jquery_plugin_2.js"></script>
<script src="/js/jquery_plugin_3.js"></script>
<script src="/js/my_scripts_1.js"></script>
<script src="/js/my_scripts_2.js"></script>
<script src="/js/my_scripts_3.js"></script>
<script src="/js/my_scripts_4.js"></script>
<!-- ...and so on -->
</head>
当我需要更改其中一个文件时,乐趣就开始了。每次,为了检查我的更改是否按预期工作,我需要压缩文件并更新
everything.js
或取消对所有旧代码的注释。在这种工作流程中,很容易忘记一些事情并犯错误

问题:是否有一种自动化的东西可以消除这种头痛?一些东西,可以让我像以前一样编辑我的单独文件,并且在我准备好测试我的更改时可以缩小并整合所有内容

我正在使用PHP5和SVN

解决方案

谢谢大家的帮助,我找到了我的解决方案:
我将在我的SVN repo中放置一个
post-commit
钩子,它将获取我所有的
.js
文件,将它们放在一起,并使用YUI压缩程序缩小它们。然后,在我的脚本中,我将fork javascript includes,这样在开发环境中,站点将包含单独的javascript文件,但在生产环境中,将包含合并的和缩小的文件

像这样创建一个php文件,并将其保存为js目录中的merge_js.php

<?php
ob_start ("ob_gzhandler");
$f=$_GET['f'];
if(@file_exists($f)){
    $inhoud = file_get_contents($f);
    header("Content-type: application/javascript; charset: UTF-8");
    header("Cache-Control: must-revalidate");
    $offset = 60 * 60 ;
    $ExpStr = "Expires: " .
    gmdate("D, d M Y H:i:s",
    time() + $offset) . " GMT";
    header($ExpStr);
}else{
// file not found, we return empty
 $inhoud= "";
}
print $inhoud;

我认为您应该检查脚本在一个文件中时是否正常工作,然后压缩该文件。
我们没有太多的文件,所以我们对使用的每个文件都使用js缩小器。

如果您使用的是自动部署,您应该先执行缩小,然后再进行部署,否则批处理脚本应该可以。

我们有自定义部署脚本来处理它。简而言之,它使用压缩所有CSS和JavaScript文件,并将它们打包到两个文件中,一个是常规文件,另一个是特定页面的特定逻辑文件。完成后,我们将创建一个符号链接(或一个新文件夹,取决于项目)到包含打包文件的文件夹,并立即传播新的更改。此方法将用于除开发之外的所有环境

在缩小之前,这就是CSS结构的样子(对于JavaScript,这或多或少是一样的,只是给你一个想法):

之后:

minified/1290589645/css/common.css
minified/1290589645/css/0135f148a7f6188573d2957418119a9a.css

我们喜欢这种方法,因为它不涉及任何需要动态处理的额外代码。这只是一个部署的问题,每两周一次,用于生产。我们的登台环境每天都在更新,有时甚至一天更新不止一次,我们还没有遇到任何问题。

老实说,我以前没有这样做过,但我遇到了这两种解决方案,并认为它们可能会对您有所帮助:


祝你好运

你可以编写一个shell脚本,收集某个目录中的所有
.js
文件,然后进行梳理并压缩结果。我认为你应该检查脚本在一个文件中是否正常工作。将php文件另存为merge.phpB,但它不会合并任何内容。抱歉,可能名称错误,应该命名为compress或类似的名称。在这种情况下,压缩并不意味着传输压缩,而是JavaScript代码压缩(删除注释、不必要的空格、缩短变量名等)。这是一个可能存在严重安全问题的坏例子。由于该示例没有尝试验证$f的值,也没有检查该文件是否为js,以及是否位于预期的目录中,因此使用该代码几乎可以提供任何文件。我的建议是,不要使用这个。yuicompressor处理url()类型的值(例如
背景图像:url(../foo.jpg)
)是否很好?因为URL是相对于CSS文件的,所以在压缩文件时需要更新这些URL,否则相对引用将不正确。不一定要诚实。我们没有任何问题,因为我们有一些额外的逻辑,不管YUI压缩机处理得好与否。
<script type='text/javascript' src='js/merger_js.php?f=blackcan.js'></script>
css/Layout/Core/reset.css
css/Layout/Core/index.css
css/Layout/Tools/notice.css
css/Layout/Tools/form.css
css/Layout/Tools/overlay.css
css/Skin/Default/Core/index.css
css/Skin/Default/Tools/notice.css
css/Skin/Default/Tools/form.css
css/Skin/Default/Tools/overlay.css
css/Layout/Tools/gallery.css
css/Layout/Tools/comments.css
css/Layout/Tools/pagination.css
css/Layout/Index/index.css
css/Skin/Default/Tools/gallery.css
css/Skin/Default/Tools/comments.css
css/Skin/Default/Tools/pagination.css
css/Skin/Default/Tools/achievements.css
css/Skin/Default/Tools/labels_main.css
css/Skin/Default/Index/index.css
minified/1290589645/css/common.css
minified/1290589645/css/0135f148a7f6188573d2957418119a9a.css