0

我想问这个问题。使用 javascript 或 PHP 执行正则表达式搜索和替换功能在效率方面有什么区别?

如果我要开发一个网站,两种语言都可以执行相同的功能,但我只是好奇通常专业的 Web 开发人员使用什么。

如果两者都可以执行相同的操作,我想知道何时使用 javascript 或 PHP 的标准。

Javascript var result = str.replace();

PHPpreg_replace();

4

3 回答 3

5

在这种情况下,这实际上不是性能问题,而是您想要在哪里进行替换。如果你想在客户端做一些事情,你可以使用 JavaScript。如果您想在服务器端执行此操作,请使用 PHP。

另外:如果您可以选择(例如,不是在 PHP 中进行替换然后回显它,而是在客户端用 JavaScript 替换),我会使用 JavaScript,因为用户的浏览器完成了这项工作,而不是您的服务器,因此它会减少服务器负载。但这仅在您每分钟有数千次替换或类似情况时才有意义。

于 2013-10-24T03:17:44.737 回答
1

答案很可能不仅仅取决于它的原始性能。例如,假设您将 PHP 与 Javascript 结合使用,您的意思可能是说 Javascript 发生在浏览器端,而 PHP 发生在服务器端。

例如,如果您需要验证电话号码的格式,您可以在提交表单之前(在浏览器内的 Javascript 中)或在 PHP 中的服务器端执行此操作。

假设您是用 Javascript 完成的,那么当没有 Javascript 的用户过来填写您的表单时会发生什么?或者更有可能是垃圾邮件机器人?格式不正确的数据现在被传回您的服务器,并可能触发错误或其他意外情况。在此示例中,您可能希望至少在服务器端验证电话号码。但是您可能希望能够在提交之前告诉用户电话号码无效,而不必等待服务器对其进行验证并发送回错误,因此除了服务器上的 PHP之外,还可以在浏览器端使用 Javascript side 可能是您选择实现它的方式。

我希望这有助于展示在何处实现逻辑的一些注意事项。

于 2013-10-24T03:20:53.717 回答
0

一个非常不可靠的基准表明浏览器实际上可能更快。尽管使用我制作的测试用例与我制作的 PHP 用例相比,浏览器中可能会进行一些非常大的优化。

这篇文章也支持以下发现:PHP 与 JavaScript 的速度?

在 PHP 中运行此代码:

<?php
    require("Logger.php");

    $string = "apples and bananas";

    $logger = new Logger("Start");
    for ($x = 0; $x < 1000000; $x++) {
        $newString = str_replace("bananas", "oranges", $string);
    }
    $logger->log("Finish");

    echo $logger->status();

在我的本地机器(WAMP)上返回10867ms 。(并且删除我用于记录的类不会加快速度。)

运行以下 JS 代码 ( http://jsfiddle.net/MQKLT/3/ ) 返回大约 343 毫秒(并且明显更快)。

function go() {
    var str = "apples and bananas";

    var newString = "";

    var d = new Date();
    var n = (d.getSeconds() * 1000) + d.getMilliseconds();

    for (var x = 0; x < 1000000; x++) {
        newString = str.replace("bananas", "oranges");
        newString = newString + x;
    }

    var d2 = new Date();
    var n2 = (d2 .getSeconds() * 1000) + d2.getMilliseconds();

        //console.log("First: " + n + " Second: " + n2 + " Total: " + (n2 - n));
        alert("First: " + n + " Second: " + n2 + " Total: " + (n2 - n) + " Output: " + newString);

}

正如我所说,浏览器可能正在进行一些重大优化。我在上面发布的值是在 Chrome 中测试的。我在 IE 中确实得到了相似的时间,在 Firefox 中得到了更快的时间(这表明优化正在发生。)

考虑到这一点:我是一个懒惰的程序员,只要不损害安全性,我倾向于选择对我来说最方便的东西。(IE,关于验证的字符串操作应该在 PHP 中完成/远离客户端控制) 对字符串替换本身进行 AJAX 请求绝对没有意义。对于现实世界的案例,它取决于很多变量,例如所涉及的浏览器、所涉及的 PC、所涉及的服务器。

如果您担心字符串替换的性能,那么您用来执行任务的逻辑可能有问题。

于 2013-10-24T03:57:39.423 回答