【问题标题】:Should I be using JSON or XML or something to fetch a pages contents every X amount of time?我应该每 X 次使用 JSON 或 XML 或其他东西来获取页面内容吗?
【发布时间】:2009-08-21 16:30:15
【问题描述】:

index.php 有这个 jquery 代码,它每 X 秒将 notification.inc.php 加载到页面上的一个 div 中

<script type='text/javascript'> 
$(document).ready(function(){ 
     var updatenotification = function(){ 
          $('#notificationcontainer') 
               .load('notifications.inc.php') 
               .fadeIn("slow"); 
     }; 
     var auto_refresh = setInterval(function(){updatenotification();}, 5000); 
     updatenotification(); 
}); 
</script>

notifications.inc.php

<?PHP
if(notifications != 0){
?>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="box1r">
<tr><td height="25">Notifications</td></tr><tr><td colspan="2" bgcolor="#FFFFFF" height="11">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<?PHP
if($item1 == 1){
    echo 'AN HTML TEXT LINK HERE';
else if($item2 == 1){
    echo 'AN HTML TEXT LINK HERE';
else if($item3 == 1){
    echo 'AN HTML TEXT LINK HERE';
else if($item4 == 1){
    echo 'AN HTML TEXT LINK HERE';
}
// ect. ect
?>
</table></td></tr></table>
<?PHP
}// end main block, only show the header "Notification" text if there is at least 1 notification ITEM to be shown
?>

现在这对我来说效果很好,可以显示用户何时收到新消息, cmets,照片 cmets,好友请求,主页上的类似内容。

我的网站流量很大,我想在各个方面改进代码,(请保存预优化是邪恶的言论,我只有时间,已经在这个网站上工作了 2 年,我想尽我所能)

所以我认为这可以做得更好吗?首先我知道我应该重新编码表格以使用 DIV,但现在我将在这个特定页面上使用这个表格设置。

那么为了节省带宽和性能,我应该使用 JSON 还是其他东西,而不是每 10 秒左右加载另一个页面的内容?

如果我应该使用 JSON 或其他东西,请稍微解释一下,我是 JS 新手,所以我不确定如何准确实现它

【问题讨论】:

    标签: php javascript jquery xml json


    【解决方案1】:

    如果我没看错,那么您在每次投票时都会发送整个通知流。我认为更好的优化是只要求 new 通知。您可以将每个通知的时间戳放在表格行中的某个位置,然后请求notifications.inc.php?since=1234567890。这将只返回新的表行,您可以将它们插入到表中,而不是替换整个行。

    JSON 将是下一步,是的;只需在服务器上创建一个对象,使用existing library 对其进行编码,将其返回给客户端,然后让 jQuery 为您将其扩展为 Javascript 对象。如果您将所有内容都封装在库中,您实际上只是将数组+哈希结构从服务器移动到客户端。

    【讨论】:

      【解决方案2】:

      您可以解决此问题的一种方法是将通知表的基本 HTML 放置在每个页面上,但请确保使用 CSS 将其隐藏。然后你可以做一个简单的 JSON 帖子(我会为此推荐 JSON,因为它是一个非常简单的帖子,请求非常简单的数据,所以 XML 会过大)。然后,如果帖子返回通知,您将其放入表格并将显示从无翻转为阻止(在这里您可以添加任何您想要的淡入/淡出内容)。

      这将大大减少来回发送的字节数,既可以节省带宽,又可以帮助那些连接速度较慢的人加快发帖速度。

      【讨论】:

      • 我喜欢这个想法,但不确定因为 html 是动态生成的,除非你的意思是每个项目都有一个类/ID,项目 1、项目2、项目 3 并且 json 会告诉哪些项目也显示
      • 我会在内部表上放置一个 ID,这样我就可以定位它,并将行写入该表,确保每个都有一个可用于定位的 ID。然后,您的 JSON 可以包含消息和可以用作 ID 的某种标识符。
      【解决方案3】:

      看看cometd 的这类事情。这在很大程度上已经是一个已解决的问题。

      【讨论】:

        【解决方案4】:

        这个想法是,与其重新传输整个格式化的 HTML、标签和所有其他内容,不如只发送数据,甚至可能只是 new 数据。浏览器中已加载的 javascript 查看新数据并调整显示的内容,或者重新创建显示的部分内容。

        因此,您可能会通过传输更少的数据(可能是非常少的数据)获得收益。

        Java 脚本的成本相当复杂。

        使用 JSON 作为您传输的数据格式的优点是解析起来非常简单 - 这是因为格式 javascript。

        有很多库和例子可以做这一切,所以实际的编码工作并不太大。

        【讨论】:

          【解决方案5】:

          使用 JSON 代替 XML 是一个好主意。因为正在传输的数据大小也很重要。在这方面,JSON 远比 XML 轻量级。此外,正如 Steven 所说,XML 将是矫枉过正,因为 JSON 适合 javascript 对象格式。所以提取数据比 XML 简单。

          【讨论】:

            【解决方案6】:

            在我的最新项目中,我使用 JSON 将结果传达给前端。我认为它适用于 JQuery。不要忘记 JSON 是为 javascript 构建的(JAVASCRIPT Object Notation)

            【讨论】:

              猜你喜欢
              • 2010-10-07
              • 2012-08-22
              • 2011-06-11
              • 2011-05-30
              • 1970-01-01
              • 1970-01-01
              • 2015-01-07
              • 2016-09-12
              • 1970-01-01
              相关资源
              最近更新 更多