From 3990b5ba37db3ee4938b6623239bd19d49401b58 Mon Sep 17 00:00:00 2001 From: anime Date: Thu, 2 Jan 2025 18:21:14 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat(=E6=94=AF=E6=8C=81=E6=9B=B4=E5=8A=A0?= =?UTF-8?q?=E7=AE=80=E5=8D=95=E7=9A=84=E7=9A=84=E7=BC=93=E5=AD=98=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=AF=BB=E5=8F=96=E5=92=8C=E5=86=99=E5=85=A5=E6=96=B9?= =?UTF-8?q?=E5=BC=8F):=20=E5=B0=9D=E8=AF=95=E4=BB=8E=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E4=B8=AD=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=A6=82?= =?UTF-8?q?=E6=9E=9C=E6=B2=A1=E6=9C=89=E5=88=99=E5=B0=9D=E8=AF=95=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=95=B0=E6=8D=AE=E5=B9=B6=E5=86=99=E5=85=A5=E7=BC=93?= =?UTF-8?q?=E5=AD=98=EF=BC=8C=E6=9C=80=E7=BB=88=E8=BF=94=E5=9B=9E=E6=89=80?= =?UTF-8?q?=E9=9C=80=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/cache/cache_manager.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/lib/cache/cache_manager.js b/lib/cache/cache_manager.js index f35a1fe1..88dfb8a4 100644 --- a/lib/cache/cache_manager.js +++ b/lib/cache/cache_manager.js @@ -2,6 +2,40 @@ import BLOG from '@/blog.config' import FileCache from './local_file_cache' import MemoryCache from './memory_cache' +/** + * 尝试从缓存中获取数据,如果没有则尝试获取数据并写入缓存,最终返回所需数据 + * @param key + * @param getDataFunction + * @param getDataArgs + * @returns {Promise<*|null>} + */ +export async function getOrSetDataWithCache(key, getDataFunction, ...getDataArgs) { + return getOrSetDataWithCustomCache(key, null, getDataFunction, ...getDataArgs) +} + + +/** + * 尝试从缓存中获取数据,如果没有则尝试获取数据并自定义写入缓存,最终返回所需数据 + * @param key + * @param customCacheTime + * @param getDataFunction + * @param getDataArgs + * @returns {Promise<*|null>} + */ +export async function getOrSetDataWithCustomCache(key, customCacheTime, getDataFunction, ...getDataArgs) { + const dataFromCache = await getDataFromCache(key) + if (dataFromCache) { + console.log('[缓存-->>API]:', key) + return dataFromCache + } + const data = await getDataFunction(...getDataArgs) + if (data) { + console.log('[API-->>缓存]:', key) + await setDataToCache(key, data, customCacheTime) + } + return data || null +} + /** * 为减少频繁接口请求,notion数据将被缓存 * @param {*} key From 3e1e4b0c1783abb7f4dc66f60ac846dacb15da03 Mon Sep 17 00:00:00 2001 From: anime Date: Thu, 2 Jan 2025 18:31:57 +0800 Subject: [PATCH 2/5] =?UTF-8?q?perf(SiteData=E7=AB=99=E7=82=B9=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=20=E8=BD=AC=E6=8D=A2=E4=BD=BF=E7=94=A8=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E4=BC=98=E5=8C=96):=20=E5=A4=8D=E6=9D=82=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BD=AC=E6=8D=A2=E5=87=BD=E6=95=B0=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=BC=93=E5=AD=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/db/getSiteData.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/db/getSiteData.js b/lib/db/getSiteData.js index f5e926c6..b898c32b 100755 --- a/lib/db/getSiteData.js +++ b/lib/db/getSiteData.js @@ -12,6 +12,7 @@ import { deepClone } from '@/lib/utils' import { idToUuid } from 'notion-utils' import { siteConfig } from '../config' import { extractLangId, extractLangPrefix, getShortId } from '../utils/pageId' +import { getOrSetDataWithCache } from '@/lib/cache/cache_manager' export { getAllTags } from '../notion/getAllTags' export { getPost } from '../notion/getNotionPost' @@ -66,13 +67,13 @@ export async function getGlobalData({ export async function getSiteDataByPageId({ pageId, from }) { // 获取NOTION原始数据,此接支持mem缓存。 const pageRecordMap = await getPage(pageId, from) - // 将Notion数据按规则转成站点数据 - const data = await converNotionToSiteDate( + return await getOrSetDataWithCache( + `site_data_${pageId}`, + converNotionToSiteDate, pageId, from, deepClone(pageRecordMap) ) - return data } /** @@ -264,11 +265,12 @@ async function converNotionToSiteDate(pageId, from, pageRecordMap) { categoryOptions: getCategoryOptions(schema) }) // 所有标签 - const tagOptions = getAllTags({ - allPages, - tagOptions: getTagOptions(schema), - NOTION_CONFIG - }) + const tagOptions = + getAllTags({ + allPages, + tagOptions: getTagOptions(schema), + NOTION_CONFIG + }) || null // 旧的菜单 const customNav = getCustomNav({ allPages: collectionData.filter( From 2766cb8d3b26dc162fbb19642a425171f6d7abb0 Mon Sep 17 00:00:00 2001 From: anime Date: Thu, 2 Jan 2025 18:36:14 +0800 Subject: [PATCH 3/5] =?UTF-8?q?perf(PostBlocks=20=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=BC=93=E5=AD=98=E4=BC=98=E5=8C=96):=20?= =?UTF-8?q?=E5=A4=8D=E6=9D=82=E7=9A=84=E6=95=B0=E6=8D=AE=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=BD=BF=E7=94=A8=E7=BC=93=E5=AD=98=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/notion/getPostBlocks.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/notion/getPostBlocks.js b/lib/notion/getPostBlocks.js index d5896ddc..0ab2270c 100644 --- a/lib/notion/getPostBlocks.js +++ b/lib/notion/getPostBlocks.js @@ -1,6 +1,9 @@ import BLOG from '@/blog.config' -import { getDataFromCache, setDataToCache } from '@/lib/cache/cache_manager' -import { NotionAPI } from 'notion-client' +import { + getDataFromCache, + getOrSetDataWithCache, + setDataToCache +} from '@/lib/cache/cache_manager' import { deepClone, delay } from '../utils' import getNotionAPI from '@/lib/notion/getNotionAPI' @@ -16,7 +19,13 @@ export async function getPage(id, from = null, slice) { let pageBlock = await getDataFromCache(cacheKey) if (pageBlock) { // console.debug('[API<<--缓存]', `from:${from}`, cacheKey) - return convertNotionBlocksToPost(id, pageBlock, slice) + return await getOrSetDataWithCache( + `page_converted_block_${id}_${slice}`, + convertNotionBlocksToPost, + id, + pageBlock, + slice + ) } // 抓取最新数据 @@ -24,7 +33,13 @@ export async function getPage(id, from = null, slice) { if (pageBlock) { await setDataToCache(cacheKey, pageBlock) - return convertNotionBlocksToPost(id, pageBlock, slice) + return await getOrSetDataWithCache( + `page_converted_block_${id}_${slice}`, + convertNotionBlocksToPost, + id, + pageBlock, + slice + ) } return pageBlock } From b563744e2404ac3103cdc1c6b69d3b8c0fc38126 Mon Sep 17 00:00:00 2001 From: anime Date: Thu, 2 Jan 2025 20:45:18 +0800 Subject: [PATCH 4/5] =?UTF-8?q?perf(=E4=BD=BF=E7=94=A8=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E4=BC=98=E5=8C=96):=20=E5=A4=8D=E6=9D=82=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=BD=AC=E6=8D=A2=E5=87=BD=E6=95=B0=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/db/getSiteData.js | 9 ++++--- lib/notion/getPostBlocks.js | 51 +++++++++++++++---------------------- 2 files changed, 26 insertions(+), 34 deletions(-) diff --git a/lib/db/getSiteData.js b/lib/db/getSiteData.js index b898c32b..5dfd9717 100755 --- a/lib/db/getSiteData.js +++ b/lib/db/getSiteData.js @@ -66,13 +66,14 @@ export async function getGlobalData({ */ export async function getSiteDataByPageId({ pageId, from }) { // 获取NOTION原始数据,此接支持mem缓存。 - const pageRecordMap = await getPage(pageId, from) return await getOrSetDataWithCache( `site_data_${pageId}`, - converNotionToSiteDate, + async (pageId, from) => { + const pageRecordMap = await getPage(pageId, from) + return converNotionToSiteDate(pageId, from, deepClone(pageRecordMap)) + }, pageId, - from, - deepClone(pageRecordMap) + from ) } diff --git a/lib/notion/getPostBlocks.js b/lib/notion/getPostBlocks.js index 0ab2270c..9cd03345 100644 --- a/lib/notion/getPostBlocks.js +++ b/lib/notion/getPostBlocks.js @@ -1,9 +1,5 @@ import BLOG from '@/blog.config' -import { - getDataFromCache, - getOrSetDataWithCache, - setDataToCache -} from '@/lib/cache/cache_manager' +import { getDataFromCache, getOrSetDataWithCache, setDataToCache } from '@/lib/cache/cache_manager' import { deepClone, delay } from '../utils' import getNotionAPI from '@/lib/notion/getNotionAPI' @@ -15,33 +11,28 @@ import getNotionAPI from '@/lib/notion/getNotionAPI' * @returns */ export async function getPage(id, from = null, slice) { - const cacheKey = `page_block_${id}` - let pageBlock = await getDataFromCache(cacheKey) - if (pageBlock) { - // console.debug('[API<<--缓存]', `from:${from}`, cacheKey) - return await getOrSetDataWithCache( - `page_converted_block_${id}_${slice}`, - convertNotionBlocksToPost, - id, - pageBlock, - slice - ) - } + return await getOrSetDataWithCache( + `page_content_${id}_${slice}`, + async (id, slice) => { + const cacheKey = `page_block_${id}` + let pageBlock = await getDataFromCache(cacheKey) + if (pageBlock) { + // console.debug('[API<<--缓存]', `from:${from}`, cacheKey) + return convertNotionBlocksToPost(id, pageBlock, slice) + } - // 抓取最新数据 - pageBlock = await getPageWithRetry(id, from) + // 抓取最新数据 + pageBlock = await getPageWithRetry(id, from) - if (pageBlock) { - await setDataToCache(cacheKey, pageBlock) - return await getOrSetDataWithCache( - `page_converted_block_${id}_${slice}`, - convertNotionBlocksToPost, - id, - pageBlock, - slice - ) - } - return pageBlock + if (pageBlock) { + await setDataToCache(cacheKey, pageBlock) + return convertNotionBlocksToPost(id, pageBlock, slice) + } + return pageBlock + }, + id, + slice + ) } /** From 5ae4680e4684998a5a3242ca7dadedefbc1e6221 Mon Sep 17 00:00:00 2001 From: anime Date: Thu, 2 Jan 2025 20:46:35 +0800 Subject: [PATCH 5/5] =?UTF-8?q?refactor(=E4=BF=AE=E5=A4=8D=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E7=9A=84=E5=87=BD=E6=95=B0=E5=91=BD=E5=90=8D):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/db/getSiteData.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/db/getSiteData.js b/lib/db/getSiteData.js index 5dfd9717..4abdb144 100755 --- a/lib/db/getSiteData.js +++ b/lib/db/getSiteData.js @@ -70,7 +70,7 @@ export async function getSiteDataByPageId({ pageId, from }) { `site_data_${pageId}`, async (pageId, from) => { const pageRecordMap = await getPage(pageId, from) - return converNotionToSiteDate(pageId, from, deepClone(pageRecordMap)) + return convertNotionToSiteDate(pageId, from, deepClone(pageRecordMap)) }, pageId, from @@ -141,7 +141,7 @@ const EmptyData = pageId => { * 这里统一对数据格式化 * @returns {Promise} */ -async function converNotionToSiteDate(pageId, from, pageRecordMap) { +async function convertNotionToSiteDate(pageId, from, pageRecordMap) { if (!pageRecordMap) { console.error('can`t get Notion Data ; Which id is: ', pageId) return {}