我打算制作一个实时评分表,显示数据库中的分数 显然我会用jquery ajax来做这件事,但我想知道这样做的好习惯。
返回一个包含所有分数的数组或对象并使用javascript或jquery构建表是一个好主意:意味着我遍历结果并在需要的地方创建一个tr或td。
或者我应该在php中构建表,并在网页上吐出全部内容。我认为这里唯一的问题是你对内容没有真正的控制权,如果我想要动画一行被删除。
我很讨厌这个。理想情况下,我很想知道,如果分数发生变化,那么行变为淡出动画并且新分数就会到位。
这就是为什么我会就如何实现这一点提出一些见解和意见。
谢谢!
答案 0 :(得分:2)
我认为AJAX最好只读一个JSON,而不是别的。这样,您就可以将其作为REST API的一部分。然后让您的脚本使用DOM操作呈现表。这就是Angular和Backbone等现代框架所做的事情。
现在,关于完成数据检索的方法。
在这样的场景中,我通常做的是创建一个只负责更新数据的脚本。例如:
<?php
$data = ...
file_put_contents(__DIR__ . '/data/scores.json', json_encode($data));
然后我将这个脚本添加到cron中,以便它在我想要的间隔中执行。
* * * * * php myscript.php
最后,JS脚本只检索/data/scores.json
文件,而根本不接触服务器端代码。
在您的情况下,您希望经常运行脚本(每5秒钟)。 Cron最多能够每分钟运行一次任务,但是you can use some workarounds可以让它更频繁地执行脚本。
现在让我们讨论一下这种方法的一些缺点。
这引导我们采用另一种方法,这已在评论中讨论过......
您可以拥有以下内容的AJAX查询scores.php
:
<?php
if (isCacheValid())
{
$data = readCache();
}
else
{
$data = ...
saveCache($data);
}
echo json_encode($data);
这种方法的优点是:
每隔几秒查询一次数据库是数据库进入的完全正常状态,您不必担心它...除非查询表包含数千/数百万行。
Don't optimize early。测量然后确定解决方案是否令人满意,或者是否需要继续工作。