当前位置: 首页 > news >正文

缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界

在这里插入图片描述

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • 一、引言
    • 介绍 keep-alive 的概念和作用
  • 二、keep-alive 的工作原理
    • 解释 keep-alive 的实现方式
    • 探讨 keep-alive 与生命周期函数的关系
  • 三、keep-alive 的应用场景
    • 缓存页面状态,提高页面切换性能
    • 保留用户信息,实现登录状态持久化
  • 四、keep-alive 的使用技巧
    • 合理配置 include/exclude 属性
    • 结合路由懒加载优化页面性能
  • 五、keep-alive 的注意事项
    • 避免内存泄漏
    • 处理动态组件和异步内容
  • 六、总结
    • 总结 keep-alive 的优势和局限性

一、引言

介绍 keep-alive 的概念和作用

keep-alive 是 Vue.js 中的一个组件属性,用于缓存组件的状态和实例,以便在页面重新渲染时能够保留它们。

当一个组件被设置了 keep-alive 属性时,它的实例会被保存在内存中,而不是被销毁。这样,当用户在页面中导航到其他路由时,该组件的状态会被保留下来,下次再访问该路由时,组件会直接从缓存中恢复,而无需重新创建实例和初始化状态

通过使用 keep-alive,我们可以在页面中缓存一些需要频繁使用或需要在多个页面之间共享的组件,从而提高页面的切换性能和用户体验。例如

  • 在一个电商应用中,我们可以使用 keep-alive 缓存购物车组件的状态,以便用户在不同页面之间切换时能够保持购物车中的商品信息。
  • 在有分页的列表数据中,在第二页点击某一个数据项进去详情的时候,返回之后还是在第二页。

二、keep-alive 的工作原理

解释 keep-alive 的实现方式

keep-alive 的实现方式主要涉及:

在这里插入图片描述

  • Vue.js 的组件生命周期
  • 虚拟 DOM 渲染机制

当一个组件被设置了 keep-alive 属性时,Vue.js 会在该组件的实例被创建后,将其保存在一个缓存池中。当用户导航到其他路由时,该组件的实例并不会被销毁,而是被保存在缓存池中。

当用户再次导航到该路由时,Vue.js 会首先检查缓存池中是否存在该组件的实例。如果存在,它会直接从缓存池中恢复该实例,并使用该实例的虚拟 DOM 来更新页面的实际 DOM。这样就避免了重新创建实例和初始化状态的过程,从而提高了页面的切换性能。

如果缓存池中不存在该组件的实例,Vue.js 会创建一个新的实例,并将其保存在缓存池中,以便下次再访问该路由时能够直接恢复。

需要注意的是,keep-alive 只缓存组件的实例和状态,而不会缓存组件的模板和样式。因此,如果在不同的页面中使用了同一个组件,并且需要在不同页面中显示不同的内容和样式,需要在组件中根据当前的路由参数或其他状态来动态渲染内容和样式。

探讨 keep-alive 与生命周期函数的关系

keep-alive 与生命周期函数的关系主要涉及到 Vue.js 的组件生命周期。

在 Vue.js 中,每个组件都有自己的生命周期函数,包括 created、mounted、updated、destroyed 等。这些生命周期函数在组件的不同阶段被调用,用于执行一些特定的操作。

当一个组件被设置了 keep-alive 属性时,它的实例并不会被销毁,而是被保存在缓存池中。因此,当用户导航到其他路由时,该组件的实例仍然存在,并且它的生命周期函数也仍然会被调用。

具体来说,当用户导航到其他路由时,被设置了 keep-alive 属性的组件会经历以下生命周期函数:

  1. mounted:该生命周期函数会在组件被首次渲染到页面上时被调用。如果该组件被设置了 keep-alive 属性,并且用户导航到其他路由后再次回到该路由,该生命周期函数仍然会被调用。
  2. Updated:该生命周期函数会在组件的状态或数据发生变化时被调用。如果该组件被设置了 keep-alive 属性,并且用户导航到其他路由后再次回到该路由,该生命周期函数仍然会被调用。

需要注意的是,被设置了 keep-alive 属性的组件不会经历 destroyed 生命周期函数,因为它们的实例并没有被销毁。如果需要在组件被移除时执行一些清理操作,可以在 beforeDestroy 生命周期函数中进行处理。

三、keep-alive 的应用场景

缓存页面状态,提高页面切换性能

以下是一个使用 keep-alive 缓存页面状态的简单案例:

<template><div><keep-alive><component :is="currentView"></component></keep-alive></div>
</template><script>
export default {name: 'App',data() {return {currentView: 'Home',}},
}
</script><style scoped>
/* 在此处添加样式 */
</style>

在这个例子中,我们使用了一个 keep-alive 元素来缓存一个组件。在 data 中,我们定义了一个名为 currentView 的变量,用于存储当前显示的组件名称。

在这个例子中,我们只缓存了一个组件。实际上,我们可以根据需要缓存多个组件,并根据当前的路由或其他状态来动态切换显示的组件。

需要注意的是,使用 keep-alive 缓存组件状态可能会带来一些内存泄漏的问题。因此,在实际应用中,需要根据具体的业务需求和性能要求来权衡是否使用 keep-alive 以及如何使用。

保留用户信息,实现登录状态持久化

以下是一个使用 keep-alive 保留用户信息,实现登录状态持久化的简单案例:

<template><div><keep-alive><router-view v-if="user"></router-view><login v-else /></keep-alive></div>
</template><script>
import Login from './Login.vue'
import router from './router'export default {name: 'App',data() {return {user: null,}},created() {if (localStorage.getItem('user')) {this.user = JSON.parse(localStorage.getItem('user'))}},methods: {logout() {localStorage.removeItem('user')this.user = null},},
}
</script><style scoped>
/* 在此处添加样式 */
</style>

在这个例子中,我们使用了一个 keep-alive 元素来缓存一个 router-view 组件。如果 user 存在,则显示 router-view 组件,否则显示 login 组件。

created 生命周期函数中,我们从本地存储中获取用户信息,并将其解析为对象。如果用户信息存在,则将其存储在 user 变量中。

logout 方法中,我们从本地存储中删除用户信息,并将 user 变量设为 null

需要注意的是,在实际应用中,我们需要根据具体的业务需求和安全性要求来处理用户信息的存储和访问。同时,我们还需要考虑用户信息的加密和安全性问题,以避免信息泄露和安全漏洞。

四、keep-alive 的使用技巧

合理配置 include/exclude 属性

合理配置 includeexclude 属性的方法如下:

  1. include 属性:指定要缓存的组件名称或正则表达式。只有匹配指定规则的组件才会被缓存。可以使用逗号分隔多个规则,也可以使用正则表达式来匹配多个组件。

  2. exclude 属性:指定不需要缓存的组件名称或正则表达式。与 include 属性相反,匹配指定规则的组件将不会被缓存。

  3. 合理选择缓存的组件:根据应用程序的需求,选择需要缓存的组件。通常情况下,缓存频繁访问的组件,如首页、导航栏等,可以提高用户体验和性能。

  4. 避免过度缓存:过度缓存可能会导致内存泄漏和性能问题。因此,只缓存必要的组件,避免缓存不需要的组件。

  5. 使用动态配置:根据不同的应用场景和用户需求,动态配置 includeexclude 属性。例如,根据用户的登录状态或访问的页面,动态调整需要缓存的组件。

  6. 注意正则表达式的使用:正则表达式可以用于更灵活地匹配组件名称。但是,使用正则表达式时要注意其复杂性和性能影响,避免过度使用。

  7. 测试和调试:在配置 includeexclude 属性时,进行充分的测试和调试,确保缓存的正确性和性能提升。

在这里插入图片描述

通过合理配置 includeexclude 属性,可以有效地利用 keep-alive 提高应用程序的性能和用户体验。

结合路由懒加载优化页面性能

结合路由懒加载和 keep-alive 可以进一步优化页面性能。路由懒加载是一种在需要时才加载路由对应的组件的技术,避免了在初始化时加载所有的组件,从而减少了初始加载时间。

以下是结合路由懒加载和 keep-alive 优化页面性能的步骤:

  1. 在路由配置中使用懒加载:在 Vue.js 中,可以使用 import() 函数在路由配置中懒加载组件。例如:
const routes = [{path: '/home',component: () => import('../views/Home.vue'),},{path: '/about',component: () => import('../views/About.vue'),},// 其他路由配置
]
  1. Home.vueAbout.vue 等组件中使用 keep-alive:在需要缓存的组件中添加 keep-alive 元素。例如:
<template><keep-alive><router-view v-if="routerView"></router-view></keep-alive>
</template>
  1. Home.vueAbout.vue 等组件中设置 name 属性:为了让 keep-alive 能够正确地缓存和恢复组件状态,需要为每个需要缓存的组件设置一个唯一的 name 属性。例如:
<template><keep-alive name="home"><router-view v-if="routerView"></router-view></keep-alive>
</template>
  1. router-view 中使用 name 属性:在 router-view 中使用对应的 name 属性来指定要缓存的组件。例如:
<router-view name="home"></router-view>

通过结合路由懒加载和 keep-alive,可以在需要时才加载路由对应的组件,并通过缓存来提高页面的性能和用户体验。这样可以避免在初始化时加载所有的组件,减少了初始加载时间,并且在用户导航到已访问过的页面时,可以直接从缓存中恢复组件状态,提高了页面的响应速度。

五、keep-alive 的注意事项

避免内存泄漏

使用 keep-alive 时需要注意避免内存泄漏。以下是一些避免内存泄漏的注意事项:

  1. 正确使用 includeexclude 属性:在使用 keep-alive 时,确保正确配置 includeexclude 属性,以避免缓存不需要的组件。只缓存需要保留状态的组件,避免缓存不需要的组件导致内存泄漏。

  2. 使用动态配置:根据不同的应用场景和用户需求,动态配置 includeexclude 属性。例如,根据用户的登录状态或访问的页面,动态调整需要缓存的组件。

  3. 及时清理缓存:当不再需要缓存某个组件时,及时清理缓存。可以使用 v-ifv-show 等指令来控制 keep-alive 的显示和隐藏,以释放不需要的缓存。

  4. 避免在 keep-alive 中使用大量状态:尽量减少在 keep-alive 中保存的状态量。如果需要保存大量状态,可以考虑使用其他方式,如 Vuex 等状态管理库。

  5. 注意生命周期函数的使用:在 keep-alive 中使用生命周期函数时,需要注意它们的执行顺序和作用范围。例如,在 activated 生命周期函数中初始化状态,在 deactivated 生命周期函数中清理状态。

通过注意以上事项,可以有效避免内存泄漏,提高应用程序的性能和稳定性。在使用 keep-alive 时,要根据具体的应用场景和需求合理配置,以确保缓存的正确性和性能提升。

处理动态组件和异步内容

动态组件和异步内容是指在 Vue 应用程序中使用的一些特殊情况。

  1. 动态组件:动态组件是指根据某些条件或状态动态地加载和切换组件的技术。在 Vue 中,可以使用<component>标签或v-bind:is指令来动态渲染组件。动态组件通常用于根据用户的操作、数据的变化或其他动态条件来加载不同的组件。

  2. 异步内容:异步内容是指在需要时才加载的内容,例如异步加载的组件、数据或图片等。异步内容通常在初始渲染时不会立即显示,而是在需要时才进行加载和显示。在 Vue 中,可以使用<template>标签和v-ifv-show指令来处理异步内容的显示和隐藏。

通过正确处理动态组件和异步内容,可以避免不必要的缓存和内存泄漏,提高应用程序的性能和用户体验。在使用keep-alive处理动态组件和异步内容时,要根据具体的应用场景和需求合理配置,以确保缓存的正确性和性能提升。

在使用 keep-alive 处理动态组件和异步内容时,需要注意以下几点:

  1. 动态组件的缓存:如果在 keep-alive 中使用动态组件,需要确保动态组件的缓存正确。可以使用 includeexclude 属性来指定需要缓存的组件名称或正则表达式。对于动态组件,需要根据实际情况动态更新 includeexclude 属性,以确保缓存的正确性。

  2. 异步内容的缓存:如果在 keep-alive 中使用异步内容(如异步加载的组件或数据),需要注意缓存的处理。可以使用 activateddeactivated 生命周期函数来处理异步内容的缓存。在 activated 生命周期函数中加载异步内容,并在 deactivated 生命周期函数中清理缓存。

  3. 避免缓存不必要的内容:在使用 keep-alive 时,要避免缓存不必要的内容,以避免内存泄漏。可以使用 includeexclude 属性来指定需要缓存的组件,或者使用 v-ifv-show 等指令来控制组件的显示和隐藏。

  4. 处理多个 keep-alive 实例:如果在同一个页面中使用多个 keep-alive 实例,需要注意它们之间的缓存冲突。可以为每个 keep-alive 实例设置不同的 name 属性,以避免缓存冲突。

  5. 处理路由变化:在使用路由懒加载和 keep-alive 时,需要注意路由变化对缓存的影响。可以使用 router-view 中的 name 属性来指定需要缓存的组件,或者在路由守卫中处理缓存的更新和清理。

通过注意以上几点,可以正确处理动态组件和异步内容,避免不必要的缓存和内存泄漏,提高应用程序的性能和用户体验。在使用 keep-alive 处理动态组件和异步内容时,要根据具体的应用场景和需求合理配置,以确保缓存的正确性和性能提升。

六、总结

总结 keep-alive 的优势和局限性

keep-alive 是 Vue 中的一个重要组件,它可以用于缓存组件的状态,以提高页面性能和用户体验。以下是 keep-alive 的优势和局限性的总结:

优势:

  1. 提高页面性能:通过缓存组件的状态,避免了在页面切换时重新创建和渲染组件,从而提高了页面的性能。
  2. 保留用户状态:使用 keep-alive 可以保留用户在页面中的操作和状态,例如表单输入、滚动位置等,提高了用户体验。
  3. 减少服务器请求:通过缓存组件的状态,减少了对服务器的请求次数,降低了服务器负载。

局限性:

  1. 内存泄漏:如果不正确地使用 keep-alive,可能会导致内存泄漏,因为缓存的组件状态可能会一直保留在内存中,直到页面关闭。
  2. 状态管理的复杂性:使用 keep-alive 缓存组件状态可能会增加状态管理的复杂性,需要合理处理缓存和更新状态的问题。
  3. 可能影响页面更新:如果缓存的组件状态不正确或更新不及时,可能会导致页面显示不正确,影响用户体验。

因此,在使用 keep-alive 时,需要注意避免内存泄漏,正确处理缓存和更新状态的问题,以确保页面的性能和用户体验。同时,要根据具体的应用场景和需求合理配置,以充分发挥其优势,避免其局限性。

相关文章:

缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志文件配置

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志文件配置 前言 在 Python 的logging模块中&#xff0c;它不仅提供了基础的日志功能&#xff0c;还拥有一系列高级配置选项来满足复杂应用的日志管理需求。 说到logging 模块的高级配置&#xff0c;必须提及日…...

​LeetCode解法汇总1410. HTML 实体解析器

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 描述&#xff1a; 「HTML 实…...

OpenGL 绘制旋转球(Qt)

文章目录 一、简介二、实现代码三、实现效果一、简介 这里其实就是指三个互相垂直的三个圆形,正好之前已经完成了圆形平面的绘制,那么这里就需要对之前的圆形进行一些改造,使得它们可以以任意一种姿态在OpenGL中进行绘制(添加变换矩阵)。 这里同样对其进行封装,具体内容如…...

解决:javax.websocket.server.ServerContainer not available 报错问题

原因&#xff1a; 用于扫描带有 ServerEndpoint 的注解成为 websocket&#xff0c;该方法是 服务器端点出口&#xff0c;当进行 SpringBoot 单元测试时&#xff0c;并没有启动服务器&#xff0c;所以当加载到这个bean时会报错。 解决方法&#xff1a; 加上这个注解内容 Spr…...

81基于matlab GUI的图像处理

基于matlab GUI的图像处理&#xff0c;功能包括图像颜色处理&#xff08;灰度图像、二值图像、反色变换、直方图、拉伸变换&#xff09;&#xff1b;像素操作&#xff08;读取像素、修改像素&#xff09;、平滑滤波&#xff08;均值平滑、高斯平滑、中值平滑&#xff09;、图像…...

虚拟机系列:vmware和Oracle VM VirtualBox虚拟机的区别,简述哪一个更适合我?以及相互转换

一. VMware和Oracle VM VirtualBox虚拟机的区别主要体现在以下几个方面: 首先两种软件的安装使用教程如下: VMware ESXI 安装使用教程 Oracle VM VirtualBox安装使用教程 商业模式:VMware是一家商业公司,而Oracle VM VirtualBox是开源软件; 功能:VMware拥有更多的功能和…...

Go lumberjack 日志轮换和管理

在开发应用程序时&#xff0c;记录日志是一项关键的任务&#xff0c;以便在应用程序运行时追踪问题、监视性能和保留审计记录。Go 语言提供了灵活且强大的日志记录功能&#xff0c;可以通过多种方式配置和使用。其中一个常用的日志记录库是 github.com/natefinch/lumberjack&am…...

git常用命令(git github ssh)

目录 1、语法说明2、本地仓库相关操作建立一个git文件(git init)把工作区的文件添加到暂存区(git add)把暂存区的文件添加到本地仓库(git commit)查看暂存区和本地仓库中的文件(git ls-files)查看文件夹下所有文件的状态(git status)查看版本库中的提交记录(git log)恢复的文件…...

完美解决:Nginx访问PHP出现File not found.

目录 解决方法一&#xff1a; 解决方法二&#xff1a; 遇到 File not found. 出现的问题解决&#xff1a; 解决方法一&#xff1a; 修改nginx的主配置文件。 vi /etc/nginx/nginx.conf location ~ \.php$ { root html; fastcgi_pass …...

音视频5、libavformat-2

4、封装 Muxers (封装器)以 AVPacket 的形式获取编码数据并将其写入到指定容器格式的文件或输出字节流中。 muxing过程中最重要的API函数有: avformat_write_header() 用于写入文件header; av_write_frame() / av_interleaved_write_frame() 用于写…...

python opencv -模板匹配

python opencv -模板匹配 模板匹配就是&#xff0c;我们现有一个模板和一个图片&#xff0c;然后&#xff0c;在这个图片中寻找和模板近似的部分。 在opencv 中主要通过cv2.matchTemplate这个函数去实现。 下面我们先看一下&#xff0c;模板图片和需要匹配的图片&#xff1a…...

大数据技能大赛(高职组)答案

任务C&#xff1a;数据挖掘&#xff08;10分&#xff09; 所有模块都有&#xff0c;不是白嫖&#xff01;&#xff01;有需要可以联系我 环境说明&#xff1a; 服务端登录地址详见各任务服务端说明。 补充说明&#xff1a;各节点可通过Asbru工具或SSH客户端进行SSH访问&#xf…...

C++动态规划算法:最多可以参加的会议数目

本周推荐阅读 C二分算法&#xff1a;得到子序列的最少操作次数 本题的其它解法 C二分算法&#xff1a;最多可以参加的会议数目 II 本文涉及的基础知识点 二分查找算法合集 题目 给你一个 events 数组&#xff0c;其中 events[i] [startDayi, endDayi, valuei] &#xf…...

Windows 下安装MySQL8.0 Zip

1、将下载的mysql 压缩包解压。 2、已管理员身份证 打开 cmd窗口&#xff0c;进入到解压目录的&#xff0c;本文以解压到 D:\soft\mysql-8.0.29-winx64 为例来介绍。 3、在解压目录下 新建一个 my.ini 文件。 my.ini 文件内容如下&#xff1a; [mysqld] # 设置3306端口 por…...

8.2 Windows驱动开发:内核解锁与强删文件

在某些时候我们的系统中会出现一些无法被正常删除的文件&#xff0c;如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉&#xff0c;而所谓的解锁其实就是释放掉文件描述符&#xff08;句柄表&#xff09;占用&#xff0c;文件解锁的核心原理是通过调用ObSetHandleAttri…...

【Spark源码分析】事件总线机制分析

Spark事件总线机制 采用Spark2.11源码&#xff0c;以下类或方法被DeveloperApi注解额部分&#xff0c;可能出现不同版本不同实现的情况。 Spark中的事件总线用于接受事件并提交到对应的监听器中。事件总线在Spark应用启动时&#xff0c;会在SparkContext中激活spark运行的事件总…...

c语言第七弹--扫雷小游戏!

今天做一个有趣的扫雷小游戏 现在正式开始设计。 思路&#xff1a;想要根本上实现必须拥有 实现函数的主体.c文件 头文件.h 及头文件实现.c。 头文件.h #pragma once #include <stdio.h> #include <stdlib.h> #include <time.h> #define EASY_COUNT 10 #d…...

浏览器是什么

浏览器是什么 本文简要介绍浏览器的功能和组成。 浏览器&#xff08;Web Browser&#xff09;是一种用于访问和浏览互联网上的网页和资源的软件应用程序。它是用户与互联网交互的主要工具之一。 浏览器通过使用网络协议&#xff08;如HTTP、HTTPS等&#xff09;与远程服务器通…...

一文彻底看懂Python切片,Python切片理解与操作

1.什么是切片 切片是Python中一种用于操作序列类型(如列表、字符串和元组)的方法。它通过指定起始索引和结束索引来截取出序列的一部分,形成一个新的序列。切片是访问特定范围内的元素,就是一个Area。 说个笑话:切片不是切片,而是切片,但是又是切片。大家理解下呢(末…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...