Next.js 13.5 正式发布,速度大幅提升!

news2024/11/18 21:35:30

9 月 19 日,Next.js 13.5 正式发布,该版本通过以下方式提高了本地开发性能和可靠性:

  • 本地服务器启动速度提高 22%:使用App和Pages Router可以更快地进行迭代

  • HMR(快速刷新)速度提高 29%:在保存更改时进行更快的迭代

  • 内存使用量减少 40%:在运行next start 时测量

  • 优化的包导入:使用流行的图标和组件库时进行更快的更新

  • next/image 改进:支持<picture>标签、暗模式等

  • 修复了超过 438 个错误!

改善启动和快速刷新时间

App Router 的采用在持续增加,根据 HTTP Archive 对前1000万个网站进行的统计数据来看,其增长速度达到了每月 80%

图片

image.png

自 Next.js 13.4 版本以来,Next.js 团队的重点一直是改进 App Router 应用的性能和可靠性。将13.4与13.5版本进行比较,在一个新的应用上,可以看到以下改进:

  • 本地服务器启动速度提高 22%

  • HMR(快速刷新)速度提高 29%

  • 内存使用量减少 40%

通过以下优化方法实现了这种性能提升:

  • 通过缓存或减少慢速操作来减少工作量

  • 优化昂贵的文件系统操作

  • 在编译过程中实现更好的增量树遍历

  • 将不必要的阻塞同步调用改为懒加载

  • 自动配置大型图标库

Next.js 用户 Hanford 在他们的测试中报告了其编译速度提升 87-92%!

图片

image.png

在继续迭代和改进当前打包工具性能的同时,Next.js 团队还在开发 Turbopack(beta)以进一步提高性能。在13.5版本中,next dev --turbo现在支持更多功能。

优化的包导入

此版本对包导入进行了令人兴奋的突破,改善了在使用大型图标或组件库以及其他重新导出了数百或数千个模块的依赖项时的本地开发性能和生产冷启动速度。

之前,添加了modularizeImports的支持,使开发者能够配置在使用这些库时如何解析导入。在13.5版本中,用optimizePackageImports替代了这个选项,它不需要指定导入映射,而是会自动优化导入。

@mui/icons-material@mui/materialdate-fnslodashlodash-esramdareact-bootstrap@headlessui/react@heroicons/react和lucide-react等库现在都可以自动优化,只加载实际使用的模块,同时方便编写带有很多命名导出的导入语句。

next/image 改进

基于社区的反馈,此版本添加了一个新的实验性函数unstable_getImgProps(),以支持不直接使用<Image>组件的高级用例,包括:

  • 处理background-imageimage-set

  • 使用canvas的context.drawImage()new Image()时进行操作

  • 使用<picture>媒体查询来实现艺术方向或明/暗模式图片

  • 利用<picture>元素的媒体查询功能,实现明/暗模式图片的切换。

import { unstable_getImgProps as getImgProps } from 'next/image';



export default function Page() {

  const common = { alt: 'Hero', width: 800, height: 400 };

  const {

    props: { srcSet: dark },

  } = getImgProps({ ...common, src: '/dark.png' });

  const {

    props: { srcSet: light, ...rest },

  } = getImgProps({ ...common, src: '/light.png' });



  return (

    <picture>

      <source media="(prefers-color-scheme: dark)" srcSet={dark} />

      <source media="(prefers-color-scheme: light)" srcSet={light} />

      <img {...rest} />

    </picture>

  );

}

此外,现在placeholder属性支持提供任意的data:image/作为占位图像,这些图像不会被模糊处理。

其他改进

自从13.4.0版本以来,我修复了超过438个错误,并进行了各种改进,包括:

  • [文档] 关于表单和变异的新文档

  • [文档] 关于服务端和客户端组件的新文档

  • [文档] 关于内容安全策略和非ces的新文档

  • [文档] 关于缓存和重新验证的新文档

  • [功能] 在页面路由器中增加了对next/navigation中的useParamsuseSearchParams的支持,以便逐步采用

  • [功能] 在router.push / router.replace上支持scroll: false

  • [功能] 在next/link上支持scroll={false}

  • [功能] 开发环境支持HTTPS:next dev --experimental-https

  • [功能] 增加了对cookies().has()的支持

  • [功能] 增加了对IPv6主机名的支持

  • [功能] App Router现在支持Yarn PnP

  • [功能] 服务器操作中添加了对redirect()的支持

  • [功能] 通过创建项目使用Bun的支持:bunx create-next-app

  • [功能] 中间件和边缘运行时中的草稿模式支持

  • [功能] 现在中间件中支持cookies()headers()

  • [功能] Metadata API现在在Twitter卡片中支持summary_large_image

  • [功能] RedirectType现在从next/navigation导出

  • [功能] 添加了Playwright的实验性测试模式

  • [改进] 重构了next start,能够处理比之前多达1062%的请求量

  • [改进] 优化了Next.js内部以提高冷启动性能(速度提升高达40%,在Vercel上测试)

  • [改进] 对App Router增强了Jest支持

  • [改进] 重新设计了next dev的输出

  • [改进] 服务端操作现在与完全静态路由一起工作(包括使用ISR重新验证数据)

  • [改进] 服务端操作不再阻止路由之间的导航

  • [改进] 服务端操作不能再触发多个并发操作

  • [改进] 调用redirect()的服务端操作现在将其推入历史堆栈而不是替换当前条目,以确保返回按钮正常工作

  • [改进] 服务端操作为防止浏览器缓存添加了no-cacheno-store cache-control

  • [改进] 修复了导航后可能调用两次服务端操作的错误

  • [改进] 提高了对具有服务端组件的Emotion CSS的支持

  • [改进] 支持scroll-behavior: smooth用于哈希URL更改

  • [改进] 在所有浏览器中添加了Array.prototype.at的Polyfill

  • [改进] 修复了next dev缓存处理多个并行请求时可能发生的竞争条件

  • [改进] 控制台中的fetch输出现在显示跳过缓存的请求(缓存:SKIP)

  • [改进] usePathname现在正确地去除了basePath

  • [改进] next/image现在在App Router中正确地预加载图像

  • [改进] not-found不再两次渲染根布局

  • [改进] 现在可以克隆NextRequest(即new NextRequest(request)

  • [改进] app/children/page.tsx现在正确地处理文字/children路由

  • [改进] 内容安全策略现在支持预初始化脚本的nonce

  • [改进] 使用next/navigation中的重定向时现在支持basePath

  • [改进] 在Static Export中使用不受支持功能时改进了错误消息

  • [改进] 改进了递归readdir实现(速度提高了约3倍)

  • [改进] 修复了动态路由段中fallback:false之前引起的挂起请求问题

  • [改进] 修复了在请求已被取消时将信号传递给重新验证请求导致请求失败的错误

  • [改进] 删除了404页面上的fetch轮询,改为使用websocket事件,避免在运行next dev时不必要的重新加载

  • [改进] performance.measure不再会导致水合不匹配

  • [改进] 修复了在编辑pages/_app时可能发生意外的完全重新加载的情况

  • [改进] ImageResponse现在扩展自Response,以改善类型检查

  • [改进] 在next build中没有页面输出时,不再显示pages

  • [改进] 修复了在<Link>中忽略skipTrailingSlashRedirect的问题

  • [改进] 修复了开发模式下动态元数据路由重复的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1035916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++之指向引用的指针和指向指针的引用总结(二百三十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【计算机视觉】图像的获取和表示——图像传感器技术|主要参数解析、成像原理剖析、传感器处理

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 每一个不曾起舞的日子&#xff0c;都是对生命的辜负。——尼采 前言 文章目录 前言一、图像传感器技术1.0&#xff1a;前言1.1&#xff1a;两种…

自定义类型详解(上)

结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag//struct是结构体的标志&#xff0c;tag是标签;名字。 {member-list;//成员变量 }variable-list;//变量列…

Nginx 关闭/屏蔽 PUT、DELETE、OPTIONS 请求

1、修改 nginx 配置 在 nginx 配置文件中&#xff0c;增加如下配置内容&#xff1a; if ($request_method !~* GET|POST|HEAD) {return 403; }修改效果如下&#xff1a; 2、重启 nginx 服务 systemctl restart nginx或者 service nginx restart3、功能验证 使用如下方式…

【计算机网络】互联网公司的网络架构和业务场景

互联网公司的网络架构和业务场景 1. 互联网公司网络的组成1.1 网络的物理组成1.2 骨干网组成1.3 数据中心网络组成 2.互联网公司网络服务场景2.1 通用服务场景2.1.1 客户端到服务端请求真实网络过程2.1.2 客户端到服务端请求抽象网络过程2.1.3 负载均衡网络模型 2.2 边缘服务场…

Xilinx FPGA 程序固化重新上电程序不运行的问题

问题描述 FPGA直接下载bit文件,功能正常。 FPGA擦除FLASH,烧写FLASH,正常。 电源断电,重新上电,FALSH里面的程序没有启动,FPGA程序没有跑起来。–FLASH启动不正常。 解决办法 在XDC约束文件里边增加约束: ## Configuration options, can be used for all designs se…

京东获得JD商品详情 API 返回值说明

京东商品详情API接口可以获得JD商品详情原数据。 这个API接口有两种参数&#xff0c;公共参数和请求参数。 公共参数有以下几个&#xff1a; apikey&#xff1a;这是您自己的API密钥&#xff0c;可以在京东开发者中心获取。 请求参数有以下几个&#xff1a; num_iid&#…

11 FPGA_简易电压表设计与验证(附代码)

1. 模数转换理论 模数转换器又称&#xff08;A/D转换器&#xff09;&#xff0c;通常是指一个将模拟信号转变为数字信号的电子元件或电路。常见的转换方式使将模拟量与基准量比对得到便于传输的二进制信号。生活中常见的模拟量有温湿度、图像、声音等。模拟信号与数字信号的转换…

Spring学习笔记4 Bean的作用域

Spring学习笔记3 Spring对IOC的实现_biubiubiu0706的博客-CSDN博客 新建模块 spring-004 引入依赖 <dependencies><!--Spring依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId>&…

企业申报“专精特新”,对知识产权有哪些要求?

深科信从深圳市中小企业服务局发布的公开数据中了解到&#xff0c;2022年深圳市专精特新中小企业申报8000余家&#xff0c;通过4800余家。2023年深圳市专精特新企业认定火热申报中&#xff0c;10月15日截止。 成为“专精特新”企业有什么好处? 1.国家级资质强力背书&#xff…

WordPress主题DUX v8.2源码下载

新增产品分类左侧多级分类折叠显示 新增网站默认字体对 MiSans 和 HarmonyOS Sans 的支持 新增顶部左上角显示登录注册的模块开关&#xff0c;且支持原生登录方式 新增手机端导航菜单的关闭按钮 新增文章内容中标题二的强化展示 新增全站禁止复制、右键和选择的操作 新增文章内…

fastjson反序列化漏洞(CVE-2017-18349)

文章目录 fastjson序列化FastJson 序列化操作反序列化漏洞原理漏洞复现&#xff08;CVE-2017-18349&#xff09; fastjson fastjson 是阿里巴巴开发的 java语言编写的高性能 JSON 库,用于将数据在 Json 和 Java Object之间相互转换。它没有用java的序列化机制,而是自定义了一套…

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测(SE注意力机制)

分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测&#xff08;SE注意力机制&#xff09; 目录 分类预测 | MATLAB实现WOA-CNN-BiGRU-Attention数据分类预测&#xff08;SE注意力机制&#xff09;分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLA…

Quartus出租车计费器verilog计价器

名称&#xff1a;出租车计费器verilog计价器 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; 出租车计费器&#xff0c;起步价10元&#xff0c;3公里内起步价&#xff0c;可以切换白天和夜晚计费&#xff0c;白天时超过3公里后2.4元每公里&#xff0c;停…

RabbitMQ实现秒杀场景示例

本文章通过MQ队列来实现秒杀场景 整体的设计如下图&#xff0c;整个流程中对于发送发MQ失败和发送到死信队列的数据未做后续处理 1、首先先创建MQ的配置文件 Configuration public class RabbitConfig {public static final String DEAD_LETTER_EXCHANGE "deadLetterE…

springcloud3 分布式事务-seata的四种模式总结以及异地容灾

一 seata四种模式比较 1.1 seata的4种模式比较 二 seata的高可用 2.1架构 1.建TC服务集群非常简单&#xff0c;启动多个TC服务&#xff0c;注册到nacos即可。 2.做异地多机房容灾&#xff0c;比如一个TC集群在上海&#xff0c;另一个TC集群在杭州&#xff0c; 3.微服务基…

趣解设计模式之《小王的糖果售卖机》

〇、小故事 小王最近一直在寻找商机&#xff0c;他发现商场儿童乐园或者中小学校周围&#xff0c;会有很多小朋友喜欢吃糖果&#xff0c;那么他想设计一款糖果售卖机&#xff0c;让后将这些糖果售卖机布置到商场和学校旁边&#xff0c;这样就能获得源源不断的收益了。 想到这里…

20 个实例玩转 Java 8 Stream

20 个实例玩转 Java 8 Stream 1、Stream概述 Java 8 是一个非常成功的版本&#xff0c;这个版本新增的 Stream&#xff0c;配合同版本出现的 Lambda&#xff0c;给我们操作集合 Collection 提供了极大的便利。 那么什么是 Stream&#xff1f; Stream 将要处理的元素集合看作…

Docker部署MySQL8数据库

1、准备工作 docker pull mysql:8.0.27 Pwd"/data/software/mysql" mkdir ${Pwd}/{data,logs} -p chmod 777 ${Pwd}/logs2、添加配置文件 cat > ${Pwd}/my.cnf << EOF [mysqld] usermysql pid-file/var/run/mysqld/mysqld.pid socket/var/run/mysqld/mysq…

SQL和Python,哪个更容易自学?哪个更适合数据工作的编程新手?

如果你想从事数据工作&#xff0c;比如数据分析、数据开发、数据科学等&#xff0c;你可能会遇到这样的问题&#xff1a;SQL和Python哪个更容易自学&#xff1f;哪个更有用&#xff1f;哪个更有前途&#xff1f;其实这两种语言都是数据工作的重要技能&#xff0c;但它们的特点和…