【问题标题】:Why these minified comments in JS don't break the code?为什么 JS 中这些缩小的注释不会破坏代码?
【发布时间】:2016-02-25 23:32:36
【问题描述】:

我有一个网页,在将其发送到浏览器之前,我使用 PHP 删除了多个空格、制表符和每个新行。

                    $output = preg_replace('/\n/', '', $output);
                    $output = preg_replace('/( |    ){2,}/', ' ', $output);

现在,重新查看代码,我注意到在 JS 代码中我留下了一些 //comments...

查看源代码可以看到:

[...]lback, args) {     //step == -1 -> loop    if (step > n) {   clearTimeout(tim[...]

为什么这条评论 (//step == -1 -> loop) 不会破坏代码?!

为什么如果我打开检查器,我会看到“顺序”中的元素,就像有“新行”一样?

我认为是“新行”的问题,应该有一些其他字符告诉浏览器行结束并开始另一个,是吗?

如果是,我怎样才能确定将代码移动到一行,如何处理 JS 一行 cmets?

谢谢

【问题讨论】:

  • 您是否有理由不能/不会使用“真正的”、可识别语法的缩小器?几乎可以肯定的是,在减小尺寸和避免错误方面的努力是值得的。
  • @PaulRoub 的原因是我不认识他们,我有神经使用,我不确切知道他们是什么以及他们如何工作......所以我试着自己做...... . 你能给我一些更能解释它们的链接吗?谢谢

标签: javascript php html comments minify


【解决方案1】:

您的文件可能正在使用 DOS 类型的换行符(回车 + 换行符,\r\n)。通过替换换行符 (\n),回车符 (\r) 保留在文件中,这是 Apple 操作系统使用的换行符。

这意味着你所看到的

[...]lback, args) {     //step == -1 -> loop    if (step > n) {   clearTimeout(tim[...]

其实是

[...]lback, args) {\r     //step == -1 -> loop\r    if (step > n) {\r   clear[...]

如果您也想删除 cmets(对最小化有意义,但可能会破坏例如 Internet Explorer 条件 cmets),您可以通过

替换它们
$output = preg_replace("/\\/\\/[^\r\n]*", "", $output); // single-line comments
$output = preg_replace("/\\/*[\s\S]*?*\\/", "", $output); // multi-line comments

您应该在替换换行符之前 这样做。

【讨论】:

  • 您发布的正则表达式不应该起作用,对于 \n\r 的解释还是 +1...
猜你喜欢
  • 2020-06-23
  • 2018-02-08
  • 2012-10-08
  • 1970-01-01
  • 2017-12-04
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
相关资源
最近更新 更多