php 中用于缩小/压缩 javascript 的简单正则表达式搜索和替换?

2023-11-23

你能在 php 中发布正则表达式搜索和替换来缩小/压缩 javascript 吗?

例如,这是一个简单的 CSS

  header('Content-type: text/css');
  ob_start("compress");
  function compress($buffer) {
    /* remove comments */
    $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
    /* remove tabs, spaces, newlines, etc. */
    $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $buffer);
    return $buffer;
  }

  /* put CSS here */

  ob_end_flush();

这是 html 的一个:

<?php
/* Minify All Output - based on the search and replace regexes. */
function sanitize_output($buffer)
{
    $search = array(
        '/\>[^\S ]+/s', //strip whitespaces after tags, except space
        '/[^\S ]+\</s', //strip whitespaces before tags, except space
        '/(\s)+/s'  // shorten multiple whitespace sequences
        );
    $replace = array(
        '>',
        '<',
        '\\1'
        );
  $buffer = preg_replace($search, $replace, $buffer);
    return $buffer;
}
ob_start("sanitize_output");
?>
<html>...</html>

但是对于 javascript 来说怎么样呢?


用于缩小/压缩 javascript 的简单正则表达式不太可能存在于任何地方。这可能有几个很好的理由,但以下是其中几个原因:

换行符和分号好的 javascript 压缩器会删除所有额外的换行符,但由于 javascript 引擎在每个语句末尾没有分号的情况下也可以工作,因此压缩器很容易破坏此代码,除非它足够复杂以监视和处理不同的编码风格。

动态语言结构许多可用的优秀 JavaScript 压缩器也会更改变量和函数的名称以压缩代码。例如,在文件中调用 12 次的名为“strip_white_space”的函数可能会被重命名为简单的“a”,以便在缩小的代码中节省 192 个字符。除非你的文件有a lot注释和/或空白,像这样的优化是您节省的大部分文件大小的来源。

不幸的是,这比简单的正则表达式要复杂得多should尝试处理。假设你做了一些简单的事情:

var length = 12, height = 15;
    // other code that uses these length and height values

var arr = [1, 2, 3, 4];
for (i = (arr.length - 1); i >= 0; --i) {
    //loop code
}

这都是有效的代码。但是,缩小器如何知道要替换什么?第一个“length”前面有“var”(但不是必须),但“height”前面只有一个逗号。如果缩小器足够聪明,可以正确替换第一个“长度”,那么当用作数组的属性时,它必须知道不更改单词“长度”有多聪明?如果您定义了一个 javascript 对象,其中专门定义了“length”属性并使用相同的点表示法引用它,那么事情会变得更加复杂。

非正则表达式选项有几个项目使用比简单的正则表达式更复杂的解决方案来解决这个问题,但其中许多项目没有尝试更改变量名称,所以我仍然坚持使用迪恩·爱德华兹的包装工 or 道格拉斯·克罗克福德 (Douglas Crockford) 的 JSMin或类似的东西YUI压缩器.

Douglas Crockford 的 JSMin 的 PHP 实现

https://github.com/mrclay/minify

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 中用于缩小/压缩 javascript 的简单正则表达式搜索和替换? 的相关文章

随机推荐

  • ffmpeg:连接视频和图像

    我有 2 个视频 相同的分辨率 相同的编码 文件 我想要连接它们 并且我想在它们之间插入一些文本 3 秒 作为分割器 我在 Windows 上使用 ffmpeg 执行此操作 我感兴趣的可选想法 避免在此过程中重新编码视频 在每个部分的交叉处
  • Presto SQL:使用作为查询结果的时区字符串更改时区不起作用

    我通过 Mode Analytics Platform 连接到 AWS Athena 并使用其查询引擎 基于 Presto 0 172 查询表 这张表public zones时区信息存储在名为的列中time zone在我感兴趣的一些区域 存
  • 使用 OpenCV 检测灰色物体

    我想使用 OpenCV 检测一个与场景中其他元素明显不同的对象 因为它是灰色的 这很好 因为我可以使用 R G B 运行测试 并且它允许独立于亮度 但逐像素执行速度很慢 有没有更快的方法来检测灰色的东西 也许有一个 OpenCV 方法可以进
  • xamarin Forms:根据键盘高度向上移动视图

    我正在使用 xamarin 表单 我用xaml设计了一个登录表单页面 我想在键盘出现时向上移动登录表单视图 以便文本字段和登录按钮在两个平台上都可见Android and IOS 如何计算键盘高度并通过动态计算键盘高度将登录表单视图向上移动
  • perl文档中哪里提到了0.0001、0.00001打印差异?

    perl 文档中的哪里提到了何时将在这里获得指数格式 perl wle print for 0 001 0 0001 0 00001 1 00001 0 001 0 0001 1e 05 1 00001 No I am not谈论print
  • Android中使用Content Provider批量删除项目

    我正在尝试批量删除表中的某些项目 String ids 1 2 3 mContentResolver delete uri MyTables ID ids 但是我不断收到以下错误 java lang IllegalArgumentExcep
  • Android viewPager 图片从右向左滑动

    我想添加图像幻灯片 但无法使其从右向左滑动 适用于阿拉伯语或希伯来语等语言 我检查了stackoverflow上的几乎所有回复 但找不到明确的解决方案 我在这里写下整个代码 请写清楚 我不是专业人士 主要活动 package com man
  • 在 Visual Studio 2010 中创建文件时是否可以自动设置“复制到输出目录”?

    我最近开始尝试使用 LuaInterface 来让 Lua 脚本在我的 C 程序中工作 为了在 Visual Studio 中轻松创建 Lua 脚本 我安装了 Lua 语法突出显示插件并创建了一个项目模板 以便我可以通过右键单击项目文件并选
  • 某些函数式编程结构是否会降低可调试性?

    我听说以下功能会降低可调试性 因为它们是匿名的 调试器无法很好地跟踪它 匿名类 内部类 闭包块 Lambda 函数 这是真的 关于您提到的特定功能 已经有一些很好的答案 一般来说 我想说一些 FP 功能以及以更多 FP 风格进行编程的方面至
  • 您是否应该实现 IDisposable.Dispose() 以使其永远不会抛出异常?

    对于 C 中的等效机制 析构函数 建议是 它通常不应该抛出任何异常 这主要是因为这样做可能会终止进程 这很少是一个好的策略 在 NET 中的等效场景中 抛出第一个异常 由于第一个异常而执行了finally块 finally 块调用 Disp
  • 是否可以在常规对象(而非 DOM 对象)上分派事件? [复制]

    这个问题在这里已经有答案了 我刚刚发现 FileReader 调度事件就像它是 DOM 元素一样 是吗 我想知道是否可以创建一个类似于 FileReader 的对象 它没有 HTML XML 结构的表示 但可以调度事件 FileReader
  • async.each 和 async.eachSeries 之间的区别

    Is 异步每个作为异步数组迭代工作 Is async eachSeries作为同步数组迭代工作 它实际上等待响应 我问这些是因为两者都有回调 但 async each 的工作方式类似于异步数组迭代 This is traditional w
  • 序列化可选的 where 子句参数?

    这是一件让我真正烦恼的事情 我必须为几乎相同的查询编写两个不同的函数 假设我有一个返回的 APIposts与特定的相关联typeId and cityId 要得到ALL相关帖子typeId 1 OR 2 OR 3 and cityId 1我
  • VB.NET静态代码分析

    有谁知道 vb net 的良好代码静态代码分析吗 我见过很多关于 c 的内容 我认为 VS 2008 内置了一些 但我们目前只使用 vs 2005 FxCop就是这么做的 具体针对 VB NET 的是项目分析器
  • 如何从 html 按钮调用 Firefox 扩展中的函数

    如何使用网页中的 html 按钮调用在我的扩展中声明的 Javascript 函数 我有一个 html 页面 里面有一个按钮 当用户单击该按钮时 它将调用我已经在自己的 Firefox 扩展中声明的函数 由于您控制网页 因此执行您想要的操作
  • 按共享列值合并关联数组的数组[重复]

    这个问题在这里已经有答案了 我想根据公共列值合并两个数组 这是我的 2 个数组 array1 total process per category gt 6 category id gt 1 total process per catego
  • 如何使用 NSDistributedNotifications 在进程之间共享核心数据存储?

    背景 我已经发布了一个关于基础知识的问题在进程之间共享核心数据存储 我正在尝试实施给出的建议 但遇到了问题 My Goal 我有两个进程 Helper App 和 UI 它们都共享一个数据存储 当助手应用程序将新数据保存到商店时 我希望 U
  • 如何在 R 中重命名具有特定模式的文件?

    有一些 fcs文件在一个数据 000X目录中的格式 其中 X 1 2 3 我想重命名每个n文件格式如下 exp fcs where exp是来自向量的文本 如果要重命名的文件是 fcs file 换句话说 我想将文件重命名为exp txt
  • 将 PCAP 跟踪转换为 NetFlow 格式

    我想将一些 PCAP 跟踪转换为 Netflow 格式 以便使用 netflow 工具进行进一步分析 有什么办法可以做到这一点吗 具体来说 我想使用 flow export 工具从 netflow 跟踪中提取一些感兴趣的字段 如下所示 fl
  • php 中用于缩小/压缩 javascript 的简单正则表达式搜索和替换?

    你能在 php 中发布正则表达式搜索和替换来缩小 压缩 javascript 吗 例如 这是一个简单的 CSS header Content type text css ob start compress function compress