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

发现很多人不了解 Next.js

  •  2
     
  •   Plumbiu ·
    Plumbiu · 2025 年 6 月 26 日 · 4376 次点击
    这是一个创建于 212 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先叠个甲,我也不怎么喜欢 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 成本小很多(仅限国内)。想了想也就个人博客、交互性少的页面能用一下了。

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

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

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