php - Javascript 缩小自动化

标签 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>
<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>

由于访问者人数越来越多,我开始考虑所有这些的性能。我读过,缩小所有 javascript 文件并将它们集中在一个文件中是个好主意,因此浏览器必须只发出一个 HTTP 请求。我这样做了。现在我有了包含所有 javascript 的 everything.js 文件,包括 jquery、插件和我的自定义脚本。

<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>
...
-->
<script src="/js/everything.js"></script>
</head>

当我需要对其中一个文件进行更改时,乐趣就开始了。每次,为了检查我的更改是否按预期工作,我需要压缩文件并更新 everything.js 或取消注释所有旧代码。使用这种工作流程很容易忘记某些事情并犯错误。

问题:有没有自动化的东西可以解决这个问题?有什么东西可以让我像以前一样编辑我的单独文件,并在我准备好测试我的更改时缩小并整合所有内容?

我正在使用 PHP5 和 SVN

解决方案

谢谢大家的帮助,我找到了解决办法: 我将在我的 SVN 存储库中放置一个 post-commit Hook ,它将获取我所有的 .js 文件,将它们放在一起并使用 YUI 压缩器缩小它们。然后,在我的脚本中,我将 fork javascript 包含,以便在开发环境中站点将包含单独的 javascript 文件,但在生产环境中将包含合并和缩小的文件。

最佳答案

我们有自定义部署脚本来处理它。简而言之,它使用 YUI Compressor 缩小所有 CSS 和 JavaScript 文件。并将它们打包到最多两个文件中,一个是通用文件,另一个是针对给定页面的特定逻辑。完成后,我们创建一个符号链接(symbolic link)(或一个新文件夹,具体取决于项目)到包含打包文件的文件夹,新的更改会立即传播。这种方法用于除开发以外的所有环境。

缩小之前,这是 CSS 结构的样子(对于 JavaScript 来说差不多,只是给你一个想法):

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

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

关于php - Javascript 缩小自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386279/

相关文章:

javascript - 如何通过on-tap函数从html到javascript获取 "index-as"值?

javascript - 在不一致的字符串上拆分

c++ - 基于单元框架的算法性能测试的可靠性

html - SVG/SMIL 回流/重绘的性能影响?

performance - 如何使用jmeter模拟1000个并发用户

php - 从 PHP 数组中提取行或列

php - php中的十进制类型

javascript - Jquery:内容搜索错误

javascript - 从 php 创建的下拉列表列表中单独填充 textarea

php - 如何覆盖PHP的路径以使用MAMP路径?