现场比分表最佳实践

时间:2014-09-01 17:08:00

标签: php jquery ajax live

我打算制作一个实时评分表,显示数据库中的分数 显然我会用jquery ajax来做这件事,但我想知道这样做的好习惯。

选项1:在我的javascript中构建表

返回一个包含所有分数的数组或对象并使用javascript或jquery构建表是一个好主意:意味着我遍历结果并在需要的地方创建一个tr或td。

选项2:返回表

或者我应该在php中构建表,并在网页上吐出全部内容。我认为这里唯一的问题是你对内容没有真正的控制权,如果我想要动画一行被删除。

我很讨厌这个。理想情况下,我很想知道,如果分数发生变化,那么行变为淡出动画并且新分数就会到位。

这就是为什么我会就如何实现这一点提出一些见解和意见。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为AJAX最好只读一个JSON,而不是别的。这样,您就可以将其作为REST API的一部分。然后让您的脚本使用DOM操作呈现表。这就是Angular和Backbone等现代框架所做的事情。

现在,关于完成数据检索的方法。

基于Cron的方法

在这样的场景中,我通常做的是创建一个只负责更新数据的脚本。例如:

<?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可以让它更频繁地执行脚本。

现在让我们讨论一下这种方法的一些缺点。

  1. 首先,经常产生新流程的问题。通常,生成一个新进程的成本很高,因此每隔几秒钟初始化一个完整的PHP解释器对我来说听起来不是一个好主意。
  2. 其次,存在I / O操作性能问题。由于我们使用HDD作为缓存,因此脚本的速度将与HDD保持同步一样快。
  3. 这引导我们采用另一种方法,这已在评论中讨论过......

    运行时方法

    您可以拥有以下内容的AJAX查询scores.php

    <?php
    if (isCacheValid())
    {
        $data = readCache();
    }
    else
    {
        $data = ...
        saveCache($data);
    }
    echo json_encode($data);
    

    这种方法的优点是:

    1. 你不会每隔几秒就产生一次PHP解释器,因为它包含在Apache的/ nginx / fastcgi的内存中,可以动态处理你的脚本。
    2. 脚本与您选择的缓存方法一样快。由于硬盘速度很慢,memcached实际上是一个好主意,因为它将信息存储在RAM中,而且速度非常快。
    3. SQL性能问题

      每隔几秒查询一次数据库是数据库进入的完全正常状态,您不必担心它...除非查询表包含数千/数百万行。

      最后的笔记

      Don't optimize early。测量然后确定解决方案是否令人满意,或者是否需要继续工作。