使用AJAX异步MySQL的性能问题


Performance questions for using MySQL asynchronously with AJAX

这本身并不是问题,更多的是效率问题。

基本上,我有一个index.php文件,处理我正在建设的网站的主要代码。在该代码中有几个JavaScript/JQuery函数,它们使用$.ajax()处理使用其他php文件的数据。

我使用了两个与MySQL数据库交互的函数(注意这些不是完全实现的函数)。

一个用于更新数据库:

    function updateDB(text) {
        $.ajax({
                url: "update_db.php",
                type: "POST",
                data: {text:text},
        });
    }

和一个用于从数据库获取信息:

    function displayText() {
        $.ajax({
                url: "display_text.php",
                type: "POST",
                data: {},
        });
    }

在这两个文件("update_db.php"answers"display_text.php")的顶部,我包含了一个.php文件,它使用PDO连接到数据库:

<?php require_once('connect_to_db.php'); ?>

然而,这似乎效率低下,因为当我运行index.php文件时,数据库被访问了两次,一次用于更新数据库,一次用于显示数据库的内容。

我的问题是:是否有任何缺点连接到数据库两次?我的假设是,这会使数据库操作陷入困境,并使函数执行速度变慢。

如果有缺点,是否有一种方法只连接到数据库一次,即使主index.php调用两个不同的文件,每个必须连接到数据库?

我主要感兴趣的是学习如何编写更有效的代码,以及如何使文件处理更有效的意见。欢迎提出任何建议!

两次连接数据库没有实际问题(如果在两个单独的请求中进行连接,则必须这样做)。

如果update_db.php后面总是跟着display_text.php调用,那么通过让update_db.php返回display_text.php通常会发送的数据,您可能能够消除来自页面的一个请求。

如果您使用持久连接,我认为不会有问题。

如果您想编写更高效的代码,请尝试在页面末尾使用单个ajax调用在一次调用中处理所有这些代码。获取然后更新(或任何你需要做的)。

您可以使用持久连接,但这确实是一个坏主意,您可以查看更多详细信息:在PDO中使用持久连接的缺点是什么

如果你考虑性能你应该考虑很多事情,比如你应该使用include而不是include_once或者…点击这里查看http://seeit.org/2010/06/11/php-the-include-include_once-performance-debate/

对于你的问题,我认为你应该选择其中一个解决方案

  1. 使用单独的请求来使用异步优势(对于这个解决方案,我提供使用InnoDb引擎,使用行阻塞,而不是像MyIsam那样使用表阻塞)
  2. 使用单个请求获得最小的Mysql使用和更多的信息,连接到Mysql和选择数据库在我的服务器是需要50-300毫秒,你可以节省这个时间与单个请求。