[16章]SpringBoot2 仿B站高性能前端+后端项目(2023新版)

赵颜
• 阅读 213

资料地址1:https://pan.baidu.com/s/1cxQDKIi7iu1mGmjRr9a0Mw 提取码:tz5s 资料地址2:https://pan.baidu.com/s/1DjmuC6Id4oUC_NVbxfgcMg 提取码:qtf3

今天给大家讲讲关于SpringBoot2 仿B站的一个项目,大家都知道,如今短视频成为了风口中的风口,但市场上极度缺乏视频业务开发的相关技术人才。本文将结合SpringCloud微服务架构+Springboot+JDK+Maven+VUE等技术,实现B站核心功能(视频流、弹幕流)+百万量级的高性能优化,从而帮助大家提升前端加后端技术水平,掌握架构设计思维及丰富解决方案。

实现步骤 使用 Vue3 提供的 Provide/Inject 组合,通过 provide 在App.vue中提供当前语言环境localeLanguage,代码片段如下所示: // App.vue

然后再通过 inject 将其注入到 home 页面,将获取到的 localeLanguage 传入自定义的 t 函数中,代码片段如下所示: // home/index.vue

封装一个openStore(),使用indexedDB.open()方法返回一个 IDBRequest对象,接着将这个对象上的三个事件分别放置进入:onsuccess、onerror、onupgradeneeded。

onsuccess表示打开数据库成功的事件。 onerror表示打开数据库失败的事件。 onupgradeneeded是数据库升级事件,如果版本号更新,并且大于之前的版本号则进行数据库升级,该事件回调里面,会创建我们所需要的对象仓库,类似于关系型数据库中的表的概念。 export default class DB { private dbName: string // 数据库名称 constructor(dbName: string) { this.dbName = dbName }

// 打开数据库 public openStore(storeName: string, keyPath: string, indexs?: Array) { const request = window.indexedDB.open(this.dbName, 2) request.onsuccess = (event) => { console.log('数据库打开成功') console.log(event) } request.onerror = (event) => { console.log('数据库打开失败') console.log(event) } request.onupgradeneeded = (event) => { console.log('数据库升级成功') const { result }: any = event.target const store = result.createObjectStore(storeName, { autoIncrement: true, keyPath }) if (indexs && indexs.length > 0) { indexs.map((v: string) => { store.createIndex(v, v, { unique: true }) }) } store.transaction.oncomplete = (event: any) => { console.log('创建对象仓库成功') } console.log(event) } } }

Promise包装异步事务 为了更好的获取indexedD事务中的返回结果,我们使用promise来包装一下上一小节indexedDB.ts中定义的几个方法:openStore、updateItem、deleteItem、getList、getItem。下面代码片段为getList() // 查询所有数据 getList(storeName: string) { const store = this.db.transaction(storeName).objectStore(storeName) const request = store.getAll() return new Promise((resolve, reject) => { request.onsuccess = (event: any) => { console.log('查询所有数据成功') console.log(event.target.result) resolve(event.target.result) } request.onerror = (event: any) => { console.log('查询所有数据失败') console.log(event) reject(event) } }) } 使用@include 指令来引入定义好的样式函数,该函数的三个参数可以根据传入的值来对 flex布局进行自定义,默认值为:column、center、right,在 footerCommon.scss中我们重新自定义了该样式函数,分别传入 row、space-between、flex-start,代码片段如下: // footerCommon.scss .common-footer{ border-top: 1px solid rgb(235, 235, 235); .footer{ @include main-wrapper; @include layout(row,space-between,flex-start); padding: 20px 0; li{ @include layout; h4{ font-weight: bold; } a{ margin-bottom: 10px; color: rgb(72, 72, 72); text-decoration: none; &:hover{ text-decoration:underline; } } } } } getter 类似与 Vue 中的 computed 计算属性,它的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算

getters 里可以处理一些 array、object 的查询、过滤、遍历、重构或者做一些字符拼接的操作,方便直接生成一些可以直接使用的数据。如下代码片段展示了如何在getter中进行过滤查询: export const store = createStore({
state:{
todos:[ // 定义一个对象数组
{
id: 1,
done: true
},
{
id: 2,
done: false
}
]
}
getters: {
doneTodosCount () { // 查询已完成的个数
return store.state.todos.filter(todo => todo.done).length // 返回值:1
}
}
}) 通过环境变量区分 server.js中的一些代码片段,因为有些代码需要运行在开发环境,而有些代码需要运行在生产环境。本小节在 server.js中一共对3个地方进行了环境区分,代码片段如下 // server.js if (!isProd) { // 1. 读取 index.html template = fs.readFileSync( path.resolve(__dirname, 'index.html'), 'utf-8' )

// 2. 应用 Vite HTML 转换。这将会注入 Vite HMR 客户端, // 同时也会从 Vite 插件应用 HTML 转换。 // 例如:@vitejs/plugin-react-refresh 中的 global preambles template = await vite.transformIndexHtml(url, template)

// 3. 加载服务器入口。vite.ssrLoadModule 将自动转换 // 你的 ESM 源码使之可以在 Node.js 中运行!无需打包 // 并提供类似 HMR 的根据情况随时失效。 render = (await vite.ssrLoadModule('/src/entry-server.ts')).render } else { // 1. 读取 index.html template = fs.readFileSync( path.resolve(__dirname, 'dist/client/index.html'), 'utf-8' ) // 3. 加载服务器入口 render = require('./dist/server/entry-server.ts').render }

点赞
收藏
评论区
推荐文章
赵颜 赵颜
5个月前
[完结13章,附电子书]高性能多级网关与多级缓存架构落地实战
资料地址1:https://pan.baidu.com/s/1bSdBzBeMXX3MTX29TJlM8Q提取码:taht资料地址2:https://share.weiyun.com/SNltUNLW密码:zi3dc7今天给大家讲讲关于多级网关与多级缓存架
赵颜 赵颜
5个月前
[15章]深入学习小程序框架底层原理,培养双线程思维
学习地址1:https://pan.baidu.com/s/1ridzu0mrj1vrfT07fdReuw提取码:3zd2学习地址2:https://pan.baidu.com/s/1SChnJCGf03sybLfyAnkCA提取码:c862前端高手特训从
荀勗 荀勗
5个月前
[15章]深入学习小程序框架底层原理,培养双线程思维
资料地址1:https://pan.baidu.com/s/1enXgRjk9LndH6X1t2vyOzQ提取码:id17资料地址2:https://pan.baidu.com/s/1SChnJCGf03sybLfyAnkCA提取码:c862前端高手特训从
赵嬷嬷 赵嬷嬷
4个月前
[16章]慕课甄选-2024年Flutter零基础极速入门到进阶实战
学习地址1:https://pan.baidu.com/s/1iOH2xMvdMyBAJla5PeHuUg提取码:hjhi学习地址2:https://pan.baidu.com/s/1Iwj10AL7jdum19WQz1jdA提取码:0n8xFlutter
双寿 双寿
4个月前
慕课甄选-2024年Flutter零基础极速入门到进阶实战[16章]
参考资料地址1:https://pan.baidu.com/s/1j35W30a7JQAGTV2rYgxRNA提取码:5o3h参考资料地址2:https://pan.baidu.com/s/1Iwj10AL7jdum19WQz1jdA提取码:0n8xFlu
赵嬷嬷 赵嬷嬷
3个月前
[31周]AI人工智能算法工程师体系课2024
学习地址1:https://pan.baidu.com/s/1wpfuPvDb4Y4BQEKPt7bc1A提取码:q7xz学习地址2:https://pan.baidu.com/s/1CYzDHRmYKDPb29MfKN0qlg提取码:2jt4今天给大家讲
鲍二家的 鲍二家的
2个月前
AI Agent智能应用从0到1定制开发(12章)
学习地址1:https://pan.baidu.com/s/1ccnoXsPCUg4eP5rSrD0UA提取码:o0mu学习地址2:https://pan.baidu.com/s/1JYJ6dMkwgx0XWQnCM6Q0A提取码:2m68AIAgent已
吉太 吉太
2个月前
AI Agent智能应用从0到1定制开发[12章]
下载地址1:https://pan.baidu.com/s/15IbktHy54IdZRg3g7PWWKQ提取码:v7lt下载地址2:https://pan.baidu.com/s/1itYcy6EHYLRZSvj2D5e00A提取码:9jdp一、那为啥最
吉太 吉太
2个月前
新版React18+Next.js14+Nest.js全栈开发复杂低代码项目[21章]
资料地址1:https://pan.baidu.com/s/1CpBiE0X4vq9dAoZZCow0bw提取码:wwq9资料地址2:https://share.weiyun.com/vXd3qr0O密码:bcrymy2024版,React18Nest.
双寿 双寿
1个月前
音视频高手突围课--WebRTC企业级高性能后台服务实战(15章)
参考资料1:https://pan.baidu.com/s/1b4kcRMN6FHoHYCl3lJwrAw提取码:hgt6参考资料2:https://pan.baidu.com/s/1VrKcjKdz0qmVlufrwBtsQ提取码:tylx一、什么是We