xChar
·3 months ago

大厂外包工

当外包的一周。周二临危受命,要为组里AI大赛写一个demo出来,从0到1搭建了个后台信息管理系统框架,周二早上对齐开发内容(8个页面),demo版deadline为周四(后又改为周五)
中后台在厂里可是只有外包同学才会做的业务(ps.没有歧视工种,🐶保命

亚历山大

亚历山大的原因在于,在厂里这段时间做的事情过于零碎,对系统性能力提升没有太大帮助,加上太长时间没接触过中后台项目了,过于生疏,而只留给自己2-3天,一直觉得是个完不成的任务

破局

扛着压力破局点,我于周二当天群里承诺搭完框架,使得周三大家可以各司其职,顺利开始开发起来,不耽误进度。各自做好自己负责的页面,周三周四完成demo版的80%工作,周四/周五老板/大老板的点名认可,让我们几个人非常有成就感,我也对自己比较满意,有时候真就被逼出来的!

选型

进行一个简单罗列,不怕丢人:

  • 基础框架:webpack5+React18+react-router-dom
  • 组件系统:antd
  • 语言:ts+sass
  • 其他:immerschedule-xdayjs

也能看得出来没做更深思考,想到啥就install就完了,一切为了快,怎么快怎么来
唯一的收获就是知道了通过配置webpack-dev-server --host 0.0.0.0+devServer.host = 0.0.0.0,项目运行起来后,同时显示iPv4/6项目运行地址,局域网内其他机器可访问本地服务

摸鱼学习

throttle vs debounce

节流,一段时间内只触发一次执行,多次触发无效。滚动
防抖,一段时间后执行,多次触发重新计时。输入查询防抖

如何找package

原来去 npm 按关键词搜想要的package才是最快的,像这样:

keywords:react schedule

借匹配结果,推荐几款schedule组件:

再结合Google search,你大概率能找到你想要且能用的package

性能优化

浏览器兼容

Google提供的core-web-vitalspackage web-vitals API或许在某些浏览器上并不能正确计算出相应指标值,此乃浏览器兼容性,这样去怀疑确实也合理

Next.js learning

Next.js学习教程,了解到其在性能优化方面的考量

font优化

提供next/font/google、next/font/local将字体资源合并入静态资源,无需加载,优化CLS

img优化

提供Image组件

  • 不同设备、尺寸显示响应性图片
  • 明确尺寸,优化CLS
  • 懒加载,仅加载视口内图片(no manually)
import Image from 'next/image';
export default function Page() {
  return <Image
           src={'/hero-desktop.png'}
           width={1000}
           height={760}
           className="hidden md:block"
           alt="Screenshots of the dashboard project showing desktop version"
           />
}

link优化

提供Link组件,支持CSR导航,而非整页刷新

import Link from 'next/link';
export default function Page() {
  return <Link
           key={link.name}
           href={link.href}
           className="flex h-[48px] grow items-center justify-center gap-2 rounded-md bg-gray-50 p-3 text-sm font-medium hover:bg-sky-100 hover:text-blue-600 md:flex-none md:justify-start md:p-2 md:px-3"
           >{link.name}
  </Link>
}

生产环境下,Link标签出现于视口中时有prefetch优化,提高near-instant open体验

Page

Next.js特殊文件page.tsx - path segments,基于路由的code-split支持,不同页面间相互独立互不影响

Layout

Next.js特殊文件layout.tsx - shared UI partial re-render

image

Loading

Next.js特殊文件loading.tsx - 路由级别异步组件Suspense fallback

Error

Next.js特殊文件error.tsx - 捕获预期外的异常,定义一个Error UI boundary

image

404NotFound

Next.js特殊文件not-found.tsx - 链接/资源获取不到时,定义一个404 UI boundary。展示优先级高于error.tsx,若未定义则展示error.tsx

image

静态渲染 vs 动态渲染

image

静态:

  • 更快的使用体验
  • 静态内容利于缓存,减轻服务端负载
  • SEO良好

动态:

  • 经常变化的数据
  • 个性化数据,千人千面
  • 实时信息

流式渲染

image

页面中不同chunks并行加载解析渲染,有效避免慢请求对页面整体加载的影响,Next.js中实现流式渲染的两种方式:

  • loading.tsx,Next.js特殊文件,相当于React Suspense组件的fallback UI,内容尚未加载出来前过渡组件,stream整个页面
  • React Suspense,组件/一组组件粒度的延迟渲染,根据条件动态渲染组件

什么时候考虑?

  • 用户体验,优先交互
  • 模块展示优先级
  • 数据获取

最佳实践:

  • whole page:loading.tsx可实现页面级别加载过渡,但可能因为个别组件太慢而让用户等待时间过长,拖慢页面内容渲染速度
  • every component:组件个个接踵而至出现,体验差点意思
  • page section:需创建wrapper组件包裹多个组件

PPR-实验阶段加载模型

Pre Partial Render,部分预渲染,fallback部分作为static content预渲染嵌入HTML中,dynamic content随用户访问对应路由,再动态懒加载嵌入

URL Search Params

benefits:

  • 链接可收藏、可分享
  • 利于SSR,服务端同样能拿到参数进行数据获取于渲染
  • 携带用户查询参数,利于用户行为分析
  • URL Query中传递取值而非单独维护component state

hooks:

  • useSearchParams
  • usePathname
  • useRouter:编程式导航

CSC vs SSC

客户端渲染可用服务端渲染不可用:

  • Event Listener
  • hooks
  • document、window等API

SEO

TDK、Open Graph Metadata

有趣的事儿

谷歌出品必属精品!

Google Fonts

image

Google Calendar

image

Loading comments...