代码之家  ›  专栏  ›  技术社区  ›  stickynotememo

对于必须经常刷新的组件,使用服务器组件还是客户端组件更好?

  •  -1
  • stickynotememo  · 技术社区  · 7 月前

    我正在开发一个聊天应用程序。目前,我的客户端组件向useEffect中的路由处理程序发出请求,每秒刷新留言板两次左右。参见示例:

    "use client";
    
    import { useEffect, useState } from "react";
    
    import message from "./messageType";
    
    export default function MessagesWindow() {
      const [messagesList, setMessagesList] = useState<message[]>([]);
    
      useEffect(() => {
          // Refresh messages refreshRate times per second.
          const id = setInterval(() => {
            fetch(/* Fetch from API endpoint */)
          }, 500);
    
          return () => clearInterval(id);
      }, [messagesList]);
    
      return (
        <ul>
          {messagesList.map((element: message) => {
            return <li key={element._id}>{element.messageContent}</li>
          });}
        </ul>
      );
    }
    

    这种方法肯定有效,但有人建议我应该使用服务器组件,以防止开销并消除对单独路由处理程序的需求。我还听说它减少了发送到客户端的Javascript。然而,如果所有的重新渲染都在服务器上完成,那么似乎必须下载整个页面。如果请求是偶尔的,这是有道理的,但我不确定这是否是最好的方法。然而,目前使用 useEffect 这似乎有点老套,所以我想知道哪种方法是最优化的。

    1 回复  |  直到 7 月前
        1
  •  1
  •   user19259811    7 月前

    你要找的是 dynamic rendering ,在使用Next.js时属于服务器端渲染策略。

    虽然更全面的方法是利用。。。

    • 服务器端呈现初始消息。在那里获取最新消息。
    • 然后使用 WebSockets 实时更新。
    • 甚至可能利用 streaming 这里也适用于ui/ux