Skip to content

开发日志 #2

Open
Open
@myLightLin

Description

@myLightLin

笔记

图片字体优化的参考资料

Next.js 路由跳转原理

使用客户端路由,搭配组件快速渲染,主要有三个关键:代码分割预拉取 以及缓存

代码分割主要是根据你的页面路由划分,将组件代码分割成更小的 bundle 块,交由浏览器下载执行,这样减少了每个请求的数据体积和执行时间,提高了加载性能。

预拉取只在生产环境生效,并且只有 Link 组件以及 useRouter 会开启路由预加载。顾名思议,就是在页面初始加载,或者当滑动到可视区域时,预加载路由对应的组件,然后缓存 30s。

缓存是指路由缓存,这个缓存是存放于本机内存的客户端缓存。使用缓存的好处在于减少了不必要的请求,进而提高性能。

在根页面的目录下,如果 loading 不想与子页面共享,可以在根页面创建 (overview) 文件夹,然后将 loading.tsxpage.tsx 放进去。

流式请求

如果并行请求路由页面,采用动态渲染的情况,会导致页面的加载速度与最慢的请求速度相关。为了优化体验,不采取一次性加载所有,而是将请求路由切分成一个个 chunk,然后使用 Stream 流式返回,服务器组件结合 loading 以及 Suspense 渲染。

如果把流式加载应用于整个页面,可能会出现其中一个组件加载缓慢,导致整个页面很长时间 loading 的情况;而如果把每个组件都嵌套一层 Suspense,可能会导致 UI 加载完成时,页面闪烁。具体如何做还是得取决于业务场景。

静态渲染、动态渲染和部分预渲染

客户端组件与服务端组件

客户端组件使用 use client 声明,可以使用事件监听以及 hooks,例如 useSearchParams,这些都可以在客户端获取。
服务端组件是跑在服务器上的,因此只能拼接数据,然后返回给客户端渲染。

Server Actions

Next 覆盖了原生 form 元素的 action 属性,通过把 action 当做一个 props,传递一个函数作为值,起到增删改查的作用。

Error handling

开发报错

✅ 在关联 GitHub 仓库时,执行 git remote add origin xxx 后,git push 推送时报错:

! [rejected]        main -> main (non-fast-forward)
error: failed to push some refs to ''
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

分析:这个错误表明此刻本地的 main 分支落后于远程仓库的分支,也就是你新创建了一个远程仓库,需要 pull 拉取到本地一次,不能直接就从本地 push 到远程。
解决方式:首先尝试执行 git pull origin main 发现没有效果,于是转而执行 git pull --rebase origin main 命令,这个命令的意思是将本地更改重新应用在远程更改之上,而不是创建一个合并提交。如果这个过程中又遇到了冲突,那么可以手动处理冲突,然后执行 git rebase --continue 应用剩余的更改。等全部冲突解决后,执行 git push -u origin main ,问题解决。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions