0

jquery noob 在这里。

我有一个问题要问专业人士和有 jquery 经验的人。我创建了这个脚本,但我正在努力提高它的效率。无论如何,这个想法是我在 HTML 页面上有多个条目,这些条目通过 PHP 来自 MYSQL 数据库。

所以,

A - A2

B - B2

C - C2

不,A、B 和 C 是静态的。它只是从数据库中读取。A2,B2,C2 是每 10 秒更新一次的动态元素。在当前的表单中,每个条目都有多个 javascript 副本,这是非常低效的。在大约 100 个条目时,我的 CPU 使用率飙升至 20-40%。

脚本如下:

<script>
$(function() { 
var refreshId = setInterval(function()
{
$('#UpdateDiv<?php echo $entry; ?>').load('live.php?entry=<?php echo $entry; ?>').fadeIn("slow");
 }, 10000);
});
</script>
<?PHP
echo '<div id="UpdateDiv'.$entry.'"></div>';
?>

谢谢!

4

2 回答 2

1

问题是每个 div 元素都有自己的脚本,因此发送自己的请求。

基本上,每 10 秒,您就会发出 100 个请求。

相反,您应该有一个脚本每 10 秒加载一次新数据(可能是 json 格式),然后更改每个 div 的内容。

您可以通过遍历 json 数组中的每个元素并设置(伪代码)来做到这一点

for each i
  div[i].innerHTML(jsonarray[i])

其中 div[i] 是代表每个 div 的 jquery 对象。


要为每个条目加载数据,您需要使用名为的 php 页面创建一个新页面(例如)

直播.json

它将每个 div 内容放入一个 json 数组 ["content1","content2"]

如果 php 页面的名称没有 .json 后缀,您将需要 ajax 调用(您可以使用 ajax jquery 函数 - http://api.jquery.com/jQuery.ajax/)来设置将其解释为 .json 文件。

然后设置响应成功时的回调,并使用该 for 循环将内容放入每个 div 元素中。

于 2012-08-19T00:17:31.567 回答
0

您的问题是单独提出请求。通过每十秒左右将所有请求合并为一个请求,您将大大提高页面的效率。

您的 javascript 一次请求并显示所有条目:

var get_entries = function () {
    $.ajax({
        post: true,
        url: "entries.php",
        data: {
            entries: [1, 2, 3, 4, 5, 6, 7, 8]
        },
        success: function (response) {
            var entry_updates = JSON.parse(response);

            for (var entry in entry_updates) {
                $("#UpdateDiv" + entry).html(entry_updates[ entry ]);
            }
        }
    });
};

setInterval(get_entries, 10000);

并且您的 PHP 可以一次处理所有条目:

<?php

$entry_updates = array();

if (isset($_POST['entries'])) {
    foreach ($_POST['entries'] as $entry) {
        $entry_updates[ $entry ] = func_get_entry_info($entry);
    }
}

echo json_encode($entry_updates);
于 2012-08-19T00:45:10.923 回答