免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

云開發(fā)圖書借閱小程序:事務(wù)、庫存并發(fā)與冷啟動優(yōu)化

云開發(fā)圖書借閱小程序:事務(wù)、庫存并發(fā)與冷啟動優(yōu)化 1. 從零搭一套圖書借閱小程序先想清楚云開發(fā)能扛住什么做校園或社區(qū)圖書借閱這類小程序最大的誤區(qū)就是一上來就搞 Spring Boot MySQL 服務(wù)器那一套。我?guī)н^幾個類似的項目真正卡住進度的從來不是業(yè)務(wù)邏輯有多復雜——借書還書本身簡單得很——而是沒人愿意長期維護一臺服務(wù)器、沒人愿意去折騰域名和證書、更沒人愿意在半夜被告警電話叫醒說數(shù)據(jù)庫連不上了。云開發(fā)這條路子最適合的就是這種場景三五個人、預算接近于零、需求清晰、用戶量可控。圖書借閱小程序本質(zhì)上就是一批書、一群人、一堆借還記錄數(shù)據(jù)量上萬條就到頭了讀多寫少幾乎沒有高并發(fā)壓力這正是 Serverless 最舒服的區(qū)間。先把這套系統(tǒng)要干的事說清楚管理員把書錄進去書名、作者、ISBN、封面、館藏位置、總冊數(shù)讀者掃碼或搜索找到書點借閱系統(tǒng)扣減可借庫存并生成一條借閱記錄到期前提醒還書時核銷記錄、回滾庫存超期了標紅提示。聽著像玩具項目但真做起來庫存并發(fā)、權(quán)限邊界、時間時區(qū)、列表性能這四個坑一個都不會少。這篇文章就是把我踩過的這些坑按順序攤開講數(shù)據(jù)集合怎么設(shè)計才不會后期改表改到崩潰、借書那一下為什么必須上事務(wù)、云函數(shù)超時到底是哪行代碼拖的、還有一大堆權(quán)限報錯和冷啟動的排查思路。適合剛接觸云開發(fā)、想拿一個完整項目練手的朋友也適合已經(jīng)寫了一版但總在邊界情況上翻車的人。我不打算把這篇寫成 API 手冊文檔上有的東西抄一遍沒意義。下面全是為什么這么設(shè)計和當時出了什么問題的記錄代碼片段你可以直接拿去改。2. 方案選型云開發(fā)和自建后端到底差在哪2.1 把成本、運維和擴展性攤在一張表上看選型這事兒最怕拍腦袋。我一般會把幾個關(guān)鍵維度列出來橫向?qū)Ρ缺苊庾龅揭话氚l(fā)現(xiàn)路走錯了。圖書借閱系統(tǒng)的特點是用戶規(guī)模有限一個學校幾千人、一個社區(qū)幾百人、業(yè)務(wù)邏輯集中在寫操作、沒有復雜的實時通信需求、也沒有大數(shù)據(jù)分析要求。基于這幾個前提我把兩條路線擺在一起維度自建后端服務(wù)器 數(shù)據(jù)庫云開發(fā)云函數(shù) 云數(shù)據(jù)庫 云存儲初期投入需要服務(wù)器、數(shù)據(jù)庫、域名、證書配置周期 3 到 7 天開通環(huán)境即用半小時能跑通第一個接口運維成本系統(tǒng)補丁、備份、監(jiān)控、擴容全靠自己平臺托管基本不用管成本模型固定月費即使沒人用也在燒錢按調(diào)用量計費低峰期費用趨近于零冷啟動無有明顯冷啟動延遲幾百毫秒到兩秒復雜查詢自由度高SQL 想怎么寫怎么寫聚合能力夠用但有邊界跨集合聯(lián)查需要手工拼單次執(zhí)行時長自己控制云函數(shù)有明確超時上限默認較短可調(diào)但有天花板遷移成本低數(shù)據(jù)在自己手里需要提前設(shè)計導出通道避免被綁死結(jié)論很清楚這類項目不需要為了顯得專業(yè)去自建后端。真正需要警惕的是第二條路線的隱性約束——超時時間、單次返回條數(shù)、事務(wù)支持范圍這三樣如果一開始沒摸清楚后面改起來會很痛。2.2 三個必須先量清楚的硬約束第一個是單次查詢返回條數(shù)。小程序端直接查數(shù)據(jù)庫默認一次只給 20 條云函數(shù)里查默認 100 條。很多人寫完列表頁發(fā)現(xiàn)怎么只有 20 本書以為是數(shù)據(jù)沒插進去其實是被截斷了。做書籍列表必須老老實實分頁別想著一次拉全量回來在前端過濾。第二個是云函數(shù)執(zhí)行超時。默認值比較短后臺可以調(diào)高但不是無限的。圖書借閱里最容易超時的場景是批量導入書籍和批量到期掃描。前者一次性插幾百條逐條add必超時后者遍歷所有借閱記錄逐條判斷數(shù)據(jù)一多就掛。解決辦法后面會講批量導入走分批提交到期掃描走定時觸發(fā)器加最小化掃描范圍。第三個是事務(wù)的適用范圍。借書這個動作要同時做兩件事扣庫存、寫記錄。這兩步必須原子完成否則會出現(xiàn)庫存扣了但記錄沒寫、或者兩條借閱記錄搶到同一本書的情況。云開發(fā)的數(shù)據(jù)庫事務(wù)支持在云函數(shù)里使用但有前提所有操作必須在同一個事務(wù)對象上執(zhí)行且事務(wù)內(nèi)有操作數(shù)量和執(zhí)行時間的限制。所以借書邏輯不能拆成幾個獨立云函數(shù)串行調(diào)用必須一口氣做完。注意事務(wù)不是萬能的。它解決的是同一時刻兩個人搶最后一本書的問題解決不了用戶網(wǎng)絡(luò)不好重復點擊提交的問題。后者要在前端做防抖加冪等鍵兩碼事。2.3 需求邊界先畫死別讓功能膨脹拖垮進度我見過太多這類項目死在順便加個功能上。第一版只做四件事書的增刪改查、借、還、逾期提醒。就這四個別貪。會員積分、書評、預約排隊、掃碼入庫、推薦算法全部放到二期。為什么因為圖書借閱的核心難點在數(shù)據(jù)一致性和權(quán)限控制功能一多權(quán)限規(guī)則就復雜規(guī)則一復雜就容易出現(xiàn)某個角色的用戶能改別人記錄這類安全事故而這種問題往往上線之后才被發(fā)現(xiàn)。還有個現(xiàn)實問題如果這個小程序涉及押金、收費借閱類目和資質(zhì)這塊要提前確認清楚別代碼寫完卡在審核上。我一般建議第一版做成純公益的館內(nèi)借閱完全不碰資金流把業(yè)務(wù)跑通再說。3. 數(shù)據(jù)模型設(shè)計把借閱規(guī)則釘進集合結(jié)構(gòu)里3.1 五個核心集合的字段規(guī)劃數(shù)據(jù)模型這一步做扎實后面能省掉一半的麻煩。我最終的集合設(shè)計是這樣字段名統(tǒng)一用下劃線風格避免前后端拼寫不一致集合名用途關(guān)鍵字段books書籍主數(shù)據(jù)_id、title、author、isbn、cover_file_id、category、total_copies、available_copies、location、status、create_timeborrow_records借閱流水_id、openid、book_id、book_snapshot、borrow_time、due_time、return_time、status、overdue_daysusers讀者信息_id、openid、nickname、student_no、max_borrow、current_borrow、statuscategories分類字典_id、name、sort、parent_idnotices公告與提醒_id、title、content、type、publish_time幾個設(shè)計決定值得單獨說一下。庫存用兩個字段而不是一個。total_copies表示館藏總量available_copies表示當前可借數(shù)量。為什么不只存可借數(shù)因為管理員改館藏的時候你需要知道原始總量才能算出正確的可借數(shù)。比如總量從 5 改成 8可借數(shù)應(yīng)該 3而不是直接變成 8。只存一個字段這個計算就沒法做了。用戶身上冗余一個 current_borrow 計數(shù)。嚴格來說這個數(shù)可以從借閱記錄里統(tǒng)計出來但每次借書都去count一遍記錄表既慢又容易在并發(fā)下算錯。冗余一個計數(shù)字段配合事務(wù)一起更新讀取時直接拿速度快得多。代價是要保證這個字段永遠和實際記錄數(shù)一致——這就是后面要講的還書時一定要回滾。status 一律用數(shù)字枚舉不用布爾值。借閱記錄的狀態(tài)至少有借出中、已歸還、已逾期、已丟失。用is_returned: true/false這種布爾設(shè)計將來加丟失狀態(tài)就得改全表。用status: 1/2/3/4加一份常量映射擴展起來毫無壓力。3.2 借閱記錄為什么要存一本書的快照這是我在第二個項目里才想明白的事。最開始 borrow_records 只存book_id展示的時候再去 books 集合里聯(lián)查書名和封面。結(jié)果出了個問題管理員把一本書下架刪除了歷史借閱記錄全部變成未知書籍讀者查自己的借閱歷史一臉懵。解決辦法是在借閱記錄里冗余一份快照book_snapshot: { title, author, cover_file_id, isbn }。借出那一刻把書名作者封面拷一份進去之后書籍怎么改、怎么刪歷史記錄都完整可讀。多占一點存儲空間換來的是數(shù)據(jù)的不可變性——這個交換在借閱系統(tǒng)里絕對劃算。同樣的思路也適用于用戶信息。借閱記錄里存openid就夠了展示昵稱時再查因為昵稱會變。但如果是罰款單、借書憑證這類憑證性數(shù)據(jù)用戶信息也得存快照。區(qū)分標準很簡單這條數(shù)據(jù)是當前狀態(tài)的引用還是當時事實的記錄。前者存 ID后者存快照。3.3 數(shù)據(jù)庫權(quán)限規(guī)則最容易翻車的地方云開發(fā)的數(shù)據(jù)庫權(quán)限有四檔僅創(chuàng)建者可讀寫、所有用戶可讀僅創(chuàng)建者可寫、僅管理端可讀寫、所有用戶可讀寫。選錯一檔要么數(shù)據(jù)泄露要么功能直接不工作。圖書借閱系統(tǒng)的正確配置是books所有用戶可讀僅管理端可寫。普通讀者能瀏覽書目但不能改庫存。borrow_records僅創(chuàng)建者可讀寫。讀者只能看自己的借閱記錄看不到別人的。管理員的操作走云函數(shù)云函數(shù)有管理員權(quán)限不受這條規(guī)則限制。users僅創(chuàng)建者可讀寫。自己的資料自己改。categories、notices所有用戶可讀僅管理端可寫。提示小程序端直接寫數(shù)據(jù)庫用的是創(chuàng)建者身份也就是 openid。一旦某條記錄的_openid字段和你當前用戶對不上寫操作就會失敗報的錯還不一定直觀。所以凡是涉及修改別人的數(shù)據(jù)——比如管理員幫讀者辦理還書——一律走云函數(shù)別在小程序端硬寫。這里有個特別隱蔽的坑云函數(shù)里創(chuàng)建的記錄_openid字段是空的。因為云函數(shù)用的是管理員身份不是用戶身份。如果你在云函數(shù)里插入借閱記錄然后指望小程序端按僅創(chuàng)建者可讀的規(guī)則讀出來會發(fā)現(xiàn)讀不到。解決辦法是在云函數(shù)里手動把 openid 寫進一個自定義字段比如openid查詢時用自己的字段過濾而不是依賴_openid的自動權(quán)限。或者干脆把借閱記錄的讀取也放到云函數(shù)里做。我傾向后者邏輯集中權(quán)限清晰。4. 核心業(yè)務(wù)實現(xiàn)借書那一下到底發(fā)生了什么4.1 庫存并發(fā)是這類系統(tǒng)的頭號殺手把所有邏輯攤開看借書這個動作包含四個判斷和兩個寫入這本書存在且狀態(tài)正常available_copies 0該用戶當前借閱數(shù)未超過上限該用戶沒有已經(jīng)借了同一本書未還寫入一條借閱記錄available_copies減 1用戶current_borrow加 1如果不用事務(wù)最典型的故障是兩個人同時點借最后一本書兩個請求都查到了available_copies 1都判斷通過然后都執(zhí)行扣減最后庫存變成 -1兩條記錄都成功。這在測試階段幾乎發(fā)現(xiàn)不了上線第一天就爆。正確的寫法是把整個流程放進云函數(shù)用事務(wù)包住。下面是我實際用的結(jié)構(gòu)省略了部分校驗// cloudfunctions/borrowBook/index.js const cloud require(wx-server-sdk) cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) const db cloud.database() const _ db.command exports.main async (event) { const { bookId } event const { OPENID } cloud.getWXContext() try { return await db.runTransaction(async transaction { // 1. 讀用戶加鎖式讀取 const userRes await transaction.collection(users) .where({ openid: OPENID }).get() if (!userRes.data.length) { throw new Error(USER_NOT_FOUND) } const user userRes.data[0] if (user.status ! 1) throw new Error(USER_DISABLED) if (user.current_borrow user.max_borrow) throw new Error(BORROW_LIMIT) // 2. 讀書籍 const bookRes await transaction.collection(books).doc(bookId).get() const book bookRes.data if (!book || book.status ! 1) throw new Error(BOOK_NOT_AVAILABLE) if (book.available_copies 0) throw new Error(NO_COPY_LEFT) // 3. 查重同一本書不能借兩次 const dupRes await transaction.collection(borrow_records) .where({ openid: OPENID, book_id: bookId, status: 1 }).get() if (dupRes.data.length) throw new Error(ALREADY_BORROWED) // 4. 寫記錄快照在這里生成 const now new Date() const due new Date(now.getTime() 30 * 24 * 3600 * 1000) await transaction.collection(borrow_records).add({ data: { openid: OPENID, book_id: bookId, book_snapshot: { title: book.title, author: book.author, cover_file_id: book.cover_file_id || }, borrow_time: now, due_time: due, return_time: null, status: 1, overdue_days: 0 } }) // 5. 扣庫存 加計數(shù) await transaction.collection(books).doc(bookId).update({ data: { available_copies: _.inc(-1) } }) await transaction.collection(users).doc(user._id).update({ data: { current_borrow: _.inc(1) } }) return { code: 0, dueTime: due } }) } catch (err) { return { code: -1, msg: err.message } } }幾個細節(jié)必須說清楚。_.inc(-1)這個原子操作符是關(guān)鍵。它讓減一在數(shù)據(jù)庫層面完成而不是先讀出來再寫回去。即使事務(wù)沒鎖住inc本身也不會丟更新。判斷重復借閱時我查的是status 1 的記錄也就是未歸還的。如果用戶借了還了再借是允許的所以不能簡單按 book_id 查。所有校驗必須在事務(wù)內(nèi)完成。把available_copies 0的判斷放到事務(wù)外面事務(wù)就白用了因為讀的時候是舊值。錯誤碼用字符串而不是中文提示。前端拿到NO_COPY_LEFT再映射成這本書已經(jīng)全部借出了方便做多語言和統(tǒng)一文案也避免云函數(shù)返回中文在不同環(huán)境下編碼出問題。4.2 還書流程里的兩個易錯點還書看起來比借書簡單實際上有兩個坑。第一個坑是重復還書。用戶連點兩次、或者管理員手誤點了兩下庫存會被加兩次。所以還書的第一步必須是檢查記錄當前狀態(tài)只有status 1才允許歸還歸還后立刻置為 2。這個檢查和更新必須在事務(wù)里否則兩次并發(fā)請求都能通過狀態(tài)檢查。第二個坑是逾期天數(shù)怎么算。這里我踩過最蠢的一次坑云函數(shù)運行環(huán)境的默認時間是 UTCnew Date()拿到的比北京時間晚 8 小時。如果你直接用new Date()和due_time相減算天數(shù)晚上八點以后的數(shù)據(jù)會全部錯一天。正確做法是用時間戳算差值然后按天向下取整const MS_PER_DAY 24 * 3600 * 1000 const diff Date.now() - new Date(record.due_time).getTime() const overdueDays diff 0 ? Math.floor(diff / MS_PER_DAY) : 0注意是Math.floor而不是Math.ceil。超期 1 小時算 0 天人性化超期 25 小時算 1 天。如果用ceil超期一分鐘就顯示已逾期 1 天用戶會覺得系統(tǒng)在訛他。還有一個細節(jié)due_time存進去的時候是 Date 對象取出來在云函數(shù)里拿到的是 Date在小程序端拿到的是字符串。兩邊的比較方式不一樣別在小程序端直接拿字符串做減法會得到 NaN。前端只負責展示計算全部放云函數(shù)。4.3 定時觸發(fā)器做逾期掃描的正確姿勢逾期狀態(tài)有兩種維護方式一種是查的時候?qū)崟r算一種是用定時任務(wù)提前標好。我建議兩個都做定時任務(wù)每天凌晨跑一次把已經(jīng)逾期的記錄 status 改成 3 并寫入 overdue_days用戶查詢時再根據(jù) due_time 實時兜底算一遍。原因是定時任務(wù)可能因為各種原因沒跑成功實時計算保證展示永遠正確。定時觸發(fā)器的配置文件長這樣{ triggers: [ { name: dailyOverdueScan, type: timer, config: 0 0 2 * * * * } ] }這個 cron 表達式是七位的秒 分 時 日 月 周 年0 0 2 * * * *表示每天凌晨兩點。很多人寫六位表達式少一位秒配置不生效還不報錯查半天。掃描邏輯上有個優(yōu)化點不要where({ status: 1 })全表拉出來逐條判斷數(shù)據(jù)量上千條就可能超時。正確做法是讓數(shù)據(jù)庫幫你過濾const _ db.command const now new Date() let hasMore true let lastId null const BATCH 100 while (hasMore) { const query { status: 1, due_time: _.lt(now) } if (lastId) query._id _.gt(lastId) const res await db.collection(borrow_records) .where(query).orderBy(_id, asc).limit(BATCH).get() if (!res.data.length) break // 逐條更新狀態(tài)這里用 Promise.all 但控制并發(fā) await Promise.all(res.data.map(rec { const days Math.floor((now.getTime() - new Date(rec.due_time).getTime()) / MS_PER_DAY) return db.collection(borrow_records).doc(rec._id).update({ data: { status: 3, overdue_days: days } }) })) lastId res.data[res.data.length - 1]._id hasMore res.data.length BATCH }用_id做游標分頁而不是skip這是數(shù)據(jù)量上來之后必須要改的一點。skip(10000)意味著數(shù)據(jù)庫要掃描并丟棄前一萬條越往后越慢最后直接超時。游標分頁每次都從上次結(jié)束的位置開始性能是平的。注意Promise.all一次并發(fā) 100 個數(shù)據(jù)庫寫操作在云函數(shù)里可能會被打限流。實測下來建議把 BATCH 降到 20 到 50 之間或者用分批串行的方式慢一點但穩(wěn)。5. 前端體驗與性能那些讓人抓狂的小細節(jié)5.1 列表分頁和搜索的取舍書籍列表是整個小程序里訪問最頻繁的頁面它的性能直接決定用戶第一印象。分頁這塊小程序端用skip limit就行因為列表頁用戶最多翻個十幾頁skip的累積開銷可以接受。但一定要做觸底加載而不是頁碼跳轉(zhuǎn)符合小程序的操作習慣。加載狀態(tài)要有骨架屏或者 loading 占位否則用戶會以為卡死了。搜索是最容易做錯的。很多人上來就寫db.collection(books).where({ title: db.RegExp({ regexp: keyword, options: i }) }).get()這個寫法在數(shù)據(jù)量小的時候沒問題但正則查詢用不上索引全表掃描幾百條還行幾千條就明顯卡。更要命的是用戶輸入的關(guān)鍵詞如果帶特殊字符正則可能直接報錯。我的處理策略是分兩層第一層書名、作者前綴匹配用db.RegExp({ regexp: ^ escapeRegExp(keyword) })前綴正則是可以用上索引的。用戶輸三體能搜到《三體》《三體 II》。第二層如果第一層結(jié)果為空再降級做全文模糊匹配同時限制返回 20 條。另外一定要對用戶輸入做轉(zhuǎn)義處理把.*()[]這些正則元字符替換掉否則用戶輸個(就白屏了。function escapeRegExp(str) { return str.replace(/[.*?^${}()|[\]\\]/g, \\$) }如果書籍量真的很大比如幾萬條正則在任何位置匹配都不合適這時候要么上云開發(fā)的聚合搜索要么在錄入書籍時預生成一個拼音首字母字段讓用戶能按拼音首字母快速定位。這個優(yōu)化我在一個兩千多本書的項目里做過搜索響應(yīng)從兩秒多降到兩百毫秒以內(nèi)。5.2 封面圖片云存儲的存儲和加載封面圖是這類小程序里最占體積的東西。常見的錯誤做法是把圖片轉(zhuǎn)成 base64 存進數(shù)據(jù)庫幾百本書下來數(shù)據(jù)庫直接告急查詢還慢得要命。正確做法是圖片上傳到云存儲數(shù)據(jù)庫里只存fileID。展示的時候用cloud://開頭的 fileID小程序端的image組件可以直接識別不需要先換成臨時鏈接。如果你需要在 web 端或者分享卡片里用才需要調(diào)用getTempFileURL換鏈接而且臨時鏈接有有效期別緩存太久。上傳前必須壓縮。我用wx.compressImage質(zhì)量設(shè)到 60 到 70 之間寬度壓到 750px 以內(nèi)一本書的封面從兩三兆能壓到一百多 KB。這個操作在管理端做讀者端永遠拿到的都是壓好的圖。還有個容易忽略的點刪除書籍時記得刪云存儲里的文件。云開發(fā)的數(shù)據(jù)庫和云存儲是兩個獨立系統(tǒng)刪記錄不會自動刪文件。時間一長云存儲里堆一堆孤兒文件既占空間又占額度。我的做法是在刪除云函數(shù)的最后加一步cloud.deleteFile失敗也不影響主流程但日志要記下來。5.3 交互細節(jié)上的幾個加分項借書按鈕的防重復點擊最簡單有效的辦法是點擊后立刻setData({ submitting: true })把按鈕置灰請求返回再恢復。不要指望用戶手不抖。掃碼借書這個功能值得做。給每本書貼一個碼內(nèi)容是書籍的_id或者 ISBN用戶掃碼直接跳詳情頁。用wx.scanCode一行代碼的事體驗提升非常明顯尤其對老年讀者友好。借閱列表的排序默認按借閱時間倒序但要把已逾期的置頂。實現(xiàn)上有兩種方式一種是數(shù)據(jù)庫排序字段設(shè)計一種是前端分組。我傾向前端分組把數(shù)據(jù)分成逾期中和其他兩個數(shù)組分別渲染邏輯清晰也不影響分頁。6. 排錯實錄那些報錯信息背后的真實原因6.1 高頻報錯速查表下面這些都是我在實際項目里真實遇到并解決過的問題按出現(xiàn)頻率排序報錯或現(xiàn)象真實原因處理方式errCode: -502005 database collection not exists集合沒創(chuàng)建或者云函數(shù)連的環(huán)境不對在控制臺手動建集合檢查cloud.init的環(huán)境 IDpermission denied權(quán)限規(guī)則和操作身份不匹配寫操作走云函數(shù)或用自定義 openid 字段過濾云函數(shù)返回Timeout循環(huán)里逐條 await或全表掃描改批量操作加_id游標分頁縮小 where 范圍首次調(diào)用特別慢后面正常冷啟動提高內(nèi)存配置關(guān)鍵路徑減少依賴包體積庫存出現(xiàn)負數(shù)沒用事務(wù)或事務(wù)內(nèi)校驗不全全部校驗搬進事務(wù)用_.inc原子操作列表只顯示 20 條小程序端查詢默認限制顯式分頁或用云函數(shù)查默認 100 條借閱記錄查不到_openid云函數(shù)插入的記錄不帶 openid手動寫入openid字段查詢時用它過濾逾期天數(shù)差一天云函數(shù) UTC 時區(qū)用時間戳算差值不用字符串比較cloud.callFunction:fail云函數(shù)沒上傳部署或函數(shù)名拼錯右鍵上傳并部署檢查名字大小寫圖片不顯示存的是 http 鏈接或未壓縮的超大圖統(tǒng)一存 fileID上傳前壓縮6.2 冷啟動不是 bug但必須緩解冷啟動這個事很多人第一次遇到會以為是代碼有問題?,F(xiàn)象很典型早上第一個用戶打開小程序加載首頁轉(zhuǎn)圈兩秒多之后就飛快。原因是云函數(shù)實例被回收了重新拉起需要初始化時間。緩解手段有幾個按性價比排序減小依賴體積。云函數(shù)目錄里的node_modules越大冷啟動越慢。我見過有人在云函數(shù)里裝了整個lodash和moment其實只用了一個函數(shù)。日期處理用原生Date就夠工具函數(shù)自己寫幾行包體積能從幾十兆降到幾兆。提高內(nèi)存配置。云開發(fā)后臺可以調(diào)云函數(shù)的內(nèi)存配置越高分配的 CPU 越強初始化也越快。這個幾乎不用改代碼調(diào)一下配置就有改善。拆分函數(shù)。一個巨型云函數(shù)處理所有邏輯初始化時要把所有依賴都加載一遍。拆成借書還書查書幾個小函數(shù)每個只加載自己需要的依賴單次冷啟動時間會短很多。前端做體驗兜底。首頁加載時先渲染本地緩存的書目列表wx.setStorageSync存一份同時發(fā)起請求拿到新數(shù)據(jù)再替換。用戶感知不到等待。6.3 上線前的自查清單我在每次交付前會過一遍這張單子能擋掉大部分線上事故所有涉及多表寫入的操作是否都在事務(wù)內(nèi)借書、還書、刪書這三個必須檢查。所有查詢是否都加了分頁有沒有哪個頁面在偷偷全表拉取數(shù)據(jù)庫權(quán)限規(guī)則是否逐條核對過特別是books的寫權(quán)限有沒有誤開給所有用戶。云存儲里有沒有孤兒文件建議寫個一次性腳本清理。定時觸發(fā)器是否真的跑起來了可以在函數(shù)里加一行日志觀察兩天的執(zhí)行記錄。所有new Date()的地方是否都用時間戳計算避免時區(qū)問題錯誤碼是否都有對應(yīng)的用戶友好文案有沒有哪個分支會直接彈出undefined用戶連續(xù)點擊提交按鈕會不會產(chǎn)生重復數(shù)據(jù)冪等性檢查做了沒有7. 我在幾個項目里攢下的經(jīng)驗最后說點零碎的、文檔里不會寫的東西。別在云函數(shù)里做遞歸。有次我寫了個分類樹遞歸查詢本地測試沒問題線上數(shù)據(jù)一深就超時報錯信息還特別模糊。分類這種層級不深的數(shù)據(jù)一次性全查出來在前端組樹就行幾十條數(shù)據(jù)的內(nèi)存開銷可以忽略。數(shù)據(jù)庫索引早點建。云開發(fā)控制臺可以給字段建索引。borrow_records的openid、status、due_timebooks的title、category這幾個字段建上索引查詢速度差別是數(shù)量級的。索引這事不占多少工作量但一定要在上線前做完等數(shù)據(jù)多了再建建索引本身就要花很久。測試數(shù)據(jù)一定要造臟數(shù)據(jù)。我在測試階段永遠會插幾條這樣的記錄庫存為 0 的書、已經(jīng)被刪除的書但記錄還在、due_time 是去年的記錄、openid 為空的用戶。這些邊界數(shù)據(jù)能提前暴露 80% 的空指針和狀態(tài)判斷漏洞比寫一百個單元測試管用。給管理員留一個數(shù)據(jù)導出入口。哪怕第一版只是個簡單的導出借閱記錄為 CSV的功能。理由很現(xiàn)實一旦你想換方案、或者需要給上級交一份統(tǒng)計報表沒有導出通道會非常被動。這個功能實現(xiàn)起來不復雜云函數(shù)里拼好 CSV 字符串傳到云存儲返回一個下載鏈接就完事。日志要打但別亂打。云函數(shù)里console.log的內(nèi)容在控制臺能看但默認保留時間有限。關(guān)鍵路徑——借書成功、還書成功、事務(wù)失敗——打一行結(jié)構(gòu)化日志包含 openid、book_id、錯誤碼。出問題時這幾行日志能省掉你半天排查時間。非關(guān)鍵路徑別打日志太多反而看不清。這套系統(tǒng)我從第一版到現(xiàn)在改了三輪最大的感受是云開發(fā)的天花板不在技術(shù)能力而在你有沒有把邊界情況想全。庫存并發(fā)、時區(qū)、權(quán)限、分頁、重復提交這五個點每一個都值得單獨寫一段代碼去防而它們恰恰是最容易被先跑通再說跳過的部分。等用戶量上來、數(shù)據(jù)變多這些跳過的坑會一個一個找回來。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
www.99婷婷| 久久资源网五月婷| 一区操| 99视频网| 狠狠干婷婷| 伊人91| 丁香网五月网| 激情婷婷六月天| 亚洲欧洲色色| 久久天堂| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 99高级会所久久| 99精品偷自拍| 久久综合五月| 婷婷五月天视频| 久久综合99| 九九视频在线观看视频6 | se99视频| 久久婷婷婷婷伊人| 狠狠综合久久| 伊人玖玖网| 婷婷91| 综合久久综合五月天婷婷| 成人婷99最新| 激情五月天 婷婷| 天天干,天天舔| 久久性都花花世界成人免费视频| 婷婷五月色| 26uuu另类亚洲欧美日本一| h亚洲| 婷婷五月情天| 婷婷丁香激情五月| 亚洲五月天伊人| 色99自拍| 五月婷婷激情久久| 婷婷欧美激情综合| 婷婷五月天网址| 乱精品一区字幕二区| 91九色国产熟女| 夜夜爱爱亚洲| 99久久高清视频| 九九婷婷综合| 99这里有精品| 99色色视频| 婷婷五月天资源| 色久播播| 少妇婷婷五月天| 99色激| 9 1在线视频| 欧美97超碰| 日韩另类| EEUSS鲁片一区二区三区| 男女99免费视频| 婷婷六月情| 深爱激情小说五月婷婷| 五月丁综合在线观看| 亚洲天堂大香蕉| 婷婷97C| 国产成人AV不卡| 小视频一区| 操操操av| 亚洲婷婷五月天激情综合| www.粉嫩av.com| 国産精品| 激情五月天婷婷免费观看| 久久久99视频| 26uuu淫色| 亚洲激情在线| 色狠狠伊人久久五月丁香| 天天曰夜夜爽| 秋霞电影理论| 综合五月天完整| 五月婷婷免费视频| 思思热视频在线观看| 五月婷婷网五月在线| 丁香婷婷免费| 丁香九月婷婷色| 秋霞av不能| 无毒黄色网址| 97人人操| 亚洲激情五月婷婷日日| 五月婷精品| 开心激情网五月| 99爱无码| 色综合色色| 五月天激情网图片 - 百度| 99热9| 久久五月天激情婷婷| 激情综合99| 91热视频色网站| www.99热视频| 狠狠五月天婷婷激情网。| 久久这里只有精品16| 色五月婷婷视频| 九九久久视频| 五月婷婷欧美| 激情综合丁香| 天天日天天添| 激情综合网五月婷婷| 色婷婷电影网| 亚洲乱码日产精品BD在线观看 | 丁香五月人妻| 五月天婷婷色播在线网| 色色激情网| 亚洲视频99| 中文毛片无遮挡高潮免费| 亚洲中文AV| 天天综合精品| 成人片黄网站色大片免费毛片| 天天揷综合网| 九九热这里只有精品7| 丁香婷婷精品视频| 九九大香蕉黄色影院| 激情小说在线视频| 日韩黄色电影| 成人性爱精品视频| 97色婷| 夜夜嗨一区二区三区直播内容| 中文字幕免费高清电视剧| 国产jd1024基地手机看国产| 久久er免费视频| 伊人久久五月天| 五月婷婷丁香大陆免费| 九色视频入口91| 色色色婷婷五月天| 五月丁香婷婷伊人| 粉嫩AV久久一区二区三区| 欧美日本不卡黄色片| 黑人无码一区| 99免费热视频| 99视频这里有精品| 99这里精品| 夜夜爱网站| 五月丁香激情综合| 色九月婷婷| 天天透天天摸天天舔| 91人操| 日韩AV在线影片| 五月婷婷综合影院| 啪啪小说五月天| 播播网色播播| VA日本视频| 国产综合婷婷| 欧美日本99| 亚洲五月天第一综合干| 婷婷视频网| 色播色丁香五月| 婷婷五月色花丁香社区| 囯产精品久久欠久久久久久九大| 91综合国免费久入| 99热最新| www久久99| 人人操人人干AV| 激情五月四色| 另类亚洲电影| 丁香六月久久| 日韩黄色电影| 伊人网啪啪| 久久综合站| 天天插轮理| 久碰视频| 欧美性生交XXXXX无码小说| 婷婷丁香五月麻豆| 日本综合色图| 日韩狠狠色婷婷| 99色婷婷视频| 五月天天天综合| 激情另类综合| 秋霞免费三级片| 91凹凸在线| 亚洲国产网站| 色综合久久88色综合天天99| 开心六月婷| 色情综合| 欧美成性色| 操一区| 五月丁香六月婷婷成人| 97在线精品| 五月激情综合性爱| 99色在线视频| 日韩成人精品一区久久久久| 日韩欧美婷婷丁| 99思思| 中文字幕成人日韩| 五月婷婷亚洲| 人人色人人摸人人看| 五月丁香六月婷婷啪啪| 丁香五月激情月| 精品成人在线| 久久这里只有精品热在99| 丁香五月色情av| 丁香五月婷婷色播艳门照| 婷婷干| 九热视频| 97人凄人人操人人爽| A片一曲| 九九碰九九爱97| 开心五月天激情网| 99热久草| 99热e| 无码99| 婷婷瑟五月天久久综合| 嫩草视频观看| 亚洲乱码日产精品BD| 日韩av大全| 美女被肏网站在线看| 婷婷五月花丁香| 亚洲人妻电影| 午夜大香蕉| tingtingzonghewang| 亚洲天堂制| 色五月婷婷影院| 91精品综合久久久久久五月丁香| 一区二区你懂的| 久久99操| 久久日婷婷| 人妻激情在线| 亚洲一区二区无码蜜乳av| 国产精品丝| 99热一区| 天天综合五月天| 婷婷丁香六月| 丁香久久九九99| 五月丁香六月激情欧美综合| 99爱视频在线观看这里只有精品| 99色看这里只有精品| 色无婷婷| 五月婷婷激情综合| 热99在线精品| 深爱五月日韩| 艹色18p| 大香蕉综合| 99秘 在线| 91色吧网| 五月九九综合| 最近免费中文字幕大全高清大全1| 思思热这里只有精品| 天天干,天天舔| 色色综合五月| 久久精品99国产精品日本| 超碰人人操人人干| 久一网站| 丁香五月综合激情久久潮喷| 超91热| 婷婷伊人| 日本久久高清| 日本久久婷| 这里只有精品1| 五月综合婷婷久久在线| 丁香五月婷婷乱| 五月丁香六月片| 操骚货在线| 五月天社区| 色情五月天婷婷| 99色这里| 色五月天综合| 激情网五月婷婷| 五月的丁香六月的婷婷| 五月丁香六月婷婷的女人| 久久机只有这里精品| 337p午夜影院| 欧美久久婷婷| 天天爽天天操| 激情六月丁香| 99爱视频| 91狼友视频在线观看| 不卡在线视频| 午夜色丁香| 丁香九月婷婷综合| 夜夜干 夜夜操| WWW久久久| 97狠狠色| 嫩草AV久久伊人妇女超级A| 九九激情网| 五月婷婷六月色| 99九九精品| 狠狠色噜噜狠狠狠888| 精品久久人妻| 日韩在线看AV| 九九色逼| 色婷婷狠狠禁18久久| 99婷五月| 色色色国产| 久热久色| 丁香五月天激情网| av网址在线| 九九色综合| 伊人久久婷婷| 超碰99热在线观看| 狠狠爱综合| 色婷婷中文字母五月丁香| 丁香五月日啪| 五月婷婷综合网| 99ri国产| www99精品日韩| 九九热婷婷| 亚洲国产成人综合| 婷婷五月天激情诱惑| 极品另类| 婷婷激情五月呦呦| 99燥99日| 99热亚洲| 婷婷免费无视频| 久久机热/这里只有精品| 无码人妻电影| 色婷婷影视99| 这里只有精品日韩精品| 激情五月天婷婷五月天| 欧美搡BBBBB摔BBBBB| 中文字幕在线人妻| 激情五月天在线| 综合网天天| 狠狠干总合| 天天日综合| 久9视频| 色情激情五月婷婷| 激情综合网五月天天| 久9热| 天天综合亚洲综合| 九九爱激情| 久久久27操| 97色色色色| 色婷婷裸体色性在线| 99视频九九热| 操逼综合网| 99热久只有| 中文av网| 91干网站| 国产精品色色色色| 99热这里只有精| 丁香激情五月少妇| 这里只有免费精品| 亚洲操女| 可以直接看的av网站| 九九热视频99| 色爱99| 日韩精品色| 九九精品热| 国洲夜色亚热在线久久| 天天干天天射色综合| 色99视频| 激情五月天婷婷久久久久久久久久久| 婷婷五月天最新综合你懂的 | 婷婷激情五月天小说校园| 草草视频91| 日韩淑女人妻luan伦激情精品一区二 | 18av天堂| 亚洲操操操| 热99精品视频| 大香线蕉伊人| 九九热精品99| 97九色视频| 激情五月天色色色| 五月天激情图片| 午夜丁香五月天综合| 五月婷婷性爱| 婷婷丁香视频在线观看免费| 激情五月天影院| 色99自拍| 91狠狠综合久久久| 色婷婷综合网| 夜夜操狠狠操| 五月天成人伊人| 玖玖色综合| 亚洲日本激情| 国产毛片精品一区二区色欲黄A片| 蜜臀AV在线观看| 淫视馆aV二区一区| 久久激情视频| 思思热99在线| 日本欧美啪啪| 99在线视频资源| 激情婷婷九月| 五月婷丁香| 久久婷婷色| www婷婷| 99在线观看亚洲| 六月色婷婷| 亚洲av| 夜夜夜叫天天天做| 99热官网精品在线| 色区久久| 六月婷婷私欲| 91视频综合网| 99综合免费视频| 五月婷高清视频| 色呦精品| 亚洲人成色A777777在线观看| 五月色丁香| 99在线免费视频| 五月天另类综合网| 日本A片一区| 狠狠干在线| 超碰99在线观看| 噜噜噜狠狠色综合| 丁香五月六月综合激情| 婷婷大香蕉| 强辱丰满人妻HD中文字幕| 丁香五月激情婷婷| 福利视频在线播放| 亚洲国产精品VA在线看黑人| 五月天六月丁香| 青青久久五月| 久久性爱视频| 天天色综合综合| 97欧美在线| 大香蕉手机视频| 五月天综合图片| 久久激情网| 人妻内射一区二区在线视频| 天堂久久婷婷| 日本成人噜噜| 桃色Av色哟哟| 啪啪操操| 综合色图婷婷| 丁香五月Av| 99热这里有精品24| 久久五月丁香婷婷| 激情碰碰碰| 日本欧美成人片AAAA| 99热这里只有精品无码| 国产色色在线| 久久99精品久久久久子伦| 无码日本精品XXXXXXXXX| 五月丁香中文| 五月综合婷婷久久在线| 天天搞夜夜叫| 五月婷婷亚洲| 欧美三级大片AA在线看| 人妻丰满精品一区二区A片| 深爱激情五月网| 九九这里只这里只有精品| 97热九九| 9 大屁股在线视频精品| 久草热8精品视频在线观看| 91丨九色丨熟女|老版| 操逼在线视频| 久热这里只有精品在线观看| 久久精品视频99| www.婷婷五月天,com| 99色综合| 天天干,天天日| 日亚二欧美| 日本操逼九九九九58日本操逼| 五月丁香亚洲校园欧美| 97人人干人人操| 丁香五月婷婷欧美成人色图| 色色色色色九九九九九| 这里只有精品96| 久久激情视频| 婷婷91| 婷婷五月天激情小说| 99色网站| 网站免费一站二站| 五月丁香综合激情| 噜噜狠狠色| 五月天精品视频| 婷婷开心综合人妻小说网址| 狠狠va| 99婷婷| 人妻久久婷婷| 91精品91久久久中77777久久玖玖九九 | 天天爽天天爽夜夜爽| 色色综合色视频| 99操中文视频| 天天射美女| 婷婷九月亚洲| 五月婷婷无码| 密黄站| 思思视频这里是精品| 天天性视频| 91丨九色丨高潮丰满日本| 啪色综合| AV大香蕉| 婷婷成人在线| www,婷婷| 1024操逼视频| 亚洲色另类| www.五月天婷婷| 99热在线观看免费精品| 欧美日本日韩| 中文字幕av网站| 日本人妻久久| 97久久精品| 久久综合干| 五月婷色色| 婷婷五月中文在线| 九九热在线视频,| 五月丁香色婷婷综合| 五月丁香五月婷婷在线观看| 99在线免费视频| 婷婷香五月天| 国产成人综合电影| 婷婷色操| 天天天天天天天干| 天天爽天天爽视频| 五月激情六月综合| 大香蕉色婷婷伊人在线| 91疯狂操操操操| 欧美在线操| 开心 五月 综合| 青青草护士中出内射-欧美电影在线天堂新版| 婷婷五月天视频小说| 婷婷六月花| 色天堂A| 婷婷久久五月| 丁香久久九九99| 欧美丁香五月97色| 怡红院精品视频久久久久久久久| 五月丁香影院| 国产一级片色色| 偷偷操99| 狠狠操狠狠狠| 激情久久久| 麻豆AV一区二区三区| 岛国午夜视频| 色激情综合狠狠婷婷| 五月天综合影院| 日本色婷婷| 激婷网| 久9久9久9久9久9久9| 丁香花五月天| 色色丁香五月天| 色色网站毛片| 婷婷成人网五月天| 五月婷婷激情中文字幕| 国产AV影片| 婷婷欧美综合| 啄木鸟丝袜美女福利视频| 99热.com| 99热99美国在线观看| 天天 日综合| 亚洲操精品| 婷婷无五月无码视频| www.99热在线观看| 99视频在线精品免费观看2| 开心五月激情网| 色八戒操婷婷| 六月丁香综合999| 超碰91在线| 色婷婷综合在线| 中文字幕丁香五月| 久久久精品人妻| 五月丁香婷婷成人版| 五月天激情小说婷婷基地| 五月色婷婷综合| 婷婷伊人綜合| 思思精品热在线| 欧美大肥婆大肥BBBBB| 九九热re99re6在线精品| 99热这里只有精品 搜| 激情五月天婷婷五月天| 久久久久久综合88| 国産精品| 六月婷婷久久| 天天做天天爱天天高潮| 久久人视频| 婷婷五月六月丁香综合| 色综合久久久综合久久网| 丁香六月婷婷综合激情欧美 | 99热99日天天干| 五月丁香六月婷婷免费| 婷婷成人五月天| 九九热这里只有精品23| 婷婷五月天小说网| 99热在线爱| 婷婷丁香久久| 五月天激情综合网俺也去| 操逼六区| 久久免费9| 成人国产综合| 免费九九热| 色色色免费视频| 九九激情综合| 五月丁香综合| 91九色超碰| 五月丁香色婷| 婷婷色狠狠| 可以免费看AV网站| 久久久久久久久久久月丁| 亚洲VA口| 亚洲综合1024| 激情五月丁香五月| 久久人妻爱爱| 五月桃花网综合| 亚洲激情精品| 天天肏天天肏天天肏| 婷婷色片| 九九99免费视频| www.狠狠| 婷婷五月天com| 亚洲99热| 九月婷婷激情| 婷婷免费精品视频| 丁香婷婷成年| 在线成人视频免费| 99re在线观看| 亚洲网站观看视频| 六月婷婷八月丁香| 伊人丁香六月婷婷| 九九综合九色欧美狠狠| 色色色婷| 天干干夜夜操| 97色视频网| 亚洲激情av| 激情五月天开心网丁香无码| av一区免费看| 婷婷五月av| 五月亭亭六月激情| 吊色AV男人的天堂| 人妻体体内射精一区二区| 五月婷婷欧美激情| 五月婷亚洲精品AV天堂| 7EzOBIhNq85TO| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 婷婷五月天首页| 99啊精典免费视频| 色噜噜婷婷| 日日爱699| 五月婷婷激情久久| 99国产在线精品视频| 狠狠的日| 开心久久爱五月天| 丁香六月综合激情| 色五月在线播放| 狠狠做五月| 在线五月婷| 婷婷丁香六月| 天天骑天天操| 婷婷激情五月天色| 婷婷激情五月| 怡红院91a√| 图片区 小说区 区 亚洲五月| 狠狠狠狠狠狠| 亭亭五月激情亚洲在线| 五月天激情综合网俺也去| 4438全国最大视频成人网站在线观看| 五月天激情综合| 久久这里只有精品热在99| 99热这里有精品6| 五月丁香婷婷啪啪| 丁香六月激情| 五月丁香做爱视频| 丁香六月 人妻| 热久久91| 在线观看996精品| 熟妇天天综合| 九九99九九精品免费| 久久东京热婷婷五月| 丁香五月综合在线视频| 思思热性操| 好好干Av| 色婷婷9| 婷婷色一二三区波多野结衣| 九八Av| 丁香婷婷色五月| 精品成人在线观看| www.婷婷| 五月天色区| 五月婷婷六月丁香在线视频| 天堂婷婷丁香六月网| 深爱激情网五月| www.超碰在线| aa久久| 天天综合网~91综合网| 丁香五月综合久久综合| 婷婷久久天堂网| AV片在线观看| 国模九区| 97色碰碰公开视频| 4399精品一区二区| 午夜九九九九九九| 丁香五月手机视频| 九九人人看| 色色色天堂网| 五月天伊人久久久久| 五月婷婷丁香五月| 九伊人网| 任你日视频| 久热一本| 免费观看全黄做爰的视频 | 综合五月草| 青青.com| 色婷婷最爱五月| 夜夜夜夜操| 狠色狠色综合久久| 狠狠色综合精品视频在线| 26uuu精品国产| 青青草五月天| 五月婷婷色色色| 丁香五月五月婷婷| 亚洲亚洲人成综合网络| 婷婷五月,综合伊人| 五月婷婷综合色啪首页| 国产综合81p| 超碰人人干| caopeng超碰| 丁香婷五月| 五月激情综合美女久久| 另类综合激情| 婷婷免费无视频| 天天夜夜操| 日本色爽| 99视频只有精品| AAA级久久久精品| 超碰在线观看caop| 久综合网| 综合久久五月| 综合色色婷婷| 五月天激情小说| 色开心五月婷婷丁香HD| 色婷婷久久综合| 色色婷五月天| 99久久九九| 婷婷六月插屄激情| 欧美影院| 99国产精品久久久久久久久久久| 变态另类色图| 99热成人永久免费| 夜夜夜夜夜操| 九九黄色网| 激情五月天福利| 丁香五月激情婷婷| 色丁香六月| 久久婷色| www.夜夜爱.com| 性爱综合网| 婷婷六月伊人| 五月婷婷在线免费观看| 七七久久婷婷| 九九视频这里只有精品在线播放| 99久在线| 淫水导航| 99爱爱| 9久久精品视频| 激情五月天啪啪| 国产婷婷综合在线免费视频| 中文字幕1区2区。| 色五月天影视| 婷婷丁香六月天| 不卡在线中文字幕无| 婷婷精品在线| www.五月丁香| 人妻第九页| 第四色婷婷日本| 色五月婷婷小说亚洲中文字幕组| 国精产品一区一区三区免费视频| 人人综合久| 九九精品在线观看视频6| 日本久久精品| 丝袜人妻| 免费精品99| 午夜微拍福利| 欧美毛片www| 综合激情站| 婷婷激情视频| 丁香五月天色婷婷| 久久九九99视频| 久久视频这里都是精品| 狠狠干在线| 婷婷六月天天| 美女五月狠狠| 久色大香蕉| 开心五月婷婷99| 丰满少妇猛烈A片免费看观看 | 久久久五月天婷婷成人网| 色综合性视频| 日本不卡高字幕在线2019| 金桔一区二区ab地址| 91丨九色丨白浆秘| 日本操片| 久久久久激情网| caopeng97人人| 色五月综合在线| 婷婷六月偷拍| 亚洲aV写真天天综合网久久| 超碰在线免费观看3 9| 色婷五月天网站| 国产真实乱对白精彩| 五月六月激情婷婷| 欧美内射AAAAAAXXXXX| 热这里只有精| 色噜噜狠狠色综无码久久合欧美| 丁香五月婷婷六月婷| 激情视频网址| WWW.桔色成人.COM入口| 成人片黄网站色大片免费毛片 | 青青草视频福利| 操操操B| 五月丁香黄色| 精品操逼一区二区| 五月天播播| 日韩美女羞羞网站在线观看| 丁香婷婷91在线观看视频| 97综合色片| 99精品国产热久久91色欲| 五月色婷| 亚洲另类在线观看| 天天色天天爽| 人妻少妇色综合| 天天日天天舔| 激情啪啪五月| 伊人网色婷婷五月天| 五月情四婷婷| 日韩人妻AV在线| 另类图片婷婷五月天| 久久33视频| 99久久久久久www| 久久婷婷五月天蜜桃| 婷婷开心激情| 热热久久久久久久久| 丁香五月亚洲综合| 激情五月色婷婷| 啪啪啪综合网| 久久人人做人人妻人人玩精品va| 久久机热这里只有精品| 婷婷久久免费| 超碰免费人人| 久久性爱视频久久性爱视频| 色婷婷久久综| 国产成人网址| 99成人免费热视频| 超碰人人干| 婷婷色色综合| 精品99在线| 草操网| 午夜微拍福利| 99热在线观看| 丁香五月婷婷欧美成人色图| 国产.亚洲.欧洲视频在线| 激情五月天丁香| 婷婷五月成人系列| 色婷婷影院| 婷婷九月丁香中文| 九九99久久| 99视频一区| 久久久激情| 97成人丁香| 26uuu在线观看| 五月深爱网| 丁香五月精品视频| 色九九丁香九月色九九色| 99热最新| 激情婷婷五月天| 免费在线观看AV网站| 99福利导航| 天天狠狠色噜噜| www.五月婷婷| 97操碰免费视频| 婷婷丁香18| 婷婷伊人网| 色999五月色| 中文字幕综合网| 99精品久久久久久久久| 一起草av| 久热成人| 五月丁香六月欧美综合网站| 天天舔天天摸天天射| 国产成人高清| 强奸幻女毛片| 丁香五月花| 天天综合在线网| 天天插天天射| 秋霞三及片| 美女婷婷六月色| 99在线69| 97碰人人操| 亚洲韩国日产综合AV| 国产XXXX搡XXXXX搡麻豆| 99自拍视频| 久久色9| 天天狠狠干| ss99热| 中文字幕+乱码+中文字幕在线观看| 婷婷丁香五月天影院| 中文婷婷狠狠| 五月天婷婷色播综合在线| 久色网| 99热8| 婷婷中文字幕| 欧美性爱五月天| 国产avapp 网| 久久色亭亭五月天| 国产欧美va| 久色婷婷200| 拳交大逼| 五月色色激情网| 天天综合 99久久婷婷| 久热精彩视频98| 日本三级99人妇网站| 日本女色人人| 日本操天堂| 精品香蕉99久久久久网站| 天天天天干| 婷婷操逼| 色99视频| 中文字幕日产A片在线看| 婷婷丁香久久| 大地9中文在线观看免费高清| 天天干天天拍| 无码日本精品XXXXXXXXX| 香蕉AV福利精品导航| 成人综合网站| AV在线不卡播放| 丁香五月之久操视频| 91无码一起草| 欧美碰碰碰| www综合久久| 97色在线观看视频| 热九九精品| 五月天天天操天天爽夜夜操| 五月天开心婷婷久久| www.五月婷婷久久.com| 久久九九大香蕉电院| 天天操电影院色狼性av| 最新va在线播放| aa久久| av在线资源| 国产人妻777人伦精品HD| 五月久久丁香| 激情图片99| 久久99久久99精品免视看婷婷| 婷婷四月 成人 狠狠干| 深爱五月天 开心网| 99免费热视频| 婷婷射综合| 久久久97| 婷婷丁香红五月91C| 综合精品啪啪| 久久曰曰| 色性日本| 久久天堂网| 女人高潮内射99精品| 天天干天天干天天干| 亚洲网视屏| 欧美成人AAA片一区国产精品| 欧美日韩成人综合9| 国产激情在线观看| 97色色色色| 亚洲色婷婷视频| 午夜九九九九九九九九九九九九九| site:pnnrt.com| 久9精品视频在线| 色婷婷超碰| www.五月激情.com| 五月丁香影视| 青青青在线视频国产| av五月丁香| 久久久人妻久久久| 九九精品视频在线观看| 成人短视频在线观看| 五月天久久婷| 五月丁香婷婷基地| 成人电影丁香六月天| 91viP在线看| 天天综合天综合久久网| 色射影院| 欧美成人五月天| 六月丁香五月婷婷| 五月婷婷九九久久| 极品 少妇 内射| 婷婷色情网| 婷婷九九色| 五月婷婷开心深| 99精品在线观看| 欧美性生交XXXXX无码小说| 婷婷五月综合色拍| 狠狠操狠狠做| 99热最新网址| 色99自拍| 五月天激情婷婷久久| 开心五月激情网| 91人操| 五月婷婷综合久久| 少妇被下春药玩弄A片| 五月色婷婷中文字幕| 开心婷婷五月天激情网| 97碰碰碰免费公开在线视频| 色婷天天| 夜夜躁爽日日| 久cao香蕉影院| 激情综合5月| 婷婷五月天成人动漫| 香蕉操亚洲| 五月天激情综合网| 五月婷婷福利| 久久人人做人人妻人人玩精品va| 免费黄色视频网址| 99久精品视频| 日韩黄色AV无码| 99热色在线精品| 性按摩玩人妻HD中文字幕| 久久永久网址| 日本色婷婷| 手机在线日韩视频中文字幕| 99色精品| 丁香社92视频| 夜夜操天天爽| 六月婷综合| 色五月激情综合| 丰满老熟妇BBBBB搡BBB| 九九热视频精品2| 人妻人人操| 婷婷激情性爱| www.91操| 玖玖爱伊人| 999婷婷综合| 婷婷久久综| 亚洲成人在线综合| 4399在线观看免费毛片| 人人操AV| 丁香六月激情综合网| 亚洲情欲| 美欧成人视频| 九九人人精品| 欧美精产国品一二三区| 国産精品| 色色丁香| 免费AV播放| 五月天无码视屏播放| 亚洲妇女熟BBW| 26UUU亚洲欧美| 五月婷三级片| 丁香五月六月婷婷殴美综合| 日韩有码一区| 婷婷八月丁香激情综合| 日韩av在线免费观看| 女婷久久| 播五月婷婷开心| 国自产拍偷拍精品啪啪一区二区| 五月丁香激情综合网官网| 屁股翘好撅高迎合跪趴| 狠狠色精品综合| 亚洲AV永久无码影院黑人| 日日操夜夜撸| 九九九九国产| 五月丁香综合| 日韩在线观看亚洲| 激情五月天视频| 99小精品| 亚洲AV日韩在线观看| 人妻啪啪啪| 精品婷婷| 中文字幕丰满孑伦无码专区| 天天做天天爱天天玩夜夜爽| 停停综合色色| 日日.c| 思思热再线视频| 99噜噜噜| 五月激情六月丁香| 色婷婷激情视频| 九热视频精品| 狠狠综合网| 激情九九这里只有精品| 五月久久婷婷天堂视频| 伊人久久艹| 五月天综合图片| 99久在线| 亚洲日韩成人三级av| 婷婷色综合| 新99思思视频| 色色影院黄大片| 五月丁香网站| 五月婷视屏在线观看| AAA久久| 亚洲中文字幕翔田千里| 九色婷婷| 可以直接看的AV网站| 内射综合网| 久久艹 五月天| 婷婷激情九月| 五月婷婷视频ab| 日韩久热| 无码字幕中文| 激情五月五月婷婷| 天天狠狠干| 天天做天天爱天天日| 久久资源综合| 五月天综合网| 深爱五月天| 99热精国产这里只有精品| 9|无码久久久久久| 五月丁香色色色| 日本三级韩三级99久久| 色偷偷五月天| yazhouzonghesese| 五月婷婷综合激情网| 香蕉久久五月| 99精品在线| 五月婷啪啪| 色婷婷六月丁香综合欲精品| 婷婷丁香六月五月天| 免费人人操| 狠狠干五月| 丰满人妻一区二区三区| 五月婷婷丁香五月 | 秋霞少妇毛片| 中文字幕无码人妻少妇免费视频| 99在线视频资源| 五月激情天天干| 丁香五月aV| 天天做天天爱天天搞| 色情五月天。| 丁香五夜激情四射夜夜夜| 香蕉久久av一区二区三区 | 久久黄色网扯| 人妻av在线| 日韩黄色网络| www综合久久| 色婷婷狠狠18yy| 日日躁夜夜躁狠狠久久AV| 婷婷五月激情小说| 五月丁香啪啪激情| 九九热免费视频| 五月丁香免费看| 中文字幕婷婷五月天在线观看| 亚洲视频丁香网va| 日操| 五月天激情综合首页| 国产精品久久..4399| 狠狠爱五月婷婷| 久久久久久久久久久44| 秋霞网在线免费基地五月婷婷丁香| 人妻第九页| 国外亚洲成AV人片在线观看| 亚洲无码99| 亚洲色网址| 九九色热| 久久久久人妻精品| 六月丁香五月天| 激情婷婷| 夜夜干天天操| 99综合| 大香蕉五月天婷婷| 久久伊人大香蕉| 99亚洲精品| 久久精品99国产精品日本| 国产精品久久久久久久久久| 91啪啪| 99精品成人无码A片观看金桔 | 久cao香蕉影院| 丁香婷婷综合影院| 五月天丁香花婷婷| 综合九九久久| 日韩欧美成人片| 色五月天丁香| 国产精品久久99| 91热er| 五月天堂在线| 日日爱699| 婷婷丁香五月网| www,久久久| 99热8| 欧美性猛交99久久久久99按摩| 日韩在线观看网址| 五六月婷婷久久| 久久综合色五月| 五月婷婷综合激情网| 婷婷五月成人色综合| 99热日本精品| 九九热婷婷| 99热婷婷| 激情综合色五月六月婷婷| 中文字幕 久久9999| 人人草开心五月天| WWW99热| 99这里有精品| 9热成人在线视频| 日韩视频女神99| 五月天激情黄色小说在线观看| 性爱在线播放av| 岛国av电影网站| 人人草人人舔| 丁香五月激情综合| 日本44久久在线| 日本WWW九九九| 可以免费看av网站| www激情五月天| 丁香九月婷| 色无婷婷| 久久伦乱| 婷婷综合五月激情| 五月天成人小说| 天天婷婷综合亚洲亚洲| 九九爱激情| 精品成人在线观看| 五月激情婷婷色| 五月婷婷六月激情| 天天日天天操心| 超碰AV成人| 色五月丁香五月五月婷婷| 五月天五月天激情网| 激情综合婷婷| 国产女18毛片多18精品| 久99久视频| 天天爽夜夜爽| 99热在这里只有精品| 精品AV无码超碰| 成人短视频在线| 亚洲人妻五月丁香婷婷| 五月婷婷色色| www99精品亚| 涩涩涩,com| 五月天激情视频| 国产成人精品亚洲线观看| 九九大香蕉黄色影院| 九九热99精品在线| 成人 在线 日韩| 在线日本www| 丁香五月综合久久八| 99性爱| 91九色超碰| 精品国产va久久久久| 五月丁香婷婷导航视频| 超碰99在线观看| 婷婷丁香五月天婷婷| 婷婷金品综合视频| 这里只有精品视频在线| 婷婷婷久久久| 婷婷五月天成人网站| 激情亚洲婷婷六月| 亚洲天堂久久| 啪精品| 激情小说 五月天| 99在线精品观看99| 五月久久婷婷| 婷婷五月天网| 五月精品99综合| 婷五月天在线草| 五月天婷婷激情在线色图| 日韩精品99久久| 亚洲人人操BD| 99国产精品白浆在线观看免费 | 久久精品夜色噜噜亚洲a∨| 色综色五月天婷婷| 99热在线观看| 久久欧洲久久| 久操大香蕉| 丁香五月AV| 五月婷婷在线免费| 第四色色六月色综合| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇| 97色婷| 五月丁香六月婷婷啪啪| 婷婷五月激情图片| 日美三级| 婷婷激情五月天小说校园| 超碰成人公开| 日在线V视频在线播放| 九九黄色网| 丁香六月婷婷综合激情欧美 | 99狠狠色| 91人妻人人操人人爽| 九月色婷婷综合| 成人啪啪色婷婷久| 欧美中文五月天| 综合激情sV| 综合XX网| 夜夜爱伊人| 精品久久久999| 成人精品人妻| 亚洲操精品| 九九色图| 婷婷丁香六月天| 亚洲一色色色色色色色色| www.色婷婷|