V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Plumbiu
V2EX  ›  Next.js

发现很多人不了解 Next.js

  •  1
     
  •   Plumbiu ·
    Plumbiu · 13 天前 · 2173 次点击

    先叠个甲,我也不怎么喜欢 Next.js ,但是一些事实性错误看到也是挺奇怪的。

    来了 V 站,见过吐槽 Next.js 的观点有以下几个:

    1. 服务端组件不能用 hooks

    这是最令我奇怪的一个点,服务端能用 hooks 还得了,是想让服务端有副作用吗。

    这里贴一句 V 站之前看到的评论:“在客户端渲染时,一般通过 useEffect 来获取数据。而在服务端渲染时,我们无法使用 useEffect,这使得在服务端请求数据(以及其他异步操作)成为了一个问题”

    有没有一种可能,服务端组件直接 fetch 就能获取数据了。

    2. use client 设计恶心

    事实上,Next.js 可以自动判断当前组件是不是客户端组件,但这对开发者来说不是显性的,use client 可以更好告诉你,这个组件是客户端组件。

    (另外,有人说 Astro 的 client:load 好的,我就纳闷了,这和 use client 有啥区别......)

    不过 Astro 的选择性水和我觉得挺好的,这点比 Next.js 强很多。

    直接说可能不明白,既然 Next.js 能做到自动判断当前组件是不是客户端组件,那直接标记这个组件是客户端组件不就行了,那假设我有个组件 C:

    function C() {
    	return <div>C 组件</div>
    }
    

    很明显 C 是一个服务端组件,至少可以当成一个服务端组件,它没有任何副作用,你还有个组件 A (服务端组件)和组件 B (客户端组件),两个组件都用了 C 组件,Next.js 怎么判断 C 组件该如何渲染?你第一次接触 C 组件,要求你从服务端获取数据,你是写 RSC 还是写 useState 和 useEffect ?

    3. Remix 的 load 更好

    有没有一种可能,Next.js 的 page router 的 getServerSideProps 函数和 load 一样。

    4. RSC 无法实现 oClick 等事件

    要不你发明一个服务器,能把你浏览器里的元素绑定上这个事件。

    想要绑定客户端事件,老老实实写 use client 。

    5 ....

    欢迎大家补充。

    最后

    我认为 Next.js 最恶心的地方其实是在于团队十分固执,你必须遵照它的写法,最明显的例子就是之前版本的 Next.js 重写了 fetch ,默认 force-cache 。

    而且 Next.js 直接使用 React 的最新代码,稳定性有待考察(这点可以参照 React19 Suspense 变化,因为这个 React19 延迟发布来着)。

    另外,Next.js 本身性能极其之差,团队甚至没有意识到这点,或者意识到但是不愿去做任何优化,只是一味地优化开发速度。

    最后,Next.js 的使用场景可以说几乎没有,为了首屏加载速度,不好意思 Next.js 太慢了,见 https://github.com/eknkc/ssr-benchmark 。你说为了 seo ,个人项目我能理解,公司项目不如花点钱排名竞价,比用 Next.js 成本小很多(仅限国内)。想了想也就个人博客、交互性少的页面能用一下了。

    19 条回复    2025-06-27 22:50:15 +08:00
    scarlex
        1
    scarlex  
       13 天前
    我印象最深的是使用了 Next.js 的开源项目 build docker 镜像的时候经常要加 ENV NODE_OPTIONS="--max-old-space-size=8192",不然大概率要构建失败...而且 build 的过程非常慢
    Vegetable
        2
    Vegetable  
       13 天前
    我个人看法,前端生态确实处于一个有点怪异的状态。React 和 Vue 的生态,都有影响力非常强的小团体影响着整个社区。感觉和 JAVA/MySQL 之类的那种还不一样。
    jayasme
        3
    jayasme  
       13 天前
    我刚好有个项目,把 api 和网站搭载同一个 nextjs 项目下,而且有 api 有那种连接 ai 的长连结,看到 lz 说 nextjs 性能差我倒是有点怕了
    Plumbiu
        4
    Plumbiu  
    OP
       13 天前
    @jayasme https://www.techempower.com/benchmarks/#section=data-r23&test=json ,可以看一下 next.js api 性能,排倒数第四,不是一般的差
    codehz
        5
    codehz  
       13 天前
    next 主要是给它( vercel )自己的基础设施设计的,就算是 rsc ,它也显然有更好的实现方式,而不是连纯静态生成 static 都要强制请求一个 rsc payload (说白了就是根本没考虑其他场景,甚至我觉得连 standalone 模式都是二等公民),next.js 的这个做法等于说是必须得用上类似 vercel 的边缘计算模式(在靠近用户的节点上渲染),否则相比其他方案毫无优势
    Amose2024
        6
    Amose2024  
       13 天前
    不能再同意了。很多 V 友吐槽 Nextjs 都没有吐到点子上。Nextjs 本质上是极大方便构建 SPA 应用,并不适合大型项目。
    DeWjjj
        7
    DeWjjj  
       13 天前
    我选择处理搜索引擎的爬虫信息,然后反馈更精准数据。
    属实是感觉没必要 SSR 。
    xiangyuecn
        8
    xiangyuecn  
       13 天前
    想起来了,asp.net 拖控件的那帮家伙,然后不懂前端的后端能轻松写前端

    react 那股屎味真的和 asp.net 太像了😂 next.js:让不懂后端的前端轻松写出服务器端程序
    vizards
        9
    vizards  
       13 天前 via iPhone
    我觉得主要是纯客户端渲染、静态预渲染和服务端渲染三个方式的取舍,怎么根据合适的场景去扬长避短。纯客户端渲染对服务端压力最低,但是数据 API 就要暴露出去、首帧渲染压力大。静态预渲染性能好、资源要求低,但是不灵活。服务端渲染性能好、灵活,但服务端压力大。

    比如对于 header footer 这样的组件,它本身不怎么变,更新受开发者控制,预渲染 html 肯定是最好的。对于需要隐藏 API 实现且与用户相关的组件,就不得不选择服务端渲染。对于重客户端型组件,不太要求首帧性能的就选客户端渲染。所以按组件/岛屿区分渲染策略就变成大家共同的选择了。在这个思路上感觉目前还是 astro 想得最清楚,什么 server islands 、live content collections 都加上了,可惜在静态预渲染的灵活性上做的还是不够好,部分依赖 On-demand ISR 的场景得不到第一方支持
    MonikaCeng
        10
    MonikaCeng  
       13 天前 via iPhone
    nextjs api 只适合普通的 curd ,如果要完整的后端还是 nestjs 吧
    如果是纯前端,我也依然选择 nextjs ,一个是文件夹 route 便利,一个是偶尔需要简单的 api 不需要搞新项目,也没跨域问题
    jlak
        11
    jlak  
       13 天前
    性能有这么差吗?昨天 locust localhost 测试 5000 用户一个实际项目 非常稳定,依然不错的速度
    上线版 PageSpeed Insights 0.2 秒首字 0.5 完全渲染
    jlak
        12
    jlak  
       13 天前
    @jlak 错了 不是 localhost ,是远程服务器 port fowarding 过来的
    Weixiao0725
        13
    Weixiao0725  
       13 天前
    next.js 是很多 AI 编程的默认使用框架
    zhixiao
        14
    zhixiao  
       13 天前 via Android
    代码量一大,dev 环境卡不死你
    a33291
        15
    a33291  
       13 天前
    razor 可以直接绑后端的事件😁
    duanxianze
        16
    duanxianze  
       13 天前
    和 nuxt3 比起来呢
    lqm
        17
    lqm  
       13 天前
    大项目性能真的很烂,我对 Dify 做二开,改一处代码要等 20s-1min 才生效,m1 pro 14 寸
    cwliang
        18
    cwliang  
       13 天前
    next.js 营销炒作有一手,很多人不清楚自己的使用场景硬上。那个什么 turbopack 炒了几年,号称要取代 webpack ,现在还在 beta 阶段。不知道 rspack 有多爽
    frayesshi1
        19
    frayesshi1  
       12 天前
    貌似大部分开源的项目都是 vue 和 nodeJs 结合
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5225 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:35 · PVG 11:35 · LAX 20:35 · JFK 23:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.