亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

T3 Stack全棧實(shí)踐:tRPC端到端類(lèi)型安全背后的原理與踩坑

T3 Stack全棧實(shí)踐:tRPC端到端類(lèi)型安全背后的原理與踩坑 如果你跟我一樣這幾年在各種全棧方案之間反復(fù)橫跳——REST、GraphQL、BFF——最近又被“前后端類(lèi)型一體”這個(gè)思路勾住了那你一定沒(méi)少在技術(shù)雷達(dá)上見(jiàn)過(guò) T3 Stack 的名字。我手上代號(hào)叫 t3code 的內(nèi)部項(xiàng)目就是決定用這套方案重寫(xiě)核心業(yè)務(wù)系統(tǒng)后落地的結(jié)果。這篇文章不打算做 T3 的科普百科而是把我從選型、搭建到上線的完整過(guò)程拆開(kāi)講明白重點(diǎn)說(shuō)清楚 tRPC 端到端類(lèi)型推導(dǎo)的底層邏輯以及生產(chǎn)環(huán)境里那些官方文檔不會(huì)寫(xiě)的細(xì)節(jié)。如果你正在猶豫要不要上 T3或者項(xiàng)目已經(jīng)跑起來(lái)但遇到了一些詭異問(wèn)題這篇都值得你看下去。T3 Stack 本身不是一個(gè)框架而是一套基于 TypeScript 的技術(shù)棧組合Next.js 負(fù)責(zé)應(yīng)用框架tRPC 負(fù)責(zé) API 層Tailwind CSS 負(fù)責(zé)樣式Prisma 負(fù)責(zé)數(shù)據(jù)庫(kù)訪問(wèn)NextAuth 負(fù)責(zé)認(rèn)證。它不復(fù)雜但它的取舍非常明確在這個(gè)棧里類(lèi)型安全是一等公民任何一層斷裂都會(huì)在編譯期被攔下來(lái)。下面我按自己的實(shí)操過(guò)程來(lái)講從選型邏輯講到部署運(yùn)維。1. 從REST到tRPCT3生態(tài)為什么把類(lèi)型安全放在第一位1.1 傳統(tǒng)全棧開(kāi)發(fā)的類(lèi)型斷裂痛點(diǎn)先講一個(gè)絕大多數(shù)全棧團(tuán)隊(duì)都經(jīng)歷過(guò)的場(chǎng)景后端同學(xué)把訂單接口的返回字段從createTime改成了createdAt數(shù)據(jù)庫(kù)和接口文檔都更新了但前端還在用createTime取數(shù)據(jù)。由于前端調(diào)用是通過(guò)fetch加手寫(xiě)interface實(shí)現(xiàn)的TypeScript 根本不會(huì)報(bào)錯(cuò)直到聯(lián)調(diào)時(shí)頁(yè)面上出現(xiàn)一排undefined你才發(fā)現(xiàn)問(wèn)題。這就是典型的“類(lèi)型斷裂”。在傳統(tǒng) REST 架構(gòu)里前端和后端明明是同一撥人維護(hù)卻硬生生過(guò)出了跨部門(mén)協(xié)作的即視感。為了彌補(bǔ)這個(gè)裂縫團(tuán)隊(duì)常見(jiàn)的做法是引入 OpenAPI讓后端從接口框架里自動(dòng)生成 spec 文件前端再通過(guò) openapi-typescript 這類(lèi)工具生成類(lèi)型。這條路能走但它有幾個(gè)繞不開(kāi)的成本接口文檔可能滯后、生成器配置項(xiàng)復(fù)雜、多服務(wù)之間的 spec 版本管理也是爛攤子。我之前的項(xiàng)目就吃過(guò) OpenAPI 的虧。后端升級(jí)了一個(gè)依賴自動(dòng)生成的 spec 里某個(gè)字段被波及前端類(lèi)型生成后到處報(bào)錯(cuò)最后發(fā)現(xiàn)是“文檔本身沒(méi)錯(cuò)但生成的類(lèi)型文件沒(méi)同步提交”的烏龍。類(lèi)型安全這件事在 REST 體系里靠約定和工具鏈去補(bǔ)總有一種打完補(bǔ)丁又漏水的別扭感。1.2 tRPC的類(lèi)型推導(dǎo)魔法類(lèi)型如何從后端流到前端tRPC 采取的思路和 REST 完全不同它不定義協(xié)議層也不要 schema 文件而是直接把 TypeScript 的類(lèi)型系統(tǒng)當(dāng)成通信協(xié)議。你只需要在后端定義一個(gè) router前端通過(guò)createTRPCReactAppRouter()引入這個(gè) router 的類(lèi)型之后調(diào)用api.todo.list.useQuery()返回值、入?yún)?、錯(cuò)誤類(lèi)型都會(huì)被自動(dòng)推導(dǎo)出來(lái)。這里的關(guān)鍵機(jī)制是 TypeScript 的泛型推斷。AppRouter的類(lèi)型被傳給了 React hooks 封裝層所有 procedure 的類(lèi)型信息都在編譯期被展開(kāi)。它不是靠代碼生成器把后端類(lèi)型“復(fù)制”到前端而是把類(lèi)型定義本身作為唯一事實(shí)來(lái)源。后端改了輸入?yún)?shù)的結(jié)構(gòu)前端代碼里對(duì)應(yīng)調(diào)用點(diǎn)直接編譯報(bào)錯(cuò)你不用翻接口文檔不用刷新類(lèi)型文件回歸測(cè)試的意愿和鏈路都清晰得多。我第一次在項(xiàng)目里落地 tRPC 時(shí)被一個(gè)場(chǎng)景震撼到后端給某個(gè) mutation 的輸入加了一個(gè)必填字段我甚至沒(méi)有打開(kāi)前端編輯器只聽(tīng)到旁邊同事喊了一句“這個(gè)接口掛了”回頭一看是編譯報(bào)錯(cuò)指出了哪幾個(gè)頁(yè)面在調(diào)用。這種體驗(yàn)在傳統(tǒng) REST 鏈路里幾乎不可能出現(xiàn)。1.3 Next.js在T3里的角色API路由與服務(wù)端調(diào)用兩條路架構(gòu)里為什么選 Next.js 而不是 Vite Express因?yàn)?Next.js 同時(shí)提供了兩條通向后端邏輯的路徑一條是常規(guī)的 HTTP API 路由src/app/api/trpc/[trpc]/route.ts瀏覽器里的客戶端組件通過(guò)它發(fā)起請(qǐng)求另一條是服務(wù)端組件里直接調(diào)用 tRPC 的 caller不需要發(fā)起網(wǎng)絡(luò)請(qǐng)求就能執(zhí)行后端邏輯并且全程保留類(lèi)型。這個(gè)設(shè)計(jì)非常務(wù)實(shí)。對(duì)于需要 SEO、首次渲染數(shù)據(jù)的場(chǎng)景你在服務(wù)端組件里直接caller.todo.list()取數(shù)據(jù)不需要額外封裝一個(gè)頁(yè)面接口對(duì)于交互密集的場(chǎng)景客戶端組件通過(guò) hooks 調(diào)用同一套 procedure。兩條路共享同一個(gè) router 定義、同一套 Zod 校驗(yàn)邏輯不會(huì)出現(xiàn)“服務(wù)端渲染用的是一套邏輯、瀏覽器交互用的是另一套”的分叉現(xiàn)象。2. 用T3搭建一個(gè)最小可用的t3code項(xiàng)目骨架2.1 初始化create-t3-app的交互選項(xiàng)怎么選T3 官方提供了 create-t3-app 腳手架命令很簡(jiǎn)單pnpm create t3-applatest t3code交互過(guò)程會(huì)問(wèn)你是否啟用 App Router、Tailwind、Prisma、tRPC、NextAuth以及是否需要 Docker Compose 開(kāi)發(fā)環(huán)境。如果你是給現(xiàn)有項(xiàng)目做技術(shù)改造我建議第一次初始化還是全部勾選先把完整鏈路跑通。即使有些能力暫時(shí)用不到保留默認(rèn)結(jié)構(gòu)也能讓你以后加功能時(shí)不必臨時(shí)鋪管道。初始化完成后腳手架會(huì)自動(dòng)生成一套可運(yùn)行的項(xiàng)目包括 Prisma client、認(rèn)證配置、tRPC 的 root router、React Query 的 Provider 封裝。我個(gè)人建議用 pnpm 而不是 npm因?yàn)?T3 生態(tài)里很多包對(duì)依賴提升的版本很敏感pnpm 的嚴(yán)格 node_modules 結(jié)構(gòu)能少出很多“幽靈依賴”問(wèn)題。2.2 目錄結(jié)構(gòu)核心trpc.ts、root.ts、routers與API路由T3 項(xiàng)目的 tRPC 相關(guān)目錄結(jié)構(gòu)大致如下src/ app/ api/trpc/[trpc]/route.ts # HTTP入口 server/ api/ trpc.ts # context、router工廠、procedure定義 root.ts # 合并所有routers routers/ todo.ts # 業(yè)務(wù)router trpc/ server.ts # server端helper react.ts # 客戶端hooks封裝 server/ db.ts # Prisma client單例 auth.ts # NextAuth配置trpc.ts是核心工廠文件。它定義了createTRPCContext這是每次請(qǐng)求都會(huì)執(zhí)行的環(huán)境初始化函數(shù)通常用來(lái)創(chuàng)建數(shù)據(jù)庫(kù)連接和讀取會(huì)話信息它定義了createTRPCRouter和publicProcedure如果需要登錄校驗(yàn)就定義protectedProcedure在中間件里檢查 session。root.ts負(fù)責(zé)把所有業(yè)務(wù) router 合并成一個(gè)appRouter并導(dǎo)出它的類(lèi)型。記住一個(gè)原則業(yè)務(wù) router 不要直接修改trpc.ts而是放在routers/目錄下按領(lǐng)域拆分。這樣項(xiàng)目變大后root 里只是多掛幾個(gè)模塊不會(huì)出現(xiàn)一個(gè)上千行的 router 文件。2.3 跑通一條完整鏈路數(shù)據(jù)庫(kù)定義到組件調(diào)用我拿一個(gè)最簡(jiǎn)單的 Todo 功能來(lái)復(fù)現(xiàn)全鏈路因?yàn)樗倪壿嬜銐蛐〉苷故?T3 每一層的職責(zé)。先在prisma/schema.prisma里定義模型model Todo { id Int id default(autoincrement()) title String completed Boolean default(false) createdAt DateTime default(now()) userId String }然后寫(xiě) todo routerimport { z } from zod; import { createTRPCRouter, protectedProcedure } from ~/server/api/trpc; export const todoRouter createTRPCRouter({ list: protectedProcedure.query(async ({ ctx }) { return ctx.db.todo.findMany({ orderBy: { createdAt: desc }, }); }), create: protectedProcedure .input(z.object({ title: z.string().min(1) })) .mutation(async ({ ctx, input }) { return ctx.db.todo.create({ data: { title: input.title, userId: ctx.session.user.id }, }); }), });前端組件里調(diào)用use client; import { api } from ~/trpc/react; export function TodoList() { const utils api.useUtils(); const { data: todos } api.todo.list.useQuery(); const createTodo api.todo.create.useMutation({ onSuccess: () utils.todo.list.invalidate(), }); return ( ul {todos?.map((todo) li key{todo.id}{todo.title}/li)} /ul ); }這段代碼里最值得琢磨的是onSuccess里那一行utils.todo.list.invalidate()。T3 默認(rèn)集成了 TanStack QuerytRPC 的 hooks 底層就是 Query 的封裝。mutation 成功后你需要主動(dòng)讓相關(guān) query 失效這樣它會(huì)重新拉取數(shù)據(jù)。不理解這一點(diǎn)很多人會(huì)在列表不刷新時(shí)給后端加多余的 “返回最新列表” 邏輯走了彎路。3. 生產(chǎn)環(huán)境最容易翻車(chē)的三個(gè)環(huán)節(jié)認(rèn)證、SSR與部署3.1 NextAuth與tRPC的組合context與protectedProcedureT3 默認(rèn)用 NextAuth 做認(rèn)證。理論上它和 tRPC 的集成很自然在createTRPCContext里調(diào)用getServerAuthSession()把 session 塞進(jìn) context之后每個(gè) procedure 都能訪問(wèn)ctx.session。但實(shí)際落地有幾個(gè)細(xì)節(jié)很容易踩。第一session.user.id默認(rèn)并不存在。NextAuth 的 session 類(lèi)型默認(rèn)只有name、email、image需要你自己聲明模塊擴(kuò)充才能拿到用戶 ID。很多新手在protectedProcedure里寫(xiě)ctx.session.user.id報(bào)錯(cuò)第一反應(yīng)是去找 Prisma 的問(wèn)題其實(shí)是類(lèi)型聲明沒(méi)補(bǔ)。第二不要在 session 里塞大對(duì)象。我見(jiàn)過(guò)有人圖省事把整個(gè) user 記錄包括密碼哈希、手機(jī)號(hào)、內(nèi)部備注塞進(jìn) JWT然后所有頁(yè)面接口都能拿到它。這既是安全風(fēng)險(xiǎn)也是性能問(wèn)題因?yàn)?JWT 每次請(qǐng)求都要帶在 cookie 里。正確做法是 session 里只放用戶 ID 和基本展示信息業(yè)務(wù)數(shù)據(jù)在 procedure 里通過(guò) ID 現(xiàn)查。第三protectedProcedure的處理。我建議用中間件統(tǒng)一封裝不要在每個(gè) router 里手動(dòng)判斷const enforceUserIsAuthed t.middleware(({ ctx, next }) { if (!ctx.session?.user) { throw new TRPCError({ code: UNAUTHORIZED }); } return next({ ctx: { session: { ...ctx.session, user: ctx.session.user } } }); }); export const protectedProcedure t.procedure.use(enforceUserIsAuthed);這樣后續(xù)所有需要登錄的接口直接protectedProcedure.query()校驗(yàn)邏輯不會(huì)散落各處。3.2 服務(wù)端組件里調(diào)用tRPC的兩種姿勢(shì)App Router 下服務(wù)端組件消費(fèi) tRPC 有兩種常見(jiàn)姿勢(shì)。第一種是直接調(diào)用 caller。在服務(wù)端組件里用createCallerFactory創(chuàng)建調(diào)用器傳入 context然后直接執(zhí)行 procedureimport { createCaller } from ~/server/api/root; import { createTRPCContext } from ~/server/api/trpc; const caller createCaller( await createTRPCContext({ headers: await headers() }) ); const todos await caller.todo.list();這種方式的優(yōu)點(diǎn)是零網(wǎng)絡(luò)開(kāi)銷(xiāo)、類(lèi)型完整。缺點(diǎn)是如果你的頁(yè)面同時(shí)有客戶端交互組件服務(wù)端拿到的數(shù)據(jù)沒(méi)法直接傳給客戶端組件因?yàn)榭蛻舳私M件不能接收非可序列化對(duì)象傳類(lèi)型也容易斷裂。第二種姿勢(shì)配合 React Query 做 hydration。在服務(wù)端用createServerSideHelpers預(yù)取數(shù)據(jù)并dehydrate然后在客戶端根組件用HydrationBoundary包裹。這樣服務(wù)端先拿到數(shù)據(jù)客戶端接管后不會(huì)重復(fù)請(qǐng)求。代價(jià)是你要多配置一層 hydration 模板而且初次上手時(shí)會(huì)覺(jué)得不那么直觀。我個(gè)人的建議是整頁(yè)以展示為主的服務(wù)端組件用 caller交互復(fù)雜、需要客戶端狀態(tài)的區(qū)域走 hydration。兩種姿勢(shì)混用的時(shí)候注意邊界要清晰不要在一個(gè)頁(yè)面里既用 caller 取數(shù)據(jù)、又用同樣的查詢 key 做客戶端預(yù)取否則容易出現(xiàn)重復(fù)請(qǐng)求的假象。3.3 部署階段Prisma客戶端、遷移與連接池的坑部署是 T3 項(xiàng)目最容易藏坑的地方尤其圍繞 Prisma。先說(shuō)prisma generate。Postinstall 腳本里一定要加上它因?yàn)楹芏嗖渴鹌脚_(tái)安裝依賴后不會(huì)自動(dòng)執(zhí)行 Prisma 的代碼生成。少了這一步項(xiàng)目啟動(dòng)時(shí)會(huì)報(bào) “PrismaClient is unable to run in this environment” 之類(lèi)的錯(cuò)誤場(chǎng)面非常迷惑。{ scripts: { postinstall: prisma generate } }再說(shuō)數(shù)據(jù)庫(kù)遷移。開(kāi)發(fā)環(huán)境你大可以prisma db push直接把 schema 推到數(shù)據(jù)庫(kù)但生產(chǎn)環(huán)境規(guī)范做法是生成遷移文件、走prisma migrate deploy。這個(gè)命令只執(zhí)行未被跟蹤的遷移文件不會(huì)做任何交互適合 CI/CD 鏈路。還有一個(gè)很多人遇到過(guò)的部署平臺(tái)報(bào)錯(cuò)在 Docker Alpine 鏡像里運(yùn)行 Prisma。由于 Alpine 的 C 庫(kù)是 musl 而不是 glibcPrisma 引擎需要顯式聲明二進(jìn)制目標(biāo)。如果不想折騰可以直接在 schema.prisma 里指定generator client { provider prisma-client-js binaryTargets [native, linux-musl-openssl-3.0.x] }連接池管理也是容易被忽視的點(diǎn)。serverless 環(huán)境下每個(gè)請(qǐng)求都會(huì)創(chuàng)建數(shù)據(jù)庫(kù)連接不加限制會(huì)打爆 PostgreSQL 的連接數(shù)上限。我一般在數(shù)據(jù)庫(kù)連接串里顯式加連接池并給 serverless 函數(shù)配置頭部Connection頭不緩存確保每個(gè)冷啟動(dòng)實(shí)例都能拿到正確的數(shù)據(jù)庫(kù)連接。4. 和主流方案的對(duì)比T3不是銀彈但它的取舍很清晰4.1 T3 vs RESTOpenAPI文檔與類(lèi)型誰(shuí)更可靠有不少團(tuán)隊(duì)會(huì)問(wèn)我們現(xiàn)在的 REST OpenAPI 已經(jīng)跑得好好的為什么要換我會(huì)說(shuō)如果你的 API 要暴露給多個(gè)語(yǔ)言生態(tài)的客戶端或者有嚴(yán)格的第三方接入治理要求REST OpenAPI 仍然是正確選擇。OpenAPI 能生成人類(lèi)可讀的文檔還能驅(qū)動(dòng)多語(yǔ)言 SDK這是一套面向生態(tài)的規(guī)范T3 的 tRPC 在這種場(chǎng)景下反而不夠格。但如果 API 消費(fèi)者只有自家的前端T3 的優(yōu)勢(shì)非常明顯。在 REST 鏈路里OpenAPI 文檔和接口實(shí)現(xiàn)是兩個(gè)獨(dú)立產(chǎn)物需要靠流程保證它們一致在 tRPC 鏈路里router 定義本身就是文檔不存在“文檔落后于實(shí)現(xiàn)”的中間狀態(tài)。團(tuán)隊(duì)越小、前后端越統(tǒng)一越應(yīng)該傾向于后者。4.2 T3 vs GraphQLschema先行與代碼先行的路線之爭(zhēng)GraphQL 的思路是 schema 先行你定義type Todo { ... }、定義 query 和 mutation然后前后端都圍繞這個(gè) schema 工作。它的優(yōu)勢(shì)在于客戶端能夠按需取字段復(fù)雜聚合查詢的表達(dá)能力很強(qiáng)。但代價(jià)是你需要維護(hù)一套 schema 語(yǔ)言理解 resolver、fragment、cache 這些概念團(tuán)隊(duì)協(xié)作成本不低。T3 走的是代碼先行。router 里寫(xiě) TypeScript 函數(shù)類(lèi)型自然生成沒(méi)有額外的 schema DSL。對(duì)于大多數(shù)內(nèi)部系統(tǒng)按需取字段的需求其實(shí)沒(méi)那么強(qiáng)反而是“把類(lèi)型安全無(wú)損地從數(shù)據(jù)庫(kù)帶到前端”更值錢(qián)。我觀察到的趨勢(shì)是很多團(tuán)隊(duì)用 GraphQL 僅僅只是為了拿類(lèi)型生成但 tRPC 用更輕的方式做到了同樣的事。4.3 什么情況下我建議你別碰T3 Stack我自己折騰完 t3code 項(xiàng)目后對(duì)它的局限性也有清醒認(rèn)識(shí)。下面這幾種情況我不建議上 T3。第一你的客戶端不全是 Web。如果有 iOS 原生、Android 原生直接調(diào)用后端的場(chǎng)景tRPC 那套類(lèi)型安全在非 TS 語(yǔ)言里基本不存在收益。雖然 tRPC 有 HTTP 客戶端可以調(diào)用但你會(huì)失去最大賣(mài)點(diǎn)同時(shí)還要額外處理兼容層不如直接 REST。第二團(tuán)隊(duì)成員對(duì) TypeScript 掌握不牢。tRPC 的高度類(lèi)型安全是把雙刃劍類(lèi)型報(bào)錯(cuò)時(shí)新手很容易懵圈看不懂泛型推導(dǎo)鏈。如果團(tuán)隊(duì)里有人只會(huì)寫(xiě) any那 T3 的優(yōu)勢(shì)會(huì)蕩然無(wú)存反而變成維護(hù)負(fù)擔(dān)。第三你需要做純靜態(tài)站點(diǎn)。T3 Stack 默認(rèn)綁定 Next.js對(duì)純靜態(tài)站的來(lái)說(shuō)太重了這時(shí)候上 Astro 或者直接寫(xiě) Markdown 生成器是更合理的選擇。還有一個(gè)容易被忽略的邊界tRPC 的調(diào)試鏈路不如 REST 直觀。在瀏覽器 DevTools 里你能看到請(qǐng)求發(fā)往/api/trpc/todo.list但 payload 是壓縮過(guò)的手動(dòng)構(gòu)造請(qǐng)求也不方便。所以對(duì)外調(diào)試工具、或者頻繁需要 curl 驗(yàn)證的場(chǎng)景T3 會(huì)給你帶來(lái)額外摩擦。5. 團(tuán)隊(duì)落地t3code后的體驗(yàn)數(shù)字、協(xié)作與后續(xù)擴(kuò)展5.1 聯(lián)調(diào)時(shí)間顯著縮短類(lèi)型即契約的工程收益t3code 項(xiàng)目重構(gòu)前后對(duì)比最直觀的變化是聯(lián)調(diào)時(shí)間。之前我們一個(gè)訂單模塊的前后端聯(lián)調(diào)涉及狀態(tài)流轉(zhuǎn)、金額計(jì)算、時(shí)間格式轉(zhuǎn)換前后端對(duì)完字段對(duì)格式對(duì)完格式對(duì)邊界兩到三天很正常。重構(gòu)到 T3 之后同樣的模塊前后端是同一個(gè)人或者同一個(gè)小組維護(hù)后端改字段前端編譯直接報(bào)錯(cuò)接口的出入?yún)㈩?lèi)型在編輯器里就是可見(jiàn)的不需要來(lái)回切換文檔頁(yè)面。我們內(nèi)部做過(guò)一次粗測(cè)一個(gè)中等復(fù)雜度的 CRUD 模塊從開(kāi)發(fā)到提測(cè)從原來(lái)的約 5 個(gè)工作日壓縮到 3 天左右節(jié)省的時(shí)間大多花在“不需要反復(fù)確認(rèn)接口定義”。當(dāng)然這不全是 T3 的功勞也和團(tuán)隊(duì)對(duì) TypeScript 的熟練度提升有關(guān)但類(lèi)型鏈路完整后“契約”不再存在于聊天記錄里這本身就減少了大量隱性溝通成本。5.2 心智負(fù)擔(dān)沒(méi)有想象中那么大團(tuán)隊(duì)上手實(shí)例關(guān)于 T3 的學(xué)習(xí)成本我的判斷是對(duì)已經(jīng)有 Next.js 和 TypeScript 基礎(chǔ)的人兩天內(nèi)能開(kāi)工對(duì)只熟悉傳統(tǒng) MVC 的人一周左右能繞過(guò)主要的坑。最大的學(xué)習(xí)點(diǎn)不是 tRPC 本身而是 TanStack Query 的緩存失效模型。很多第一次寫(xiě) T3 的新人會(huì)困惑“為什么我 mutation 之后頁(yè)面不更新”本質(zhì)是沒(méi)有理解invalidate的作用。我建議每個(gè)新接觸 T3 的成員都先跑一遍我們總結(jié)的 checklist先取數(shù)query再寫(xiě)數(shù)mutationmutation 的onSuccess里必帶invalidate如果涉及多個(gè)模塊的數(shù)據(jù)聯(lián)動(dòng)考慮onMutate做樂(lè)觀更新。只要把這個(gè)心智模型建立起來(lái)T3 的使用體驗(yàn)是順暢的。5.3 后續(xù)擴(kuò)展方向緩存、批處理與邊緣運(yùn)行時(shí)項(xiàng)目跑順之后可以考慮三個(gè)擴(kuò)展方向。第一是緩存策略。T3 的緩存發(fā)生在 React Query 層staleTime、gcTime的配置能顯著減少后端壓力。服務(wù)端渲染場(chǎng)景配合 revalidate 機(jī)制可以讓首屏和交互體驗(yàn)都保持在不錯(cuò)的水準(zhǔn)。第二是批處理。當(dāng) router 里的 findMany 每次都查出相同依賴的數(shù)據(jù)時(shí)可以考慮引入 dataLoader 模式對(duì)資源加載做去重和合并。tRPC 的 context 層很適合掛載這類(lèi)依賴注入能力。第三是邊緣運(yùn)行時(shí)。T3 官方對(duì) Edge Runtime 的支持一直在推進(jìn)但 Prisma 的二進(jìn)制引擎在某些邊緣環(huán)境里仍然是限制條件。如果你有強(qiáng)烈的邊緣渲染需求提前確認(rèn) Prisma 的二進(jìn)制兼容情況不要最后關(guān)頭才發(fā)現(xiàn)。最后再分享一個(gè)執(zhí)行層面的建議不管你的目標(biāo)是個(gè)人項(xiàng)目還是團(tuán)隊(duì)遷移不要指望 T3 重構(gòu)一步到位。先挑一個(gè)非核心業(yè)務(wù)線或者一個(gè)內(nèi)部工具用它跑通全家桶觀察兩周再?zèng)Q定鋪不鋪開(kāi)。我自己就是先拿后臺(tái)報(bào)表服務(wù)做實(shí)驗(yàn)的結(jié)果兩周之后核心團(tuán)隊(duì)已經(jīng)主動(dòng)要求遷移第二套了。類(lèi)型安全的體驗(yàn)是會(huì)上癮的但在它上癮之前你更需要的是用一個(gè)小項(xiàng)目把那些繞不開(kāi)的坑都踩一遍。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天狠| 粉嫩av一区二区三区四季| 操B久久| 欧美亚洲91| 国产AV超爽| 成年女人黄网站| 日韩精品三区四区| 欧美成人免费在线观看| 9/A片| 欧美成人精品一区| 欧插网站| 久久久亚洲高清不打码| 免费看国产大AB| 粉嫩粉嫩一区性色AV片| 国产成人啪一区二区| 日韩一级成人毛片免费观看 | 一区二区三区成人高清视频| 欧美在线综合| 日本99视频| 玖玖综合网| 国产suv精品一区二区四| 在线亚洲欧美| 日韩综合97P| 五月婷婷丁香中文字幕| 97视频在线播放| 日韩一区二区熟女| 久久久 国产精品| 校园激情狠狠四射| 国产夜夜艹| 亚洲Av噜噜一区二区三区妖精| 日韩激情中文字幕有码| 亚洲本色精品一区二区久久| 超清中文乱码字幕| 97视频在线视频| 开心激情站| 一个国产在线综合网站| 性猛交| 99re99视频在线免费观看| 欧美亚洲日本激情在线| 一区二区三区黄色片a| 美女网站黄页| 澳门人妻久久| 亚洲天堂,男人| 中文字幕一区二区三区高清| 神马麻豆福利院| 爱爱动态试试看6 0秒| 亚洲一区二区精品福利| 久草视频观看视频在线| 国产综合久久久麻桃个| 97国产人人| 99精品九九九九九九| 久久国99999| 色婷婷综合网站| 99老司机精品视频在线观看| 久久久久久久少妇| 国产一区二区视频在线播放| 欧美的性爱网站免费| 插B在线观看| 4141514逼喷水三级片| 性爱精品一区| 人人干人人操人人..com| 黄片qw| 亚州性9| 天天干1区2区在线| 日欧毛片久久| 日韩9999| 日本中文字幕一区| 日韩无码久久熟女一级片| 欧美美女自慰一区二区三区| 一本一道人妻久久一区二区三区 | 亚洲 中文 女同| 久久露脸国产老熟女| 久久三| 99久久久无码精品国产人| 黑人猛交| 天天激情综合站| 91五十路| 亚洲国产成人精品女人久久久| 少妇内射视频| 久欲AV| 91人妻素女| 人人看人人插| 欧美经典一区二区三区| 福利色色| 91av天美性媒精品视频| 裸模AV女优| 四虎永久在线精品免费网址| 日韩99999色| 欧美性暴力猛交XXXX | 色综合中文字幕不卡| 色色操| 青草视频在线看看看看看看看看看| 一区二区三区机械有限公司| 最新欧美色网| 亚洲精品天天影视综合网 | 天天干2019| 97午夜剧场日韩| 有码人妻系列| 中文字幕乱妇免费视频| 免费试看60秒| 中文字幕国产| 五月婷婷综合网| 青青国产精品在线| 亚洲熟久久| 亚洲综合 欧美| 后入国产| 美女午夜福利免费视频| 国产精品午夜福利| 老子午夜伦不卡影院| 日本高清视频xxxx| 蜜桃av综合网发布| 老师充足的奶水小说| 999 久久久| 热G综合热G中文| 92久久| 人人操人人摸人人看人人插| 丁香五月偷拍| 日本一级一级一级一级| 第45页一区二区| 亚洲欧洲日产国产综合网| 九一精品牛牛一区二区| 青草一区二区| 日韩Va亚洲va欧美Ⅴa久久| www.99视频| 69AV女优男人的天堂| 国产精品久久久999| 少妇淫妇久久久久久久| 亚洲一区二区性爱电影| 青青草五月天| 国产精品久久| 一区二区激情国产熟女 | 四月丁香婷婷| 男女真人网18| 美女91在线观看| 黑人性欧美| 国内精品a| 精品一区二区成人动漫| Julia Annxxxxx| 久久午夜色播影院免费高清| 久99热| 日韩99神马视频片| 91看黄片| 97人妻色| 欧美宗合色| 日本福利二区视频| 一区二区三区一亚洲中文字幕、综合区灬| 一区二区三区 日韩欧美| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 乱码人妻一区二区三区| 日韩91网| 激激五月| 天天爱天天操| 久久久九九网站| 大香蕉在线免| heyZO天然素人无码AⅤ专区| 9久久9综合| 色噜噜婷婷| 狠狠2050在线观看| 天天躁日日躁AAAAXXXX国产 | 亚洲国产综合久久久性感熟妇| 青青久日| 麻豆国产尤物AV| 另类图片五月天| 秋霞蝌科网日本一区| 日本一片一区| 超碰人人操97碰| 男人天堂久久日韩| 在线a v| 天天舔天天日天天射| 久久精品国产亚洲AV清纯| 九九在线视频| 午夜爽爽爽| 国产剧情一区在线观看| 美女诱惑一区| 欧美少妇色综合| 午夜男人av| 锕锕好爽 死我在线观看| 久久久久九九九| 日韩大香蕉精品在线视频| 亚洲h片在线免费观看| 久久人爽| 天天做日日爱夜夜爽| 欧美激情一| 久久久精品成人国产| 加勒比无码毛片| 欧美性爱五月天| 久久久影院| 蜜乳中文字幕a在线| 亚州色图欧美| 日韩AC| 国产sv美女内射| 欧美色棕合| 色黄污美女啪啪啪免费网站| 九99久久| 九九玖玖精品| 激情文学网伊人| 久久久久久久九九九九九九| 97在线视频免费看| 三上制服丝AV| 黄色片大香蕉| 亚洲?V高清一区二区三区尤物| 艾草av| 26uuu国产成人综合| 9久9久9久9久视频网站| 少妇高潮喷水无套久久久久久| www.av在线观看| 国产精品福利视频| 97免费视频在线观看视频| 色婷婷久久| 国内亚洲高清无码| 欧美日韩中文字幕不卡| 亚洲自拍另类丝袜综合| 日本网色| 久久久久久日韩| 久九9精品| 91啦人妻| 亚洲麻豆18发?| 综合色啪| 无码最新| 欧美色亚洲| 欧洲小说色图视频另类| 欧美毛片在线网| 岛国视频一二三区| 97网色| 九九热在线精品视频| 立川理惠加勒比无码| 亚洲欧美首页| 蜜臀久久久99久久久久 | 青青青操| 国产一区二区在线电影| 黑人狂躁日本妞一区二区三区| 97国产|免费| 天天日美女的B| 1956日韩精品| 校园春色 男人天堂 | 夜夜人妻爽| 蜜桃久久一区二区三区| 五月丁香色色网| 人妻81p| 免费福利视频中文字幕| 国产精品久久久 | 啪啪啪东京| 狠狠操狠狠操操| 超碰色大香蕉| 大香蕉手机在线| 好爽免费视频,| 国产不良强奸视频免费看| 色悠悠伊人网五月天| 欧洲亚洲天堂精品| 激情婷婷丁香网| 超碰97首页| 91精品国久久久久久无码| 91人妻人人妻| 超碰日本97美女人妻人人玩人人爱| 日韩欧美经典在线观看| 久久鲁干| www久久久| 亚洲国产一区二区三区四区国产| 777奇米影视777四色| 爆操无码| 91在线美女| 精品国产乱码久久久久久影片| 任你艹| 色情五月婷婷| 天综合网| 激情视频一二三| 亚洲综合贴图91| 欧美亚洲成人在线一区二区三区| 好爽免费视频,| 久久久99999久网站| 欧美青青视频| 玖玖综合视频| 白丝av| 国产高清亚洲日韩一区| 蜜臀AV秘一区翔田千里| 岛国网址国产| 亚洲国产无码精品首页久久久| 久热伊人| 久久亚洲天天做| 国产精品午夜福利视频| 亚洲无码一区成人免费午夜| 亚洲欧洲中文日韩女优乱码| 亚洲精品三区在线观看| 蜜乳av首页| 欧美日韩国第一区| 天美一区在线| 天天射夜夜操| 中国女人内射6XXXXX| 高清无码国产亚洲| 久操在97| 好属操| 一本色道无码DVD中文字幕| 一级毛片久久久久久久女人18| 午夜理论片在线观看免费| 人妻AV 中文字幕的| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 婷婷色香伊人| 亚洲天堂7777| 天天综合AV| 校园春色亚洲无码| 好属操| 美女尤物人人操| 亚洲中文字幕av| 超碰调教97| 在线观看午夜婷婷久久久久清性观看| 欧美在线电影| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 少妇久久久免费| 五十路熟女人妻一区二区在线观看| 国产精品探花色| 亚洲综合在线视频| 久久久久久少妇| 日韩啊V| 狼人久草| 久久是精品| 中文字幕第9页萱萱影音先锋| 中日韩欧美精品无码AⅤ一区二区| 久久草草欧美精品| 日韩91网| 国产一级黄色片在线观看| 色婷婷蜜臀av| 天天插网| 色五月婷婷五月天| 国产精品69久久久久久久| AV一区观看| 亚洲精品久| 91 综合网| 极品美女福利在线观看| 日本一区三级韩国| 91欧美网| 美女黄色一级A视频| 国产精品一级二级在线| 操逼日批| 综合 青草 伊久久 影院 综合| 亚洲中文字幕av | 久久久久久性爱片| 亚洲综合欧美| 夜夜嗷嗷一区二区| 久久精品人人做人人看| 四虎视频在线观看| 日韩极品无码B| 1区2区3区在线视频| 久久二| 91丨九色丨国产打屁股| 熟女91网站| 狠狠色色| 91丝袜美女视频| 色色五月丁香| 久久99国产精品| 五月婷婷六月色| 四虎精品永久在线观看| 综合熟女| 综合亚洲欧美精品日韩?v| 日韩一999精品| 国产精品99精品视频网站| 欧美天堂日韩三级国产传媒| 两女互慰AV高潮喷水在线观看| 91视频成人福利网站在线一区| 成人av在线播放| 性性久久| 免费视频无码| 精品美女久久久久| 97精选久久| 久99久视频| 欧美亚洲中文| 日韩中文字幕宗合在线| 亚洲人妻av| 天天日天天操天天射河南省| 91熟女综合| 亚洲美女自拍偷拍视频| 超碰97精品| 91欧美另类| 久热91| 国产AB视频| 中文字幕一区av| 久久中文字幕不卡人妻| 欧美色老汉| 成 人 影视 一区 二区 三区 四区| 国产黄色小视频网站| 日韩丨制服丨中文|在线| 日本久久精品| AAAAAAAAA黄片| 91中出视频| 骚逼一区二区| 亚洲 综合 欧美| 福利社区午夜一区二区| a'v在线资源| 欧美综合在线第一页| 91肏屄网| 91久久久久久久久18| 乱伦熟女专区| 欧美+日产+中文| 超碰在线97国产| 久久综合五月天| 天天懆天天日| 日本一二区不卡| 色眯眯av| 日本伦理一区二区| 97资源制服丝袜| 92午夜免费福利视频| 免费AV中文网在线观看| 国产精品一区在线播放| 成人黄页| 美女AV一区二区| 97AV爱| 美国日韩黄色片| 99久久久无码精品国产人| 欧美性夜| 五月天婷婷社区| 91超碰碰在线| 蜜臀久久99精品| 骚乳在线| 夜夜操av亚洲一区二区| 国内精品不卡无毒99999| 99久久久99久久91熟女| 五月天婷婷综合| 无码视频黄色网战| 男男H黄动漫啪啪无遮挡网站| 无码操逼视频一下| 99人妻碰碰碰久久久久禁片| 亚洲爽图| 人妻另类 专区 欧美 制服| 男女啊啊啊啊啊| 91蜜臀人妻中文字幕在线| 韩日自拍| 亚春色色| 亚洲乱妇p22| 97超碰日韩| 青草成人免费视频一COm| 深夜激情| 中文久久久| 亚洲日韩美女丝袜美腿人妻视频| 一区二区三区四区理论片| 久久久久国色αv免费观看| 深爱伊人影院| 九九热国产| 我要色综合网| 在线色导航| 大香蕉强奸乱伦| 日韩在线观看字幕精品| 五月天激情小说| 五月天激情视频| 大香樵伊人网| 欧美色图中文字幕| 欧美天天综合站| 中出人妻中文字幕91在线| 欧美线天码中字| 亚洲男人天堂网站| 女欧美一区二三区| 亚洲精品aa久久伊人| 亚洲一区日韩| 欧美亚综合色图| 97视频在线观看高清资源| 久久大陆| 青青草久草| 亚洲一区二区三区春色| 丝袜剧情| 日本在线一二| 一区二区三区无卡视频在线观看| 国产丁香精品露脸视频 | 嗯嗯嗯啊啊啊在线免费观看| 亚洲综合九| 青草伊人网| 日本不卡一区二区| blacked精品一区国产| 深爱激情五月天| 欧美九九99久久精品| 精品二999| 亚洲国产日韩精品久久久| www.亚洲成人一区| 婷婷大香蕉| 久久仑合| 天久久久噜噜噜久久国产精品爽爽| 国产肏逼网站| 超碰在线99| 黄日韩| 国产97亚洲| 特级毛片特黄久久免费看| 日韩人妻少妇 一区二区三区| 欧美日韩少妇色情| 色臀av| 国产剧情AV不卡在线观看| 九九九九九九亚洲| 91模特在线观看| 操www| 精品一区二区啪啪啪| 人妻内射一区二区在线视频| dy888午夜老子影视达达兔| 欧美专区日本专区| 伊人久久综合影院精品久久久| 国产人妖视频一区在线观看| 久久a久久| 日本免费二区三区| 久久精品中文字幕无码l| 日本天堂网| 日韩色| 一级免费啪啪片| 人妻酒店出差被中出免费在线播放| 欧成人精品H无码| 欧美日韩岛国大片在线观看| 偷拍色图| 亚洲AV操| 欧美色道啊| 久久直播国产| 色网1| 无码外流操逼视频| 91嫩草欧美| 中文字幕天堂在线| 打av高清| 国产男女边吃边摸视频网站| 老熟女91av| 美女性91| 久久女人一区二区三区| 天天网综合| 大香蕉啪啪啪| 精品人妻一区二区免费看| 欧美高清18A片| 色女网日韩| xxxx网站亚洲精品| 天天看高清麻豆| 一类无码操逼视频| 91青青在线视频| 色色色色日本| 老熟妇一区二区三区| 91人妻尻屄视频| 成人情色综合网| 五月婷婷综合网| 骚女天天综合网| 免费视频在线观看啊啊啊啊啊| 日韩欧美加勒比| 69AV女优男人的天堂| 黑人精品XXX一区一二区| 老熟女熟妇| 奇米狠999| 99久久9| 亚洲综合一区二区| 蜜臀中文字幕| 黑人与人妻| 黄色性爱网网| 国产精品九九九| 好看的91视频| 国产操操日韩三级黄| 人妻少妇久久| 久久久久国产亚洲一区欧美色图日韩| 日本人妻中文字幕 | 亚洲日韩美国人妻| 桑老女人九区| 中文字幕一区二区三区蜜臀| 狠狠色狠狠色狠狠五月| 南澳成人一级片在线播放| 久久久艹艹艹| 鸡巴插逼视频| 天天做天天爱| 日韩特一级久久| 色综合一区二区三巨| 少妇人妻好深太紧了vr91| 欧美丝袜亚洲| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 欧美性爱综合,免费| 试看60秒| 欧美日韩理论一区| 国产精品亚洲免费| 五月婷婷丁香六月丁香| 久久内射| 伊人久久亚洲色欲综合网站 | 综合色播| 亚洲色 国产 欧美 日韩| 欧美色视| 91n.欧美| 亚熟hd视频在线| 亚洲欧洲偷拍一区| av日韩在线观看电影| 美女天天干| 成人一二三区| 亚洲影视第一页| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚 | 秋霞久久亚洲精品成人| 大JI巴好深好爽又大又粗视频| 亚洲色图自拍| 欧美A√综合网| 18一区二区三区| 国产激情综合五月久久| 国产精品视频一区二区三区八戒| 明星性猛交ⅹxxx乱大交| 日韩本不卡视频在线观看 | 色哟哟-国产专区| 少妇超碰在线| 五月婷色| 狠狠穞A片一區二區三區| 丝袜美腿制服人妻二区中文字幕| 黄色视频60分钟| 高清国产无码av| 国产精品人妻无码久久久互動交流 | 欧美一区二区观看在线| 五月天久久综合网| 情趣丝袜无码操逼视频| 日韩av在线精品观看| 欧美色图20p| 九九热av| 91色香| 麻豆成人影音在线| 亚洲资源站| 亚州一区二区| 日本操逼视频免费| 少妇久久久久久| 亚洲无 码A片在线观看麻豆| 大学生美女口爆| 大象AV在线| 男啪女色黄无遮挡免费观看| 日本操逼视频在线| 日韩成人性日韩成人性爱视频在线免费观看| 欧美 亚洲 91| 婷婷五月天色网| 天天夜夜rb| 色香综合| 在线观看亚洲成人精品| 三级网站超变态精品| 欧美少妇大量自拍视频在线观看| 天天综合网国产| 久久精品亚洲婷婷| 懂色AV中文| 久久99精品九九久久久婷婷| 亚洲天堂日本| 国产熟女高潮一区二区三区| 日日骚一区二区三区| 高颜值美女口爆高潮浪叫| 97超碰大| 国产色综合亚洲色综合吹潮| 国产传媒操逼视频| 天天干夜夜操网| 婷婷五月天影院| 久9久| 日韩精品操少妇| 久久精品电影| 国产精品电| 亚洲国产成人精品久久久国产成人一区二区三.| 狼人综合婷婷激情四射 | 超碰诱惑| 91超碰在线观看| 狠狠爱大香蕉| 免费少妇一区二区| 中文字幕日本久久| 久久久久久久 九九九九九九九| 超碰97在线 欧美 国产| 天天操天天日天天干| 嗯嗯不要 视频| 9色国产精品一区粉嫩| 精品少妇人妻av久久免费| 国产又爽又黄| 九九久久国产精品| 欧美啪啪啪91| 亚洲小电影免费涩涩成人在线高清| 亚洲天堂人妻熟妇视频| 啊啊啊操一区| 青青草久久| 欧美综合网| 久久久精品视频免费观看| 国模限制级电影| 中文字幕久久亚州无码| 亚洲熟女av中文字幕| 乱伦图一区| 色香阁在线| 色偷偷综合91久久噜噜| 亚洲国产精品V?在线播放| 你懂得91| 色综和网| 日本人妻丰满熟妇久久久久久| 日本操BAV| 久操操| 热99这里有精品综合久久 | 欧美性爱一区二区三区| xxxx网站亚洲精品| 嗯嗯嗯嗯啊啊啊好紧好大| 亚洲欧洲激情| 亚洲蜜乳av| 和协无码影院| 精品福利| 91麻豆天美国产欧美日| 久久精品无码不卡| 日韩色| 神马久久久久久久久久| 97九色| 中文字幕日韩综合| 亚洲精品九九九九九九| 国产欧美岛国精品一区| 欧美精品91| 欧美成人一级麻豆| 女优免费一区二区永久| 色九九久九九| 蜜乳AV色欲AVAV无码| 亚洲精品1区| 久久久久亚洲三级电影| 99.色网| 爱爱动态60秒| 亚洲色人妻综合| 78操B| 天天综合精品| 欧美亚洲首页| 人妻啊啊人妻啊啊| 91岛国动作片| 资源在线观一 二| 日韩图色| 国产91美女高潮| 久久精品久| 亚洲18禁| 日本高清免费一本视频在线观看| 亚洲、日韩、综合、另类| 久操精品| 曰本熟女视频| 不卡av在线中文字幕| 99在线视频播放| 久久人人舔人人爽舔人人av片| av天天在线| 麻花传媒免费网站在线观看| 视频黄站| av九九| 久久九色| 99色日| 精品v日韩欧美国产| 中文字幕av片| 夜夜嗨一区二区| 插入逼91| 9 9无尺码天堂网| 欧美刺激色黄片免费看| 精品一区二区三区18| 综合色图亚洲欧美| 日韩熟女操逼| 97少妇人妻中文字幕久久 | www.91欧美| 深夜激情无码| 激情欧美97| 91亚洲青青草原精品1区| 精品人妻中文字幕4399| 9.1小视频| 97九色人妻| 艹精品| 日韩无码第3页| 中文字幕乱码人妻一区二区三区,99精品 | 夜色AV无码手机在线影院| 岛国天天午夜影院传媒网| 国产蜜臀精品一区免费尤物| 99这里只有精品国产| 久超碰这里只有精品| 伊色综合天堂色97| 性色av网站| 加勒比综合| 97视频新免费| 东京热一区二区三区四区五区六区| a一区二区三区乱码在线| 无码人妻毛片丰满熟妇精品区| 久久婷婷色综合一区二区三区| 日韩欧美成人午夜福利| 国内一级精品| 99蜜桃臀久久久欧美精品网站| 欧美日综合| 黄色电影在线播放综合网站| 亚洲色电影在线| 日韩美女,国产传媒,视频一区| 开心激情站| 盗摄女人妻在线| 精品人妻中文字幕高清| 人妻蜜桃臀| 久久大陆| 日欧美色| 黑操B| www.色婷婷色综合| 艹精品| 肏逼视频日本| 久久久久久九九九| 欧美丰满少妇交换91欧美精品| 超碰人妻久久人妻中文97| 99热免费| 久久艹逼视频| 久干9操| 一道α片欧美| 999精品久久久久久久| 欧美日韩亚洲少妇寂寞影院正在播放| 亚洲大色堂| 毛片视频白嫩| 国产又粗又又黄又猛| 欧美v亚洲v日韩v最新在线二区| 亚洲性爱电影| 国产精品分类在线观看| 亚洲精品97| 五十路熟女人妻一区二区三区四区五| 亚洲久久东京热一二三四五区视频| 夜夜国产一区| 亚洲天堂第一页| 少妇毛片久久| 日韩97视频!在线| 精品久久久久,69国产成人精| 九九热免费视频| 爱做久久久久久| 综合欧美日韩在线观看| hd成人一区二区在线| 五月婷网站| 2019天天干天天操| 欧美亚洲色图另类国产| 91精品久久久久五月天精品| 日本操逼视频不卡直接放| 超碰在线欧美性爱激情| 妇女性内射冈站HDWWWCOM| 在线视频 亚洲精品| 91久久青青草原精品| 日本操逼视频免费| 日韩欧洲操屄视频| 天天色天天干天天爱| 韩国黄片aaaa| 久久婷婷综合国际产色怕| 深夜激情无码| 色婷婷导航| 97天天搞在线| 中文字幕在线观看AV| 精品网站9999| 无码人妻精品一区二区三区九九 | 精品人妻一区二区三区四区不卡在| 偷拍盗拍亚洲色图图片| 91香蕉国产尤物视频| 强奸乱伦AV一天堂网| 操逼日批| 欧美视频边做饭边橾| 日韩性爱播放| 96精品在线| 午夜天堂网| 91精品人妻一区二区三区蜜桃臀| 91最新综合| 久久一本大香蕉| 久久久天美| 国产精品久久| 成人性爱av.com| 欧美婷婷| 男人久久精品| 夜夜夜爽www精品视频| 东京热一区二区中文字幕| 国产精品人人爽人人做可爱福利| 99在线无码精品秘 入口黑人| 九色视频91| 五月天伊人| 精品无码产区一区二| 亚洲欧美在线丝袜| 99久久久久久亚洲精品不卡| 日韩av在线播放不卡| 欧美黑人性猛交91| 加勒比东京热五月天天堂网| 日本在线伊人啪啪| 天天做日日做| 青青久久艹| 91大神精品长腿在线观看网站| 国产精品一二三在线看| 精品久久久久久亚洲| 精品国产乱码久久久兰草影视| 综合亚洲网| 在线观看高清AV| 免费观看欧美日韩操逼视频 | 国产精品蜜臀久久久久无码AV| 久久无码电影| 亚洲欧美天堂在线| 78m成人视线| 久久人人爽爽人人爽人人片αV| 婷婷丁香六月| 一区超碰一区| 操逼视频色| 啊啊啊啊视频免费| 男人的天堂com| 久久精品高清AV| 亚洲丝袜色图| 97国产超碰| 依人大香蕉| 欧美性视频二区三区| A一区片| 丰满欧美少妇| 亚91网| 91丨熟女丨丰满熟女| wwe 天天干.com| 亚洲国产精品无码AV久久| 秋霞视频一区二区| 干妹子| 亚洲毛片一级带毛片基地| 欧美中字二区| 欧美gv在线观看| 日韩pv中文| 久久97精品久久久久久久不卡| 激情久久久| 夜色97| 18禁的网站在线| 青草视频人妻在线观看| 午夜福利1区2区3区| 伊人国产av| 日韩成人高清一区二区| 青青草自拍视频在线播放| 人妻天堂网| 日本大片日本一区二区免费高清| 欧美色图欧美| 26uuu欧美| 天天综合中文字幕 91| 婷婷99狠狠| 丰满人妻一区二区三区免费| 久久精彩免费视频| 一区二区三区看视频| 亚洲五月婷| 啊啊啊啊好多水| 这里只有精品视频| 69麻豆天美| 久久久久久久久久久人妻| 熟女探花啪啪| 久久国产对白激情浪潮| 国产精品亚洲天堂网址| 亚洲偷拍欧美激情| 丰满人妻av一区二区三区| 日日夜夜骑| 超碰97起碰| 老子午夜伦不卡影院| 亚洲区限制级| 最新啪啪视频| 精品人妻一区二区三区四区| 久超碰在| 国产一区二区三区视频在线看| 日韩精品人妻中文字有码在线| 91人妻素女| 97欧美综合网| 青青草视频爽一爽| 噜噜噜在线视频| 久久9免费视频| 超碰亚洲97| 高清无码一区二区三区| 久久久无码精品人妻二区 | 99少妇| 熟女啪啪视频| 女人 A一级| 怡春院久久| 亚洲精品天天影视综合网 | 亚洲av夫妻操穴网| 一个人免费视频观看在线WWW| 欧美熟女丝袜| 精品超碰中文在线| 亚洲精品国产熟女| 一本大道青青| 中文字幕97色| 99在线观看| 97人人夜夜精品视频| 日韩欧美久久婷婷网站| 99爱久久视频频| 91操人| 男人女人18禁片免费看网站| 亚洲女人毛茸茸91| 天天影视激情欧美| 日本网色| 亚洲成人免费中文字幕| 玖玖久久久| 午夜AV污污污| 欧美日日夜夜| 超碰91在线| 国产最新小视频在线播放下载 | 国产毛片在线| 成人久久久| 精品久久久一本一道| 久艹伊人精品综合在线| 五月天婷婷久久| 久久黄色视频一区二区三区 | 亚洲欧美国产中文视频| 97ai亚洲| 欧美在线中M| 国产婷婷一区| 中文字幕在线观看丝袜| 色婷婷九月天天综合| 欧美视频一| 清纯唯美亚洲综合| 亚洲蜜臀精品视频久久| 国产成人精品午夜福利| 影音综合网| 精品夜夜澡人妻无码| 美女自卫慰黄网站免费| 伊人久久大香线蕉无码| 人妻久热在线| 激情第四色| 国模精品一区二区三区苹果色戒 | 999 久久久| 综合干干干av久久久综合网| 女优视频第10页| 99九九精品| 日本中文字幕在线视频| av日韩在线观看电影| av网站在线观看了| 国产精品原创巨作?v网站| 12一15性XXXX粉嫩国产| 加勒比综合| 啊啊啊爽爽| 久久超碰97| 欧美黑人熟妇精品91| 草草草视频| AV女优男人的天堂| 夜色91| 蜜臀99久久精品久久久懂爱| 91人妻少妇| 欧美成人免费在线观看| 国产家庭乱伦表演| 国内亚洲高清无码| AA级电影三区| 成人日韩3| 色伊人91| 人妻日日干| 色噜噜人妻丝袜a∨先锋影| 欧美成人黄网色网站| 国产版a级片直播在线| 亚洲精品日日夜夜52| 国产超碰| 久久97| 920日本午夜免费| 大奶啊啊好爽| 少妇诱惑视频| 99精品丰满人妻| 久久久成人免费av电影| 巨乳特殊服务按摩| 无码人妻1727| 在线观看不卡一区二区三区| 欧美精品一区二区少妇免费A片 | 99re在线观看| 97舔舔| 久久久久久91香蕉国产| 日本男人插女人的逼黄色| 少好三P| 91美| 欧美真人抽搐一进一出gif| 久久久久久久久久久免费精品| 1人人看人人摸人人操| 精品国产人成在线| 91精品久久久久久77777| 大香樵伊人网| 日本不卡二三区| 中文子幕一二三| 精品欧美乱码久| 黄色AV免费| 日本熟妇人妻中出视频| 亚洲天堂区| 欧洲一区二区三区免费| 五月天九九日国产精品一区二区三区| 伊香蕉综合久久久久久久噜噜噜 | 亚洲欧洲网站免费观看| 欧美日韩丝袜| 夜夜操中文字幕| 亚洲熟女人妻中文字幕一区二区| 久久av无码| 性爱精品一区| 欧美一级在线观看成人| 变态乱伦伪娘灌肠一区二区| 一区二区三区机械有限公司| 久久超碰、| 97中文字幕一区| 麻豆视频国产一区二区| 91狼人| 国产精品色哟哟| 亚洲九九视频| 欧美日韩色综合网| 一区二区三区精品黑丝白丝酒店对鸡| 天天天天天超碰| 亚洲熟女av中文字幕| 久久国内| 日日A∨| 香蕉综合网| 日韩性爱再线视频| 中文97国产| 激情小说在线视频| 伊人色综合网电影| 久久人爽| 高清有码一区二区| 丁香五月天视频| 玖玖爱伊人玖玖爱| 国产男女边吃边摸视频网站| 婷婷五月天福利| 欧美最大综合网| 久草视频观看视频在线| 色一射色一射| 大香蕉淫人| 屁屁影院一区二区三区国产| 操美女人妻| 欧美色欧美| 婷婷久久综合| 亚洲熟女一区二区| 国产熟女免费观看久久| 亚洲激情色片 | 日韩性色b| 超碰97国产欧美| 探花精品视频| 中出20p| 丁香六月东京热| 色臀aV| 日韩成人精品视频自拍| 亚洲天堂日本| 日本1区2区不卡视频| 欧美性后入| 91国产操逼视频| 老鸭窝亚洲毛片| 黄片www视频免费| 亚洲av夫妻操穴网| 国产精品美女| 中文字暮97| 张柏芝国产一区在线观看| 久久99国产综合精品女同| 大色综合| 不卡九肏| wwwxxx日本爽| 人妻内射一区二区在线视频| 精品少妇人妻av久久免费| 大乔未久88一区| 亚洲黄色网址视频| 久久久久久中文| 激情五月综合网| 成人久久久| 综合久欧洲| 多毛小伙内射老太婆| 91男人天堂网| 色色激情| 久草午夜| 人妻社区男人天堂| 韩国成人精品久久久免费看| 欧美91久久久久| 激情婷婷| 青青操网| 黄色一区三区| 亚洲少妇色| 以及麻豆国产入口在线观看免费| 97精品国产手机| 国产av美女被艹的乱叫| 伊香蕉综合久久久久久久噜噜噜| 97视频观看| xxxx网站亚洲精品| 欧美丝袜91| 少妇被玩视频二三区| 东北丰满熟女国产一区| 狠狠入| 蜜桃久久久久久久| aaaa少妇高潮大片| 欧美写真视频一区| 91美女视频在线| 国产成人无码久久精品| 91老熟女视频| 日本九九久久99| 丁香婷婷色五月| 欧美一区二区日韩三区| 亚洲,欧美,综合网| 国产熟女少妇一区| 天天色,天天干,天天干| AV女资源| 神马久久久久久久久久| 欧美特大黄一级片片免费| 男人的天堂2018| 国产热av| 亚洲精品丝袜| 亚洲国产欧美中文永久| 五月丁香六月综合缴清无码| 加勒比久久av| 国产一进一出视频网站| 青草伊人久久| 殴美综合色88| 97av在线视频| 国产操伦| 日韩性爱小视频| 国产激情在线| 日韩无码AB| 天天摸夜夜摸|