在页面上显示计时器的最佳方式是什么

what is best way to show timer on page

我想知道使用 comet 更新计时器是否真的比在客户端使用 javascript 并在特定时间间隔发布到服务器以记录时间(如果需要)真的有开销?

body() ->
 wf:comet(fun() -> counter(1) end),
 #panel { id=placeholder }.

counter(Count) ->
 timer:sleep(1000),
 wf:update(placeholder, integer_to_list(Count)),
 wf:flush(),
 counter(Count + 1).

我了解它的开销,但我想知道有多少?因为所有事件通信都发生在 websocket 上..

使用 comet/websockets 执行此操作会增加不必要的开销:服务器端的额外进程以及额外的带宽使用。如果这是服务器端发生的事情的持续状态更新,那将是不同的,但仅仅增加一个计数器来显示客户端是最好留给客户端的事情。

在客户端使用 javascript 的 setInterval 轻松消除任何问题。像下面这样的东西应该可以完成工作。

body() ->
  [
    #panel { id=placeholder },
    <<"
    <script>
      var my_counter = 1;
      function update_counter() {
        objs('placeholder').html(my_counter);
        my_counter++;
      }
      setInterval(update_counter, 1000);
     </script>
     ">>
  ].