【问题标题】:How do you minify and/or compress JavaScript that is in a php file?您如何缩小和/或压缩 php 文件中的 JavaScript?
【发布时间】:2011-11-26 06:13:28
【问题描述】:

我正在查看优化选项,在检查了 SO 问题后,我并没有看到我想要做的事情的答案。希望这并不表明我正在做的是一种不好的做法!

我有一个通过 ajax 调用 php 文件加载页面内容的 Intranet 应用程序。许多 php 文件混合了 php、JavaScript 甚至一些 HTML,它们特定于它们加载到主界面中的界面功能。我想知道缩小或压缩这些文件。有没有办法做到这一点,还是因为我有多种语言而被卡住了?

更新:关于接受的答案:

我接受了 wildpeaks 的答案,因为我认为它最接近地回答了我最初的问题。然而,这是我希望我能接受两个答案的时候之一,因为我认为 Igor Zinov'yev 提供的答案可能给了我一个更重要的设计决定来思考。出于这个原因,我给他的答案+1,我想其他人也会这样做。希望这是有道理的,并且在 SO 规则之内。

【问题讨论】:

  • 将 JS 复制到一个新文件中,缩小,然后粘贴回去?
  • 优化选项?您是真的面临优化需求,还是只是为了好玩而创建一些工作?
  • 使用 http 级压缩。它会处理整个页面,而不管它是用什么语言编写的:php.net/manual/en/function.ob-gzhandler.php
  • @hakre :) 也许我正在工作。我对这种类型的应用程序开发还很陌生,许多“最佳实践”阅读表明建议进行缩小。
  • 最佳实践是在需要时而不是更早地进行优化。优化需要您通过分析获得的实际指标,而不是您在各处找到的“最佳实践”建议,这些建议通常是无用的,因为每个应用程序的设计和使用方式都不同。

标签: php javascript compression minify optimization


【解决方案1】:

您从错误的角度开始优化。显然,如果您的 PHP 文件中有硬编码的 JavaScript、HTML 和其他任何内容,那么您非常需要重构代码。但即使你不这样做,也不应该缩小代码,因为这样会更难维护。

把它从那里拉出来,从小步骤开始,你最终会到达那里。

更新:我想回复评论,但决定在这里详细说明我为什么这样回答你的问题。

我在这里谈论的是separation of concerns。您的服务器端代码文件不适用于客户端代码。到目前为止,我看到的所有这样做的解决方案迟早都会变成无法维护的混乱。

如果您想返回一段 HTML 代码,请将其放入模板中,并为模板提供特定于当前情况的变量。你可以通过Smarty 做到这一点。通过这种方式,您可以获得以下好处:

  • 没有重复的标记片段 - 有模板循环用于此
  • 可以在多个地方重复使用现有模板
  • 使用模板的开发人员无需进入您的服务器端代码
  • 而且您的服务器端代码变得更干净,闻起来也很香!

稍后当您将逻辑与表示分离时,您可能会发现您不需要使用 HTML sn-ps 发送 JavaScript 代码。也许你会创建一个单一的 JS 引擎(你将在构建时缩小)并且只需要在加载时触发某些事件。

【讨论】:

  • 有时需要动态传入javascript变量,因为这样的要求不缩小结果会很可惜。
  • 这可能是一个新手问题,但我还是会问:如果我使用 php 作为创建要通过 ajax 返回的新接口的地方,而你说的是静态 js不应该在那个文件中,但是当那个接口处于活动状态时我需要那个js,它来自哪里?我是不是把它拉出来放到一个单独的js中,然后在php中包含一个src设置为js文件的script标签?
  • @Igor 感谢您花时间更新您的原始答案。我看到了你所说的逻辑,这就是我编写“老派语言”代码的方式。我的一些设计在设计系统的同时学习了技术,而我的一些设计选择可能是失误!我会考虑一下。不是我来这里寻找的答案,但也许你已经回答了更重要的问题!
【解决方案2】:

您的 PHP 脚本会生成 Javascript 代码,因此它可以在输出之前压缩代码:在变量中生成代码,然后将该变量传递给压缩器,然后才输出到浏览器。

这是PHP library for that

【讨论】:

  • 不错的工具!你碰巧知道任何基准吗?速度够快吗?
猜你喜欢
  • 1970-01-01
  • 2012-01-29
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 2011-07-21
  • 2011-02-09
相关资源
最近更新 更多