Update 4 files

- /_layouts/default.html
- /_layouts/post.html
- /_posts/2024-10-01-suggest.md
- /js/main.js
This commit is contained in:
mayx 2024-10-04 07:13:10 +00:00
parent 443d65ac50
commit 38c549606e
4 changed files with 38 additions and 22 deletions

View File

@ -27,6 +27,7 @@
gtag('config', '{{ site.google_analytics }}'); gtag('config', '{{ site.google_analytics }}');
var lastUpdated = new Date("{{ site.time | date: "%FT%T%z" }}"); var lastUpdated = new Date("{{ site.time | date: "%FT%T%z" }}");
var BlogAPI = "https://summary.mayx.eu.org";
function getSearchJSON(callback) { function getSearchJSON(callback) {
var searchData = JSON.parse(localStorage.getItem("blog_" + lastUpdated.valueOf())); var searchData = JSON.parse(localStorage.getItem("blog_" + lastUpdated.valueOf()));
if (!searchData) { if (!searchData) {

View File

@ -44,15 +44,15 @@ layout: default
var postContent = "文章标题:" + {{ page.title | jsonify }} + ";文章内容:" + {{ page.content | strip_html | strip_newlines | jsonify }}; var postContent = "文章标题:" + {{ page.title | jsonify }} + ";文章内容:" + {{ page.content | strip_html | strip_newlines | jsonify }};
var postContentSign = await sha(postContent); var postContentSign = await sha(postContent);
var outputContainer = document.getElementById("ai-output"); var outputContainer = document.getElementById("ai-output");
$.get("https://summary.mayx.eu.org/is_uploaded?id={{ page.url }}&sign=" + postContentSign, function (data) { $.get(BlogAPI + "/is_uploaded?id={{ page.url }}&sign=" + postContentSign, function (data) {
if (data == "yes") { if (data == "yes") {
$.get("https://summary.mayx.eu.org/get_summary?id={{ page.url }}&sign=" + postContentSign, function (data2) { $.get(BlogAPI + "/get_summary?id={{ page.url }}&sign=" + postContentSign, function (data2) {
outputContainer.textContent = data2; outputContainer.textContent = data2;
}); });
} else { } else {
$.post("https://summary.mayx.eu.org/upload_blog?id={{ page.url }}", postContent, function (data) { $.post(BlogAPI + "/upload_blog?id={{ page.url }}", postContent, function (data) {
$.get("https://summary.mayx.eu.org/get_summary?id={{ page.url }}&sign=" + postContentSign); $.get(BlogAPI + "/get_summary?id={{ page.url }}&sign=" + postContentSign);
const evSource = new EventSource("https://summary.mayx.eu.org/summary?id={{ page.url }}"); const evSource = new EventSource(BlogAPI + "/summary?id={{ page.url }}");
outputContainer.textContent = ""; outputContainer.textContent = "";
evSource.onmessage = (event) => { evSource.onmessage = (event) => {
if (event.data == "[DONE]") { if (event.data == "[DONE]") {

View File

@ -11,22 +11,38 @@ tags: [Cloudflare, Workers, Vectorize, 博客]
# 制作过程 # 制作过程
## 后端部分 ## 后端部分
其实流程很简单就是把对应ID的向量查出来之后拿着这个向量再去查询就好了唯一需要注意的就是它查出来的第一条肯定是自己所以只要把第一条删掉就行代码也非常简单 其实流程很简单就是把对应ID的向量查出来之后拿着这个向量再去查询就好了唯一需要注意的就是它查出来的第一条肯定是自己所以只要把第一条删掉就行 ~~代码也非常简单~~ (后来又加了缓存稍微变的复杂了😂)
```javascript ```javascript
if (url.pathname.startsWith("/suggest")) { if (url.pathname.startsWith("/suggest")) {
let resp = []; let resp = [];
let result = await env.mayx_index.getByIds([ let update_time = url.searchParams.get('update');
query if (update_time) {
]); let result = await env.mayx_index.getByIds([
if (result.length) { query
resp = await env.mayx_index.query(result[0].values, { topK: 6 }); ]);
resp = resp.matches; if (result.length) {
resp.splice(0, 1); let cache = await db.prepare("SELECT `id`, `suggest`, `suggest_update` FROM `blog_summary` WHERE `id` = ?1")
.bind(query).first();
if (!cache.id) {
return Response.json(resp, {
headers: commonHeader
});
}
if (update_time != cache.suggest_update) {
resp = await env.mayx_index.query(result[0].values, { topK: 6 });
resp = resp.matches;
resp.splice(0, 1);
await db.prepare("UPDATE `blog_summary` SET `suggest_update` = ?1, `suggest` = ?2 WHERE `id` = ?3")
.bind(update_time, JSON.stringify(resp), query).run();
} else {
resp = JSON.parse(cache.suggest);
}
}
resp = resp.map(respObj => {
respObj.id = encodeURI(respObj.id);
return respObj;
});
} }
resp = resp.map(respObj => {
respObj.id = encodeURI(respObj.id);
return respObj;
});
return Response.json(resp, { return Response.json(resp, {
headers: commonHeader headers: commonHeader
}); });
@ -37,11 +53,11 @@ if (url.pathname.startsWith("/suggest")) {
我还想到一个办法,我之前[给博客做过全文搜索的功能](/2021/07/23/search.html)用这个JS关联查询就能查到标题而且查不到的内容也显示不出来这样就能避免有人故意乱上传导致显示奇怪的内容了不过之前的设计是每次查询都要加载一次包含我文章内容的JSON文件感觉不太合理虽然那个文件不算特别大但是也挺影响速度的所以我想了一下还是用localStorage缓存一下比较好所以增加了一个能缓存获取搜索JSON的函数 我还想到一个办法,我之前[给博客做过全文搜索的功能](/2021/07/23/search.html)用这个JS关联查询就能查到标题而且查不到的内容也显示不出来这样就能避免有人故意乱上传导致显示奇怪的内容了不过之前的设计是每次查询都要加载一次包含我文章内容的JSON文件感觉不太合理虽然那个文件不算特别大但是也挺影响速度的所以我想了一下还是用localStorage缓存一下比较好所以增加了一个能缓存获取搜索JSON的函数
```javascript ```javascript
function getSearchJSON(callback) { function getSearchJSON(callback) {
var searchData = JSON.parse(localStorage.getItem(lastUpdated)); var searchData = JSON.parse(localStorage.getItem("blog_" + lastUpdated.valueOf()));
if (!searchData) { if (!searchData) {
localStorage.clear(); localStorage.clear();
$.getJSON("/search.json", function (data) { $.getJSON("/search.json", function (data) {
localStorage.setItem(lastUpdated, JSON.stringify(data)); localStorage.setItem("blog_" + lastUpdated.valueOf(), JSON.stringify(data));
callback(data); callback(data);
}); });
} else { } else {
@ -49,12 +65,12 @@ function getSearchJSON(callback) {
} }
} }
``` ```
做好这个之后就可以做文章推荐的功能了不过文章推荐应不应该加载完页面就加载呢其实我测了一下Vectorize数据库的查询速度不算很慢但还是需要时间另外免费版我看了下额度是每月3000万个查询的向量维度这个其实我没看太懂😂。另外Cloudflare不知道为什么没有展示免费版剩余的额度而且它是按月计算的导致我不敢乱用这个查询。 ~~所以我想了一下还是给个按钮来调用吧~~ (后来想了一下干脆直接调用然后加个缓存吧,毕竟我文章不变推荐也不会变)。最终调用的函数如下: 做好这个之后就可以做文章推荐的功能了不过文章推荐应不应该加载完页面就加载呢其实我测了一下Vectorize数据库的查询速度不算很慢但还是需要时间另外免费版我看了下额度是每月3000万个查询的向量维度这个其实我没看太懂😂。另外Cloudflare不知道为什么没有展示免费版剩余的额度而且它是按月计算的导致我不敢乱用这个查询。 ~~所以我想了一下还是给个按钮来调用吧~~ (后来想了一下干脆直接调用然后加个缓存吧,毕竟我文章不变推荐内容也不会变)。最终调用的函数如下:
```javascript ```javascript
function getSuggestBlog(blogurl) { function getSuggestBlog(blogurl) {
var suggest = $("#suggest-container")[0]; var suggest = $("#suggest-container")[0];
suggest.innerHTML = "Loading..."; suggest.innerHTML = "Loading...";
$.get(BlogAPI + "/suggest?id=" + blogurl, function (data) { $.get(BlogAPI + "/suggest?id=" + blogurl + "&update=" + lastUpdated.valueOf(), function (data) {
if (data.length) { if (data.length) {
getSearchJSON(function (search) { getSearchJSON(function (search) {
suggest.innerHTML = '<b>推荐文章</b><hr style="margin: 0 0 5px"/>'; suggest.innerHTML = '<b>推荐文章</b><hr style="margin: 0 0 5px"/>';

View File

@ -1,4 +1,3 @@
var BlogAPI = "https://summary.mayx.eu.org";
(function () { (function () {
var $backToTopTxt = "返回顶部", $backToTopEle = $('<div class="backToTop"></div>').appendTo($("body")) var $backToTopTxt = "返回顶部", $backToTopEle = $('<div class="backToTop"></div>').appendTo($("body"))
.text($backToTopTxt).attr("title", $backToTopTxt).click(function () { .text($backToTopTxt).attr("title", $backToTopTxt).click(function () {