如何在PHP中轻松缩小JS...或别的什么

2022-08-30 22:00:39

我已经环顾四周,但我仍然有点困惑。

我尝试了Crockford的JSMin,但由于某种原因,Win XP无法解压缩可执行文件。

我真正想要的是一个简单易用的JS minifier,它使用PHP来缩小JS代码并返回结果。

原因是:我有2个文件(例如)我正在处理:脚本.js和scripts_template.js

scripts_template是我写出来的普通代码,那么我必须缩小它并将缩小的脚本粘贴到脚本中.js - 我实际上在我的网站上使用的脚本。

我想通过在我的页面上做这样的事情来根除中间人:

<script type="text/javascript" src="scripts.php"></script>

然后对于脚本的内容.php:

<?php include("include.inc"); header("Content-type:text/javascript"); echo(minify_js(file_get_contents("scripts_template.js")));

这样,每当我更新我的JS时,我就不必经常去一个网站来缩小它并将其重新粘贴到脚本中.js - 一切都是自动更新的。

是的,我也尝试过Crockford的PHP Minifier,我看了一下PHP Speedy,但我还不了解PHP类......有没有猴子可以理解的东西,也许是RegExp的东西?

我们让这更简单一些怎么样?

我只想删除制表符空间 - 我仍然希望我的代码可读。

这并不是说脚本使我的网站滞后史诗般的,只是任何事情都比没有好。

标签删除,有人吗?如果可能的话,如何完全删除空白行?


答案 1

我已经使用Douglas Crockford的JSMin的PHP实现很长一段时间了。连接文件时可能会有点风险,因为在闭包的末尾可能缺少分号。

明智的做法是缓存缩小的输出并回显缓存的内容,只要它比源文件更新。

require 'jsmin.php';

if(filemtime('scripts_template.js') < filemtime('scripts_template.min.js')) {
  read_file('scripts_template.min.js');
} else {
  $output = JSMin::minify(file_get_contents('scripts_template.js'));
  file_put_contents('scripts_template.min.js', $output);
  echo $output;
}

你也可以试试JShrink。我以前从未使用过它,因为我以前在JSMin上没有遇到过困难,但是下面的代码应该可以解决问题。我没有意识到这一点,但JShrink需要PHP 5.3和命名空间。

require 'JShrink/Minifier.php';

if(filemtime('scripts_template.js') < filemtime('scripts_template.min.js')) {
  read_file('scripts_template.min.js');
} else {
  $output = \JShrink\Minifier::minify(file_get_contents('scripts_template.js'));
  file_put_contents('scripts_template.min.js', $output);
  echo $output;
}

答案 2

看看Assesdic,一个伟大的PHP资产管理库。它与Symfony2很好地集成并被广泛使用。

https://github.com/kriswallsmith/assetic