javascript 或 PHP 来执行搜索和替换功能


javascript or PHP to perform search and replace functionality

我想问这个一段时间。 使用 JavaScript 或 PHP 执行正则表达式搜索和替换功能的效率有什么区别?

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

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

Javascript var result = str.replace();

PHP preg_replace();

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

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

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

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

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

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

一个非常不可靠的基准表明浏览器实际上可能更快。尽管使用我制作的测试用例与我制作的 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,涉及的服务器。

如果您担心字符串替换性能,则用于执行任务的逻辑可能存在问题。