首页
开发技巧正文内容

如何在10分钟内提升你的Next.js应用性能

2023年11月14日
阅读时长 2 分钟
阅读量 10
如何在10分钟内提升你的Next.js应用性能

介绍

我们都知道Next.js相对来说比较重量级,特别是与Svelte Kit或Nuxt.js相比,而且优化并不是每个人都喜欢做的事情。你的产品负责人可能不想浪费时间在优化上,而更喜欢发布新功能。你的QA和测试人员可能不想对所有可能受到影响的功能进行回归测试。

本文是关于Next.js优化的简单教程,帮助你在最短的时间内实现更好的性能、Lighthouse评分等。

重新定位第三方脚本

如果你的应用中有Google Analytics、Hotjar、Facebook Pixel等第三方脚本,你可能希望将这些脚本迁移到服务工作者上,而不是主线程上。

我在这里有一篇关于这个的文章。

相信我,这不会花费很长时间,而且结果可能会让你惊讶。

使用动态导入

Next.js支持使用import()来延迟加载外部库,使用next/dynamic来延迟加载React组件。延迟加载有助于通过减少渲染页面所需的JavaScript数量来提高初始加载性能。只有在使用时,组件或库才会被导入和包含在JavaScript捆绑包中。

next/dynamic[React.lazy](https://reactjs.org/docs/code-splitting.html#reactlazy)的扩展。当与[Suspense](https://reactjs.org/docs/react-api.html#reactsuspense)结合使用时,组件可以延迟到Suspense边界解析后再进行hydration。

例如,我的首页有4个大块,但只有一个块在首次加载时显示,用户必须滚动才能看到其他块。所以我不希望一开始就加载所有4个块:

const Overview = dynamic(() => import('./Overview'));
const Project = dynamic(() => import('./Projects'));
const Contact = dynamic(() => import('./Contact'));

现在让我们看看结果

之前:

之后:

你可以看到首次加载的JS从115kb减少到100kb,虽然不多,但是这是实实在在的工作

使用Preact代替React

Next.js是建立在React之上的,但是Preact是一个JavaScript库,被认为是React的轻量级替代品,具有相同的现代API和ECMA Script支持。

所以如果你的应用只是一个普通的Next.js应用,我没有理由不使用Preact。它的缺点只是缺乏社区支持。

如何实现:

  • 首先,你需要安装Preact

  • 打开你的next.config.js文件并重新分配react:

 webpack: (config, { dev, isServer }) => {
    if (!dev && !isServer) {
      Object.assign(config.resolve.alias, {
        react: 'preact/compat',
        'react-dom/test-utils': 'preact/test-utils',
        'react-dom': 'preact/compat',
      });
    }
    return config;
  },

现在看看性能:

捆绑包大小显著减小。

但不仅如此,让我们看看在生产环境中的表现:

之前

之后

你可以看到所有的JS文件都变小了。

结论

还有许多其他方法可以提高你的应用性能,但它们需要更多的工作和研究。

我希望上述方法对你有用,如果不行,请在下方评论,我们可以找到最好的方法!

免责声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

相关文章

探索多种软件架构模式及其实用应用
2024年11月22日19:06
本文深入探讨了多种软件架构模式,包括有界上下文、边车模式、发布-订阅模式、应用网关、微服务、命令职责分离(CQRS)等,介绍了它们的优点、使用场景以及具体应用实例。文章强调根据具体项目需求和团队能力选择最合适的架构,以构建高效和可维护的解决方案,同时展示了各架构模式间的综合应用,提供了丰富的案例和技术细节。
15个高级Python快捷键助您更快编程
2024年11月21日07:02
本文分享了 15 个高级的 Python 编程快捷键,包括上下文管理器、行内字典合并、函数参数解包、链式比较、dataclasses、海象运算符、反转列表、备忘录缓存、splitlines、enumerate、字典推导、zip 用于并行迭代、itertools.chain 扁平化列表、functools.partial 部分函数和 os.path 文件路径管理等,帮助开发者提高编程效率和代码简洁性。
揭示网页开发的 11 个迷思:停止相信这些误区
2024年11月19日22:05
网页开发充满误解,这篇博文针对11个常见迷思进行揭秘。包括网站开发后不需更新、需掌握所有技术、AI会取代开发者等。强调持续学习、专业化、用户体验的重要性,澄清误区如多任务处理的必要性和最新技术的必需性。文章提醒开发者注重实用而非追求完美代码,以务实态度面对开发工作。
你知道 CSS 的四种 Focus 样式吗?
2024年11月18日21:41
本文介绍了四种 CSS focus 样式::focus、:focus-visible、:focus-within 以及自定义的 :focus-visible-within,帮助提升网站用户体验。:focus 样式应用于被选中元素;:focus-visible 仅在键盘导航时显示;:focus-within 用于父元素;自定义 :focus-visible-within 结合两者效果。合理运用这些样式能使网站更方便键盘用户导航。
利用 Python 实现自动化图像裁剪:简单高效的工作流程
2024年11月11日20:49
使用 Python 和 OpenCV 自动裁剪图像,轻松实现 16:9 的完美构图。这个指南介绍了如何通过代码进行灰度化、模糊处理和边缘检测,最终识别出最重要的部分进行裁剪。特别适合需要批量处理图像的情况,节省大量时间。
每位资深前端开发人员都应了解的 TypeScript 高级概念
2024年11月11日02:07
资深前端开发者应了解 TypeScript 的高级概念,如联合类型、交叉类型、类型保护、条件类型、映射类型、模板字面量类型和递归类型。这些特性可提升代码的可维护性和可扩展性,确保在开发复杂应用时实现更高的类型安全性和效率。