是否经常运行jQuery.get会导致浏览器出现性能问题?

时间:2018-01-23 11:38:58

标签: javascript php jquery performance websocket

因此,您了解我尝试做的事情,我已经编写了一个网页,显示在MySQL插入数据库后立即记录的事件(基本上监控Windows& Mac登录/注销在网络上)。每次插入新事件时,PHP脚本都会连接到Web套接字,并向所有连接的浏览器发送消息,以通知他们新事件。当浏览器收到通知消息时,它们会运行jQuery.get("liveeventsearch.php", ...);以从数据库中获取新事件(请参阅下面的javascript代码)。

简而言之,当收到Web套接字消息时,从数据库中获取新记录,将结果附加到表中并播放通知声音。

socket.onmessage = function(msg) {
    if (msg.data == "@all new event") {
        var newLastUpdate = new Date().toISOString().slice(0, 19).replace('T', ' ');
        jQuery.get("liveeventsearch.php", <?php echo '{ Key:"' . $Value . '", etc... , lastupdate:lastUpdate }'; ?>, function(result) {
            jQuery('#LiveResults tbody').append(result);
            if (jQuery('#chkNotification-Audio').is(':checked') && result > "")
            {
                jQuery("#Notification-Audio").trigger("play");
            }
            lastUpdate = newLastUpdate;
        });
    }
};

我担心的是网络上目前有大约1200台设备,预计大多数(如果不是全部)设备将在5到10分钟内以大块每小时登录/注销,其中一些分散在这里并且那里。因此,浏览器(取决于提供的搜索条件)可能会在很短的时间内收到大量的Web套接字消息,如果不是同时的话(显然很多次获取liveeventsearch.php)。这是否可能导致浏览器频繁获取结果出现问题?

如有必要,我可以在liveeventsearch.php中提供代码。

替代方法

我曾想过在socket.onmessage函数中添加类似的内容来降低频率。

//[PSEUDO CODE]
if (currentTime > lastUpdate + 3 seconds)
{
    jQuery.get(...);
}

但是,在收到另一个可能超过3秒的Web套接字消息之前,最后一组事件将不会出现。我可能会使用一个计时器,但这种方式会破坏让网络插座提供“直播”的目的。更新。

我想到的另一个选项是创建一个只包含liveUpdates字段的新MySQL表(例如ID)。然后每X秒运行一次cron作业,在该表中插入一个新的ID(或者在服务器上运行一个带有连续循环的脚本做同样的事情?)。然后,我的events表可以有一个额外的字段将每个事件绑定到最新的liveUpdates.ID,并且cron作业可以在每次创建新的更新ID时发送Web套接字消息,而不是每次记录事件时。但这再次与使用计时器具有相同的效果。

0 个答案:

没有答案