alifeiliu

alifeiliu

哪有什么无限进步,能进一步是一步
github
x
discord server
email
strava
bilibili

本週黑板報 #4

大廠外包工#

當外包的一週。週二臨危受命,要為組裡 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 組件,支持 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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。