0

如题所述,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

4 回答 4

1

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

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

即使在那之后,您也会看到稍后会出现 jquery 加载的数据,但这是因为在get加载第一页之后调用该方法。用firebug或者其他工具可以看得很清楚(chrome和IE都有)。

于 2012-05-22T13:10:10.207 回答
0

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

无论数据有多大,都使用最佳(在您的情况下是最快的)方法附加到 DOM ..查看这个 jsperf 以了解哪种方法最快

你会看到使用内置的 DOM 创建方法总是更快,例如

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

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

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

于 2012-05-22T13:05:06.017 回答
0

你的问题真的没有意义。使用 firebug 或 chrome 检查网络传输 - 您会发现在两种情况下等待数据的时间都差不多。但是,在接收到 php 生成的数据后,页面需要很长时间才能下载 jquery - 只有这样它才能请求新数据。

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

因此,在您的场景中,您无法加快获取速度 - 除非您将服务器切换到具有适当吞吐量和适当响应时间的东西。

于 2012-05-22T13:16:49.483 回答
0

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

如何让jquery显示数据和纯php一样快?

是:这是不可能的。

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

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

注意:这仅适用于两个版本竞争的设置。当然,通过不使用 PHP 和数据库请求来加速 HTML 页面的初始交付是有意义的,然后稍后使用 AJAX 加载一些内容。

于 2012-05-22T13:39:48.960 回答