首页 > 其他分享 >Next.js 13.5 正式发布,速度大幅提升!

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

时间:2023-09-23 23:22:04浏览次数:36  
标签:image js next 改进 支持 13.5 Next 服务端

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的问题

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

标签:image,js,next,改进,支持,13.5,Next,服务端
From: https://www.cnblogs.com/cuggz/p/17725397.html

相关文章

  • js实现轮播图
    功能需求用js实现轮播图实现思路1:准备一个HTML结构,创建一个包含多个轮播项的容器,每个轮播项包含一个图片和一个指示器2:编写css样式,设置轮播容器样式,包括宽度、高度、溢出隐藏等3:编写JavaScript代码,实现轮播图的切换功能,添加指示器,用于显示当前的图片和指示下一个图片的位置;实现指示......
  • Postman 中 Pre-request Script 加密脚本 CryptoJS-AES-ECB-128
    参考链接:http://jser.io/2014/08/19/how-to-use-aes-in-crypto-js-to-encrypt-and-decryptAug19,2014 //明文test_Str=`{"pageNo":1,"pageSize":15}` constplaintText=test_Str;constkeyStr='3333333333333333';//一般key为一个字......
  • 浏览器内核和js引擎
    浏览器内核是什么?简而言之,浏览器内核就是把我们编写的代码转换为页面的中控件。虽然现在大家谈起浏览器内核时,多指代渲染引擎(Renderingengine或layoutengineer)。但其实浏览器内核包括了两部分,渲染引擎和JS引擎,只是后来JS引擎用的越来越多所以就单独的把JS引擎拿了出来。 Ja......
  • nodejs 字符串、数组、对象之间的相互转换
    vararr=['a','b','李四']varstr=JSON.stringify(arr)console.log(typeofstr)varobj={name:'liuneng',age:56,sex:'女'}varstr1=JSON.stringify(obj)console.log(typeofstr1)//字符串转对象//对字符串要求很高,需要单引号包住双......
  • JS 设置定时器与清除定时器
    在前端,一些功能的实现需要用到定时器:轮询、定时开关弹窗、秒表、定时跳转等。。一、设置定时器window提供两个方法实现:setTimeout、setIntervalsetInterval():使一段代码每过一段时间就执行一次,比如轮询setInterval(()=>{console.log('setInterval定时器')},1000)s......
  • Java:JSR 310日期时间体系LocalDateTime、OffsetDateTime、ZonedDateTime
    JSR310日期时间体系:LocalDateTime:本地日期时间OffsetDateTime:带偏移量的日期时间ZonedDateTime:带时区的日期时间(目录)日期时间包importjava.time.LocalDateTime;importjava.time.OffsetDateTime;importjava.time.ZonedDateTime;importjava.time.format.DateTimeF......
  • 前端 数学计算 big.js 使用
     解决0.1+0.2不等于0.3的问题 解决方法方法一,同时扩大倍数再除以相同的倍数 0.1+0.2//0.30000000000000004(0.1*10+0.2*10)/10//0.3方法二,第三方库bignumber.jsmath.jsbig.js big.js基础用法运算//运算//constplus=Big(0.1).p......
  • JS深入学习笔记 - 第三章.变量作用域与内存
    1.原始值和引用值ECMScript变量包含两种不同类型是数据:原始值和引用值。原始值:最简单的数据。有6中原始值:Undefined、Null、Boolean、Number、String和Symbol。原始值是按值访问。引用值:由多个值构成的对象。三大引用类型:1.object2.Array类型3.Function类型。引用值是保存在......
  • 03-JSX-编码规范
    JSX书写规范JSX的顶层只能有一个根元素错误写法:render(){return(<p></p><div></div>)}正确写法:render(){return(<div><p>BNTang</p></div>)}J......
  • 02-JSX-灵活性
    JSX灵活性JSX使我们在JS中拥有了直接编写XML代码的能力所以在JS中能干的事,在JSX中都能干例如有如下这么一个需求:通过按钮控制界面上p标签的显示和隐藏:<!doctypehtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"......