jquery获取php数据很慢。如何让它快?

时间:2012-05-22 12:55:33

标签: php jquery

正如标题所描述的那样,jquery显示数据的速度比纯php慢1到2秒。在http://plekz.com/test-slow3.php进行演示。如何使jquery显示数据的速度与纯php一样快?

代码:

<div id="jqryd">
</div>

<script src="javascripts/jquery-1.5.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript">
    var jqryd = $('#jqryd');
    jQuery.get("sale-show-month2.php", function(data) {
        jqryd.html(data);
    });
</script>


<?php
    $sql = "SELECT payment_date, SUM(price) FROM sale WHERE seller_id=? && Year(payment_date)=? GROUP BY Month(payment_date) DESC"; //this is loged-in user.
    $q = $conn->prepare($sql);
    $result = $q->execute(array($user_id, $selected_year));
    if(!$result){
        die("Error Select user table query : ". implode(" : ", $q->errorInfo())); //if don't use implode, output of errorInfo() will be "Array".
    }
    while($r = $q->fetch(PDO::FETCH_ASSOC)){
        $price_db2 = $r['SUM(price)'];
        $payment_date_db = $r['payment_date'];
        $payment_month_db = date("F", strtotime($payment_date_db));
        $payment_month_db2 = date("m", strtotime($payment_date_db));
        echo "This is pure php : " . $payment_month_db . " - " . $money_currency . $price_db2 ."<br>";
    }
?>

4 个答案:

答案 0 :(得分:1)

分析您网站示例中的流量,除了结果之外,我在您的sale-show-month2.php页面中看到了您返回的jquery javascript。这会使整个页面变慢:由于某种原因,网络跟踪器会在调用中看到http://plekz.com/javascripts/jquery-1.5.js?_=1337691808625之类的查询字符串,这不允许使用缓存。

简单地避免将链接返回到jquery将提高性能。

即使在那之后你会看到稍后会出现jquery加载的数据,但这是因为get方法在加载第一页时被称为afeter。你可以用firebug或其他工具(chrome和IE有自己的工具)非常清楚地看到它。

答案 1 :(得分:0)

关于在服务器和客户端之间传输的数据量,我总是只传输所需的最小数据(可能使用纯文本/ XML或JSON,具体取决于数据)并使用最有效的方法将其附加到DOM

无论数据使用最好的(在您的情况下是最快的)方法有多大,都可以附加到DOM。check out this jsperf for an indicator which method is fastest

你会发现使用inbuild DOM创建方法总是更快,例如

var li = document.createElement('li');
li.innerHTML = i;
li.setAttribute('title', 'Element number ' + i);
li.setAttribute('class', 'list-item');
container.appendChild(li);

因此,在您的情况下,我将数据作为JSON传递,然后循环节点并根据需要追加。如果返回了大量数据,那么我将对数据进行分页 - 或显示一些初始数据,然后添加“显示更多”功能,检索要显示的下一部分数据。

关于后端 - 我会确保我的查询已经过优化并使用了正确的索引。

答案 2 :(得分:0)

你的问题没有意义。使用firebug或chrome检查网络传输 - 您会看到您在两种情况下花费大约相同的时间等待数据。但是,在收到php生成的数据后,页面需要很长时间才能下载jquery - 然后它才能请求新数据。

唯一值得注意的事情是,使用jquery连接到服务器需要半秒钟 - 如果连接错误,这种延迟将始终存在。使用服务器端生成的数据,您将获得一次,使用ajax,您将获得两次。

因此,在您的方案中,您无法加速获取 - 除非您将服务器切换到具有适当吞吐量和正确响应时间的服务器。

答案 3 :(得分:0)

虽然有一些方法可以优化结果,但问题的答案是

  

如何使jquery显示数据与纯php一样快?

是:这是不可能的。

在解析并准备好之前,您的Javascript将无法将任何内容加载到DOM中。这意味着已经加载了“纯PHP”数据,因为它是由服务器作为主页面的一部分提供的。

只有这样,当浏览器必须向服务器做另一个请求时,再花一次往返时间才能获得AJAX版本。所以:无论你的服务器和JS有多好,AJAX版本都不会像服务器端版本那么快。

注意:这仅适用于同时进行版本竞争的设置。当然,不使用PHP和数据库请求加速HTML页面的初始交付是有意义的,然后用AJAX加载一些东西。