Vue实现单页缓存,下一页刷新
vue单页缓存实现方案分析
实现前进刷新,返回不刷新的功能,并且返回时可以记住上一页的滚动位置,有两套方案可选
方案一:vue的keep-alive组件
具体使用如下:
<keep-alive max="10"><router-view/>
</keep-alive>
为什么这么使用?
如vue官网(https://cn.vuejs.org/v2/api/#keep-alive)介绍:
包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 相似, 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。
当组件在 内被切换,它的 activated 和 deactivated 这两个生命周期钩子函数将会被对应执行。主要用于保留组件状态或避免重新渲染。
因为缓存的需要通常出现在切换页面时,所以就需要结合vue-router的router-view来实现
为什么keep-alive能实现缓存?
render () {const slot = this.$slots.defaultconst vnode: VNode = getFirstComponentChild(slot)const componentOptions: ?VNodeComponentOptions = vnode && vnode.componentOptionsif (componentOptions) {// check patternconst name: ?string = getComponentName(componentOptions)const { include, exclude } = thisif (// not included(include && (!name || !matches(include, name))) ||// excluded(exclude && name && matches(exclude, name))) {return vnode}const { cache, keys } = thisconst key: ?string = vnode.key == null// same constructor may get registered as different local components// so cid alone is not enough (#3269)? componentOptions.Ctor.cid + (componentOptions.tag ? `::${componentOptions.tag}` : ''): vnode.keyif (cache[key]) {vnode.componentInstance = cache[key].componentInstance// make current key freshest remove(keys, key)keys.push(key)} else {cache[key] = vnodekeys.push(key)// prune oldest entryif (this.max && keys.length > parseInt(this.max)) {pruneCacheEntry(cache, keys[0], keys, this._vnode)}}vnode.data.keepAlive = true}return vnode || (slot && slot[0])}如上keep-alive源码,其中render函数是这样实现的,要渲染的试图组件作为插槽内容被获取到,当渲染到路径匹配到的视图组件时会根据vnode存储的内容拿到对应的name,一次将这些组件实例放到变量cache中,这样根据路由就可以找到缓存的vnode,返回给createComponent方法去执行initComponent,vue组件渲染这块的代码如下function initComponent (vnode, insertedVnodeQueue) {if (isDef(vnode.data.pendingInsert)) {insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert)vnode.data.pendingInsert = null}vnode.elm = vnode.componentInstance.$elif (isPatchable(vnode)) {invokeCreateHooks(vnode, insertedVnodeQueue)setScope(vnode)} else {// empty component root.// skip all element-related modules except for ref (#3455) registerRef(vnode)// make sure to invoke the insert hook insertedVnodeQueue.push(vnode)}
}
这里会有 vnode.elm 缓存了 vnode 创建生成的 DOM 节点。所以对于首次渲染而言,除了在 中建立缓存,和普通组件渲染没什么区别。
能实现的功能
能够把要缓存的组件渲染的vnode记到cache里边,当返回的时候用缓存里边的dom直接渲染,还有keep-alive组件提供的include 和 exclude属性,可以有条件的缓存想缓存的组件,如果配置了 max 并且缓存的长度超过了这个max的值,还要从缓存中删除第一个
存在的问题
存在的问题是存储vnode节点的key是name,也就是定义路由时组件对应的name,这就会导致同样的path,不同参数的时候打开的是从cache里边拿到的vnode,很多业务场景都是根据参数来显示不同内容,而keep-alive底层并没有对此做扩展,可以看下keep-alive源码
const key: ?string = vnode.key == null? componentOptions.Ctor.cid + (componentOptions.tag ? `::${componentOptions.tag}` : ''): vnode.keyif (cache[key]) {vnode.componentInstance = cache[key].componentInstance// make current key freshest remove(keys, key)keys.push(key)} else {cache[key] = vnodekeys.push(key)// prune oldest entryif (this.max && keys.length > parseInt(this.max)) {pruneCacheEntry(cache, keys[0], keys, this._vnode)}}
vnode.key就是路由里边定义的name,所以要用这套方案来实现的根据不同参数展示不同视图的功能就要对这里的key做改造,但是keep-alive是vue自带的,没法改底层,然后就诞生了我的第二套方案
方案二:navigation组件,scrollbehavior
github上找到类似功能的组件vue-navigation,这个vue组件可以实现返回走缓存,底层原理跟keep-alive一样,实际上是改写了keep-alive组件,前进刷新时新增了一个参数VNK,这样在路由发生变化的时候都会用给url带一个参数,并且cache的key取值依赖这个参数,借鉴这个组件的思路,做了一个类似keep-alive的组件,其中key的值是getKey方法获取的,改写以后的render方法如下
render () {var vnode = this.$slots.default ? this.$slots.default[0] : nullif (vnode) {vnode.key = vnode.key || (vnode.isComment ? 'comment' : vnode.tag)const { cache, keys } = thisvar key = getKey(this.$route, keyName)if (vnode.key.indexOf(key) === -1) {vnode.key = '__navigation-' + key + '-' + vnode.key}if (cache[key]) {if (vnode.key === cache[key].key) {vnode.componentInstance = cache[key].componentInstance} else {cache[key].componentInstance.$destroy()cache[key] = vnode}remove(keys, key)keys.push(key)} else {cache[key] = vnodekeys.push(key)// prune oldest entryif (this.max && keys.length > parseInt(this.max)) {pruneCacheEntry(cache, keys[0], keys, this._vnode)}}vnode.data.keepAlive = true}return vnode}
getKey方法实现
//url上新增参数vnk的值
export function genKey() {// const t = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'const t = 'xxxxxxxx'return t.replace(/[xy]/g, function (c) {const r = Math.random() * 16 | 0const v = c === 'x' ? r : (r & 0x3 | 0x8)return v.toString(16)})
}
//
export function getKey(route, keyName) {return `${route.name || route.path}?${route.query[keyName]}`
}
通过新写一个install方法挂载这个导航组件到vue上就可以实现前进刷新,返回走缓存,并且可以配置最大缓存数,使用如下(后期开源,目前只在内部镜像):
//app.vue<navigation max="10"><router-view/></navigation>
//入口js
import Navigation from 'component/navigation'
最后剩下返回上一页记住上一页的位置,之所以没有用开源的这个组件的记位置,是因为它的scrollTop是绑定在子元素上,而我的项目之前不是SPA,scroll都是绑在window上的,导致我的项目window上的scrollTop失效,改动较大,还是使用了vue-router提供的scrollBehavior,在路由配置里引入
实现如下:
var scrollBehavior = async (to, from, savedPosition) => {if (savedPosition) {return savedPosition} else {return new Promise((resolve, reject) => {setTimeout(() => {resolve({ x: 0, y: to.meta.savedPosition || 0 })}, 300)})}
}
const router = new VueRouter({mode: 'history',scrollBehavior,routes: [{path: '',redirect: '/mobile/home.html',meta: {needMtaReport: true,parentsStyle: {height: '100%',minHeight: '100%'}}},{name: 'scienceCompetition',path: '/mobile/scienceCompetition.html',component: scienceCompetition}]
}
总结:
1.单页缓存下js加载解析编译执行的时间缩短了,返回的时候由于走缓存js脚本的占用时间完全可以忽略,从而整体上缩减了页面的加载渲染时间,
2. 因为项目以前不是单页,代码里边定义了很多全局变量或者全局事件绑定,改成单页后全局变量的值依然存在,就会导致业务逻辑出现bug,所以使用单页需要注意全局变量或是事件的谨慎使用
3.通过push进入下一页时,head里边会累加前面页面的静态资源,访问的页面越多,最后的页面挂的静态的资源越多,返回的时候并不会减少已经加载的静态资源,单页缓存是典型的空间换时间的方案,内存的开销比较大,能否对资源动态增减以及内存占用的优化一直在探索中,暂时没有找到很好的解决方法。
相关文章
- LAMP架构部署
LAMP架构部署 一、LAMP架构概述二、构建LAMP架构1、编译安装Apache httpd服务1.关闭防火墙,将安装Apache所需软件包传到/opt目录下2.安装环境依赖包3.配置软件模块4.编译及安装5.优化配置文件路径6.添加httpd系统服务7.修改httpd 服务配置文件8.浏览器访问验证 2、编…...
2023/5/28 22:06:13 - PostgreSQL运行参数介绍 `max_connections` 和 CPU 核数
运行参数介绍 这是一个运行 PostgreSQL 数据库服务器的命令,具有以下参数和选项: -D /pgdata/data/postgres-e165e27a:指定数据库实例的数据目录路径,即数据库存储数据文件的位置。--config-file/pgdata/data/postgres-e165e27a…...
2023/5/28 22:00:56 - 智能计价器-第14届蓝桥杯省赛Scratch中级组真题第5题
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第140讲。 智能计价器,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第5题&#…...
2023/5/28 21:58:48 - 低代码助力企业数字化转型:构建高效业务系统的新选择
在当今数字化时代,企业数字化转型已经成为业界的热门话题。随着全球各大企业逐渐意识到数字化转型的重要性,越来越多的公司开始采用低代码开发平台作为数字化转型的工具,以低成本高效率构建业务系统,实现数字化转型。 但现实情况是…...
2023/5/28 21:53:17 - 全志V3S嵌入式驱动开发(移植linux kernel和rootfs)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 除了少部分嵌入式设备使用vxworks和freertos之外,大部分嵌入式都是使用linux来做基础os来使用的。linux使用场景很多,除了大…...
2023/5/28 21:48:42 - TPO69 01|Why Snakes Have Forked Tongues P5P6|阅读真题精读|17:50~19:35
17:00~17:50 吃饭 目录 P56 生词 段落大意 P5段落大意 P6段落大意 题目 【5】事实信息题|定位准确非常重要✅ 【6】事实信息题|定位准确非常重要✅ 【7】推理题|文章是否提及|不要过度推理 【8】修辞目的题|举例一般为了说明✅ 【9】句子插入题|in other words|同义…...
2023/5/28 21:43:59 - 《数据库应用系统实践》------ 小区停车管理系统
系列文章 《数据库应用系统实践》------ 小区停车管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构(需包含功能结构框图和模块说明)3.系统功能简介 二、概念模型设计1.基本要素(符号介绍说明&…...
2023/5/28 21:43:28 - Apache Kafka - 如何实现可靠的数据传递
文章目录 可靠的数据传递导图 可靠的数据传递 Kafka 通过以下几个方面实现可靠的数据传递: 分区副本 - Kafka 的分区有多个副本,如果某个副本失效,其他副本可以继续服务。生产者重试 - 生产者在发送消息失败时会自动重试,一直到成功发送或者达到最大重试次数。批量确认 - 生产…...
2023/5/28 21:31:43 - 一台服务器通过nginx安装多个web应用
1.首先安装nginx网站服务器 yum install nginx 2.nginx 的主配置文件:/etc/nginx/nginx.conf (一台服务器有两个域名部署) 我们在/etc/nginx/nginx.d/下创建一个conf文件,这个文件会被嵌套到主配置文件当中 server { listen 80; …...
2023/5/28 21:28:49 - 深入浅出Vite:深入理解 Rollup 的插件机制
上一节我们学会了 Rollup 构建工具的使用,相信你已经对 Rollup 的基础概念和使用有了基本的掌握。同时我们也知道,仅仅使用 Rollup 内置的打包能力很难满足项目日益复杂的构建需求。对于一个真实的项目构建场景来说,我们还需要考虑到模块打包…...
2023/5/28 21:28:02 - 小马识途:如何做好短视频内容运营
随着移动互联网普及,抖音和快手小红书这样的短视频平台已经成为这个时代最流行的内容承载形式。 短视频运营成为当下网络推广的一项重要任务,如何优化短视频呢?小马识途营销顾问就自身经历分享几点建议: 1、灵活的选题机制 内容选…...
2023/5/28 21:26:42 - Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】
B站视频地址: https://www.bilibili.com/video/BV1KX4y1a7N9 Git学习文档:https://d9bp4nr5ye.feishu.cn/wiki/PeDPw3mm3iFA36k9td9cVeignsZ 在很长一段时间里,我对Git的操作只限于:提交代码,拉取代码,合…...
2023/5/28 21:23:15 - 理解Window和WindowManager(一)
理解Window和WindowManager(一) Window是一个抽象类,它的具体实现是PhoneWindow,创建一个WindowManager就可以创建一个Window, Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService是一个IPC过程 为什么使用Window 首先就是Window…...
2023/5/28 21:13:16 - chatgpt赋能python:Python生成Pyd文件的全面指南
Python生成Pyd文件的全面指南 介绍 在Python编程中,我们会发现在某些情况下需要使用C或其他高效语言来提高代码执行速度。在这种情况下,将Python和其他语言混合编程是一个不错的选择。 本指南将介绍如何使用Python生成Python定义的C扩展程序文件 (.py…...
2023/5/28 21:05:26 - 相机光圈和快门
相机光圈和快门 光圈光圈结构光圈值由来光圈范围光圈作用控制画面明暗控制画面景深和锐度 自动光圈 Auto IrisDC-IRIS原理及问题P-IRIS工作原理 快门快门简介快门速度与曝光快门速度与运动安全快门速度高速快门和慢速快门B门和T门 参考文献 光圈 光圈结构 光圈(Ap…...
2023/5/28 21:04:32 - 【JVM】13. 垃圾回收器
文章目录 13.1. GC分类与性能指标13.1.1. 垃圾回收器概述13.1.2. 垃圾收集器分类13.1.3. 评估GC的性能指标吞吐量暂停时间吞吐量 vs 暂停时间 13.2. 不同的垃圾回收器概述13.2.1. 垃圾回收器发展史13.2.2. 7种经典的垃圾收集器13.2.3. 7款经典收集器与垃圾分代之间的关系13.2.4…...
2023/5/28 21:04:18 - C++:STL--List
文章目录 一.STL-list的数据结构链表结点模板 二.List的框架与迭代器的实现1.STL中的容器迭代器2.List的迭代器List正向遍历迭代器类模板(对ListNode< T >* 指针的封装)反向遍历迭代器的类模板(对正向迭代器的封装) 3.List的实现框架 三. List的成员接口的实现1.在List类…...
2023/5/28 21:03:45 - Koa学习1:初始化项目
前言 作为前端开发者,最适合我们的后端就是node了,node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。 学习教程是:【杰哥课堂】-项目实战-NodeKoa2从零搭建通用API服务 写这些文章࿰…...
2023/5/28 21:02:33 - 【ESP 保姆级教程】疯狂ESP32Cam篇 —— 案例: Esp32Cam拍照存储到SD卡,做个迷你小相机
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-05-28 ❤️❤️ 本篇更新记录 2023-05-28 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
2023/5/28 20:58:51 - 基于C++的UKF代码示例,跟踪三次多项式曲线
参考一 以下是一个基于C的UKF代码示例,用于跟踪三次多项式曲线: #include <iostream> #include <Eigen/Dense> #include <cmath>using namespace std; using namespace Eigen;//定义状态向量和量测向量的维度 const int n 3; const…...
2023/5/28 20:57:49 - 你所不知道的 数据在内存中储存 的来龙去脉
那么好了好了,宝子们,今天给大家介绍一下 “数据在内存中储存” 的来龙去脉,来吧,开始整活!⛳️ 一、数据类型的介绍 (1)整型和浮点型: (2)其他类型…...
2023/5/28 20:55:29 - Pyhive——介绍使用举例
介绍 PyHive 是一个 Python 数据库连接工具和 ORM 框架,它提供了一个 Python 接口让用户可以连接多个不同的 Hadoop 数据存储系统,包括 Apache Hive, Apache Impala, Amazon Athena, Apache Spark SQL 等等。 PyHive 的目标是让 Python 开发者能够方便…...
2023/5/28 20:55:13 - LeetCode周赛复盘(第347场周赛)
文章目录 1、移除字符串中的尾随零1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、对角线上不同值的数量差2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、 使所有字符相等的最小成本3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、矩阵中严格递增的单元格…...
2023/5/28 20:48:20 - MySQL:查询时进行时间比较
MySQL:查询时进行时间比较 前言一、查询距离当前时间多久以前二、查询特定时间范围 前言 在 MySQL 中查数据的时候,往往需要对记录的创建时间进行筛选,比如只需要查询今年1-5月份的,或者查询距离当前时间多久以前的。 本文介绍了…...
2023/5/28 20:47:08 - 【MySQL】主从复制(两台服务器)
概述 主从复制是将主数据库的DDL(数据定义语句)和 DML(数据操作语句)操作通过二进制日志(binlog)传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做)ÿ…...
2023/5/28 20:45:11 - 海思芯片pcie启动——pcie_mcc驱动框架的booter程序分析
1、booter程序介绍 (1)源码目录:pcie_mcc/multi_boot/example/boot_test.c; (2)调用命令:./booter start_device; (3)booter程序的作用:在主片将pcie启动相关的驱动加载完成后,调用booter来引导从片pcie启动; 2、主片引导从片启动的过程 (1)调用pcie启动相关驱动,知道当…...
2023/5/28 20:41:25 - 【解决】sklearn-LabelEncoder遇到没在编码规则里的新值
文章目录 一、问题描述二、解决方法Reference 一、问题描述 问题:sklearn-LabelEncoder 遇到没在编码规则里的新值 二、解决方法 方法一:直接保存old_data和encoder_data和之间的映射关系,字典或者下面的csv格式里都可以。 for col in be…...
2023/5/28 20:38:34 - 【Linux】遇事不决,可先点灯,LED驱动的进化之路---1
【Linux】遇事不决,可先点灯,LED驱动的进化之路---1 前言: 一、最简单的LED驱动程序 1.1 字符设备驱动程序框架 1.2 程序实战 1.2.1 驱动程序(led_drive_simple.c) 1.2.2 应用程序(led_test_simple.c…...
2023/5/28 20:29:41 - 自动化测试常用的方法(Python版)
Selenium的官方文档链接为:https://www.selenium.dev/documentation/zh-cn/。该文档包含了Selenium使用方法的详细介绍,包括了常见的定位和操作方式,同时还提供了各种语言版本的API文档。根据需要选择相应的文档可以帮助您更好地了解和使用Se…...
2023/5/28 20:28:26 - 【数据结构】--单链表力扣面试题⑤链表分割
目录 一、有相对顺序的链表分割 二、无相对顺序的链表分割 一、有相对顺序的链表分割 题述:现有一链表的头指针ListNode* phead,给一定值x,编写一段代码将所有<x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排序后的链表的…...
2023/5/28 20:26:53
最新文章
- LAMP架构部署
LAMP架构部署 一、LAMP架构概述二、构建LAMP架构1、编译安装Apache httpd服务1.关闭防火墙,将安装Apache所需软件包传到/opt目录下2.安装环境依赖包3.配置软件模块4.编译及安装5.优化配置文件路径6.添加httpd系统服务7.修改httpd 服务配置文件8.浏览器访问验证 2、编…...
2023/5/28 22:06:13 - PostgreSQL运行参数介绍 `max_connections` 和 CPU 核数
运行参数介绍 这是一个运行 PostgreSQL 数据库服务器的命令,具有以下参数和选项: -D /pgdata/data/postgres-e165e27a:指定数据库实例的数据目录路径,即数据库存储数据文件的位置。--config-file/pgdata/data/postgres-e165e27a…...
2023/5/28 22:00:56 - 智能计价器-第14届蓝桥杯省赛Scratch中级组真题第5题
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第140讲。 智能计价器,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第5题&#…...
2023/5/28 21:58:48 - 低代码助力企业数字化转型:构建高效业务系统的新选择
在当今数字化时代,企业数字化转型已经成为业界的热门话题。随着全球各大企业逐渐意识到数字化转型的重要性,越来越多的公司开始采用低代码开发平台作为数字化转型的工具,以低成本高效率构建业务系统,实现数字化转型。 但现实情况是…...
2023/5/28 21:53:17 - 全志V3S嵌入式驱动开发(移植linux kernel和rootfs)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 除了少部分嵌入式设备使用vxworks和freertos之外,大部分嵌入式都是使用linux来做基础os来使用的。linux使用场景很多,除了大…...
2023/5/28 21:48:42 - TPO69 01|Why Snakes Have Forked Tongues P5P6|阅读真题精读|17:50~19:35
17:00~17:50 吃饭 目录 P56 生词 段落大意 P5段落大意 P6段落大意 题目 【5】事实信息题|定位准确非常重要✅ 【6】事实信息题|定位准确非常重要✅ 【7】推理题|文章是否提及|不要过度推理 【8】修辞目的题|举例一般为了说明✅ 【9】句子插入题|in other words|同义…...
2023/5/28 21:43:59 - 《数据库应用系统实践》------ 小区停车管理系统
系列文章 《数据库应用系统实践》------ 小区停车管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构(需包含功能结构框图和模块说明)3.系统功能简介 二、概念模型设计1.基本要素(符号介绍说明&…...
2023/5/28 21:43:28 - Apache Kafka - 如何实现可靠的数据传递
文章目录 可靠的数据传递导图 可靠的数据传递 Kafka 通过以下几个方面实现可靠的数据传递: 分区副本 - Kafka 的分区有多个副本,如果某个副本失效,其他副本可以继续服务。生产者重试 - 生产者在发送消息失败时会自动重试,一直到成功发送或者达到最大重试次数。批量确认 - 生产…...
2023/5/28 21:31:43 - 一台服务器通过nginx安装多个web应用
1.首先安装nginx网站服务器 yum install nginx 2.nginx 的主配置文件:/etc/nginx/nginx.conf (一台服务器有两个域名部署) 我们在/etc/nginx/nginx.d/下创建一个conf文件,这个文件会被嵌套到主配置文件当中 server { listen 80; …...
2023/5/28 21:28:49 - 深入浅出Vite:深入理解 Rollup 的插件机制
上一节我们学会了 Rollup 构建工具的使用,相信你已经对 Rollup 的基础概念和使用有了基本的掌握。同时我们也知道,仅仅使用 Rollup 内置的打包能力很难满足项目日益复杂的构建需求。对于一个真实的项目构建场景来说,我们还需要考虑到模块打包…...
2023/5/28 21:28:02 - 小马识途:如何做好短视频内容运营
随着移动互联网普及,抖音和快手小红书这样的短视频平台已经成为这个时代最流行的内容承载形式。 短视频运营成为当下网络推广的一项重要任务,如何优化短视频呢?小马识途营销顾问就自身经历分享几点建议: 1、灵活的选题机制 内容选…...
2023/5/28 21:26:42 - Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】
B站视频地址: https://www.bilibili.com/video/BV1KX4y1a7N9 Git学习文档:https://d9bp4nr5ye.feishu.cn/wiki/PeDPw3mm3iFA36k9td9cVeignsZ 在很长一段时间里,我对Git的操作只限于:提交代码,拉取代码,合…...
2023/5/28 21:23:15 - 理解Window和WindowManager(一)
理解Window和WindowManager(一) Window是一个抽象类,它的具体实现是PhoneWindow,创建一个WindowManager就可以创建一个Window, Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService是一个IPC过程 为什么使用Window 首先就是Window…...
2023/5/28 21:13:16 - chatgpt赋能python:Python生成Pyd文件的全面指南
Python生成Pyd文件的全面指南 介绍 在Python编程中,我们会发现在某些情况下需要使用C或其他高效语言来提高代码执行速度。在这种情况下,将Python和其他语言混合编程是一个不错的选择。 本指南将介绍如何使用Python生成Python定义的C扩展程序文件 (.py…...
2023/5/28 21:05:26 - 相机光圈和快门
相机光圈和快门 光圈光圈结构光圈值由来光圈范围光圈作用控制画面明暗控制画面景深和锐度 自动光圈 Auto IrisDC-IRIS原理及问题P-IRIS工作原理 快门快门简介快门速度与曝光快门速度与运动安全快门速度高速快门和慢速快门B门和T门 参考文献 光圈 光圈结构 光圈(Ap…...
2023/5/28 21:04:32 - 【JVM】13. 垃圾回收器
文章目录 13.1. GC分类与性能指标13.1.1. 垃圾回收器概述13.1.2. 垃圾收集器分类13.1.3. 评估GC的性能指标吞吐量暂停时间吞吐量 vs 暂停时间 13.2. 不同的垃圾回收器概述13.2.1. 垃圾回收器发展史13.2.2. 7种经典的垃圾收集器13.2.3. 7款经典收集器与垃圾分代之间的关系13.2.4…...
2023/5/28 21:04:18 - C++:STL--List
文章目录 一.STL-list的数据结构链表结点模板 二.List的框架与迭代器的实现1.STL中的容器迭代器2.List的迭代器List正向遍历迭代器类模板(对ListNode< T >* 指针的封装)反向遍历迭代器的类模板(对正向迭代器的封装) 3.List的实现框架 三. List的成员接口的实现1.在List类…...
2023/5/28 21:03:45 - Koa学习1:初始化项目
前言 作为前端开发者,最适合我们的后端就是node了,node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。 学习教程是:【杰哥课堂】-项目实战-NodeKoa2从零搭建通用API服务 写这些文章࿰…...
2023/5/28 21:02:33 - 【ESP 保姆级教程】疯狂ESP32Cam篇 —— 案例: Esp32Cam拍照存储到SD卡,做个迷你小相机
忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-05-28 ❤️❤️ 本篇更新记录 2023-05-28 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...
2023/5/28 20:58:51 - 基于C++的UKF代码示例,跟踪三次多项式曲线
参考一 以下是一个基于C的UKF代码示例,用于跟踪三次多项式曲线: #include <iostream> #include <Eigen/Dense> #include <cmath>using namespace std; using namespace Eigen;//定义状态向量和量测向量的维度 const int n 3; const…...
2023/5/28 20:57:49 - 你所不知道的 数据在内存中储存 的来龙去脉
那么好了好了,宝子们,今天给大家介绍一下 “数据在内存中储存” 的来龙去脉,来吧,开始整活!⛳️ 一、数据类型的介绍 (1)整型和浮点型: (2)其他类型…...
2023/5/28 20:55:29 - Pyhive——介绍使用举例
介绍 PyHive 是一个 Python 数据库连接工具和 ORM 框架,它提供了一个 Python 接口让用户可以连接多个不同的 Hadoop 数据存储系统,包括 Apache Hive, Apache Impala, Amazon Athena, Apache Spark SQL 等等。 PyHive 的目标是让 Python 开发者能够方便…...
2023/5/28 20:55:13 - LeetCode周赛复盘(第347场周赛)
文章目录 1、移除字符串中的尾随零1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、对角线上不同值的数量差2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、 使所有字符相等的最小成本3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、矩阵中严格递增的单元格…...
2023/5/28 20:48:20 - MySQL:查询时进行时间比较
MySQL:查询时进行时间比较 前言一、查询距离当前时间多久以前二、查询特定时间范围 前言 在 MySQL 中查数据的时候,往往需要对记录的创建时间进行筛选,比如只需要查询今年1-5月份的,或者查询距离当前时间多久以前的。 本文介绍了…...
2023/5/28 20:47:08 - 【MySQL】主从复制(两台服务器)
概述 主从复制是将主数据库的DDL(数据定义语句)和 DML(数据操作语句)操作通过二进制日志(binlog)传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做)ÿ…...
2023/5/28 20:45:11 - 海思芯片pcie启动——pcie_mcc驱动框架的booter程序分析
1、booter程序介绍 (1)源码目录:pcie_mcc/multi_boot/example/boot_test.c; (2)调用命令:./booter start_device; (3)booter程序的作用:在主片将pcie启动相关的驱动加载完成后,调用booter来引导从片pcie启动; 2、主片引导从片启动的过程 (1)调用pcie启动相关驱动,知道当…...
2023/5/28 20:41:25 - 【解决】sklearn-LabelEncoder遇到没在编码规则里的新值
文章目录 一、问题描述二、解决方法Reference 一、问题描述 问题:sklearn-LabelEncoder 遇到没在编码规则里的新值 二、解决方法 方法一:直接保存old_data和encoder_data和之间的映射关系,字典或者下面的csv格式里都可以。 for col in be…...
2023/5/28 20:38:34 - 【Linux】遇事不决,可先点灯,LED驱动的进化之路---1
【Linux】遇事不决,可先点灯,LED驱动的进化之路---1 前言: 一、最简单的LED驱动程序 1.1 字符设备驱动程序框架 1.2 程序实战 1.2.1 驱动程序(led_drive_simple.c) 1.2.2 应用程序(led_test_simple.c…...
2023/5/28 20:29:41 - 自动化测试常用的方法(Python版)
Selenium的官方文档链接为:https://www.selenium.dev/documentation/zh-cn/。该文档包含了Selenium使用方法的详细介绍,包括了常见的定位和操作方式,同时还提供了各种语言版本的API文档。根据需要选择相应的文档可以帮助您更好地了解和使用Se…...
2023/5/28 20:28:26 - 【数据结构】--单链表力扣面试题⑤链表分割
目录 一、有相对顺序的链表分割 二、无相对顺序的链表分割 一、有相对顺序的链表分割 题述:现有一链表的头指针ListNode* phead,给一定值x,编写一段代码将所有<x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排序后的链表的…...
2023/5/28 20:26:53 - chatgpt国内免费镜像网站优选集合
目录 chatGpt 国内镜像网站集合 chatgpt接入微信 chatgpt接入谷歌浏览器 chatgptAI绘画 chatgpt不足之处: 最后 chatGpt 这个说实话,不用我介绍大家也都懂。不如玩一个有意思的,这里我让chatGpt自己介绍一下他自己: 嗨&…...
2023/5/28 20:57:53 - 【ChatGPT】从零开始构建基于ChatGPT的嵌入式(Embedding) 本地(Local) 智能客服问答机器人模型
目录 方案流程 1. Embeddings 介绍 术语:微调 vs 嵌入 一句话理解便是:embedding model 可以将文本转换为固定长度的连续向量。 架构流程图 3、Qdrant云数据库的搭建 3.1、初识Qdrant 3.2、创建云数据库 3.3、通过curl 接口访问 4、写入测试数…...
2023/5/28 17:16:05 - 【ChatGPT】在20分钟内使用 LangChain + Ray构建自托管问答服务
This is part 3 of a blog series. In this blog, we’ll show you how to build an LLM question and answering service. In future parts, we will optimize the code and measure performance: cost, latency and throughput. 这是博客系列的第 3 部分。在本博客中,我们将…...
2023/5/28 15:14:53 - 【ChatGPT】Turbocharge LangChain: guide to 20x faster embedding | LangChain: 嵌入速度提高 20 倍的指南
目录 Why do I need to parallelize this?为什么我需要并行化它? Stages of our Data Pipeline 数据管道的各个阶段 Execution...
2023/5/28 15:06:52 - 最新ChatGPT GPT-4 相似匹配Embedding技术详解(附ipynb与python源码及视频讲解)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(一)
目录 前言最新ChatGPT GPT-4 相似匹配Embedding技术详解1. 何为Embedding2. 相关API2.1 LMAS Embedding API2.2 ChatGPT Style 3. Embedding应用3.1 QA3.2 聚类3.3 推荐 相关文献 参考资料其它资料下载 前言 如果您想提高ChatGPT中文本处理的效率和精度,那么Embedd…...
2023/5/28 12:45:09 - ChatGPT的access_token获取(最新!!!)
ChatGPT的access_token获取(最新!!!) 序言 最近在搞移动应用开发,心血来潮写了个chatGPT的app,但是接口只能用官网提供的,我自己的号没有免费额度,朋友的号也就5$的额度…...
2023/5/28 12:19:58 - 【ChatGPT】ChatGPT 在智能客服产品如何落地?
目录 简介 智能客服产品的典型特征 人力密集: 数据密集: 流程可定义:...
2023/5/28 12:15:11 - 【ChatGPT】ChatGPT使用指南——句词分类
目录 ChatGPT使用指南——句词分类 1. NLU基础 1.1 句子级别的分类 1.2 Token级别的分类 2. 相关API...
2023/5/28 11:56:24 - 【ChatGPT】技术原理:ChatGPT怎么工作?
目录 简介:ChatGPT的工作原理概述 Transformer 架构原理...
2023/5/28 10:39:46 - 【ChatGPT】ChatGPT基础科普——知其一点所以然
目录 ChatGPT基础科普——知其一点所以然 语言的本质 从图灵测试到ChatGPT 1. LM 2. Transformer 3. GPT...
2023/5/28 10:09:26 - ChatGPT使用指南——相似匹配
目录 ChatGPT使用指南——相似匹配 1. 何为Embedding 2. 相关API 2.1 LMAS Embedding API 2.2 ChatGPT Style 3. Embedding应用...
2023/5/28 8:55:00 - 【ChatGPT】使用 LangChain 和 Ray 实现 100 行代码构建 LLM 开源搜索引擎【1】
目录 Introduction Building the index 构建索引 Accelerating indexing using Ray 使用 Ray 加速索引编制 Serving Conclusion...
2023/5/28 8:53:34 - 【ChatGPT】ChatGPT使用指南——文本生成
目录 ChatGPT使用指南——文本生成 1 引言 2 文本摘要任务 2.1 什么是文本摘要? 2.2 常见的文本摘要技术 2.3 基于OpenAI接口的文本摘要实验 3 文本纠错任务 3.1 什么是文本纠错? 3.2 常见的文本纠错技术 3.3 基于OpenAI接口的文本纠错实验 4…...
2023/5/28 8:24:05 - ChatGPT商业应用——LLM是星辰大海
目录 ChatGPT商业应用——LLM是星辰大海 1. 研究背景 1.1 研究背景 1.2 研究方法...
2023/5/28 7:59:04 - 国内可直接访问ChatGPT体验站,已稳定2个月 (域名被拦截解决方案)
新体验地址:https://zizhu888.cn/chatgpt/index.html ChatGPT体验站3月初上线,上线后,PV最高时3000,UV2000,付费用户有小300个 上线后,前前后后遇到了不少坑爹问题,下面是最近PV访问曲线图&am…...
2023/5/28 7:33:09 - AIGC——使用Cursor对比直接使用chatGPT有哪些技巧
Cursor对比直接使用chatGPT有哪些优势 1. 聊聊it团队经常面临的问题2. 试想一些AI辅助的应用场景3. 看回现实可用的工具及其使用3.1 加载文件作为对话上下文3.2 源码工程辅助阅读3.3 批量文件式输入口3.4 规范核查工具 4 通用思路4.1 提供解决方案思路4.2 借助chatGPT构建全流程…...
2023/5/28 4:27:19 - ChatGPT中文版Prompt提示工程超详细指南《提示工程高级技巧与技术》Github最新破万星项目Meta AI前工程师解密百万年薪提示工程师GPT-4模型优化利器(二)不定期更新
提示工程高级技巧与技术 前言Introduction 导言零样本提示少样本提示少样本提示的限制 Chain-of-Thought Prompting 链式思考(CoT)提示零样本COT提示 Zero-shot COT 自我一致性生成知识提示自动提示工程师(APE)Active-Prompt方向性…...
2023/5/28 0:42:10 - 【ChatGPT】ChatGPT使用指南——文本推理
目录 ChatGPT使用指南——文本推理 1. 什么是推理(Reasoning)? 2. 导入ChatGPT 3. 测试ChatGPT的推理能力...
2023/5/27 23:40:23 - ChatGPT免费使用的方法有哪些?
目录 一、ChatGpt是什么? 二、ChatGPT国内免费使用的方法: 第一点:电脑端 第二点:手机端 三、结语: 一、ChatGpt是什么? ChatGPt是美国OpenAI [1] 研发的聊天机器人程序 。更是人工智能技术驱动的自然语…...
2023/5/27 23:37:06 - 用ChatGPT辅助处理Excel
在日常工作中,我们经常需要处理大量的Excel表格,而在处理Excel表格时,常常会遇到重复、冗余、不清晰的数据等问题,导致我们耗费大量的时间和精力。 在这种情况下,现代技术的应用提供了更加高效的解决方案,…...
2023/5/27 18:32:31 - Pycharm安装ChatGPT插件
文章目录 前言一、安装ChatGPT插件二、使用步骤1.打开NexChatGPT2.发送请求 总结 前言 通过安装ChatGPT插件,您可以在PyCharm中更轻松、高效地使用ChatGPT模型进行开发,从而提高您的工作效率和准确性。 一、安装ChatGPT插件 打开PyCharm,单…...
2023/5/27 17:28:47 - 它来了!ios版ChatGPT
ChatGPT 的 iOS 版终于来了,不过目前只支持 iOS 美丽国区,你需要使用美丽国区账号才能下载使用。 目录 前提使用总结 前提 一部苹果手机一个美丽国苹果账号一个可以正常访问ChatGPT网页版的网络环境一个ChatGPT账号 使用 登录准备好的美丽国苹果账号。…...
2023/5/27 10:28:02 - 好用的IntelliJ IDEA ChatGPT插件:NexChatGPT
随着ChatGPT的爆火,ChatGPT给我们的生产生活带来一定的影响,ChatGPT相关的工具插件潮水般的涌现。ChatGPT对IT的影响也不小,尤其是自动化编程,今天介绍几款IntelliJ IDEA中ChatGPT插件。 一、NexChatGPT NexChatGPT是一款开箱即…...
2023/5/27 0:48:49 - 2023小狐狸ChatGPT源码1.9小程序 带绘画 带分销流量主系统智能客服AI源码+教程
2023全开源ChatGPT微信小程序,狐狸版本1.9,5.12已更新,增加绘画功能,带流量主带付费购买次数,可邀请好友获得问答次数 看广告获得问答次数 付费购买获得问答次数 狐狸版号1.9(最 新版)…...
2023/5/26 17:51:14 - 【国内chatgpt使用方法合集】(5月26日已更新)
写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正࿰…...
2023/5/26 17:44:47 - 【ChatGPT】GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI
GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI 文章目录 GPT-5 下一代:即将到来的7种能力将改变人工智能和技术的未来 | OpenAI第一:扩展多模式理解。第二:交互式多媒体。第三:为具备一般能力的机器人提供动力。第四:自主人工智能模型开发。第五:…...
2023/5/26 11:55:09 - 玩转ChatGPT:论文辅助写作(附Claude测评)
一、写在前面 嘿!嘿!嘿!大家好,今天我们来聊一下使用GPT们进行论文辅助写作。不过,我要先交代一下,GPT的使用门槛比较高,不少童鞋都用不上。所以,我极力推荐一个平替产品——Claude…...
2023/5/26 11:26:08 - [持续更新]使用chatgpt的几种方法~
1. monica 使用edge浏览器或者chrome浏览器,直接在官网下载即可,网址直通: bing: https://www.microsoft.com/zh-cn/edge/download?formMA13FJ google: Google Chrome 网络浏览器 备注:你需要先搭上梯子哈 安装打…...
2023/5/26 10:39:41 - 苹果手机爽了!一招搞定ChatGPT Plus,超级稳!
大家好,我是五竹。 昨天用苹果手机尝试了一下,借助App Store(苹果应用商店)升级 Plus,成功了!一共升级了三个号!有两个一气呵成,轻松搞定。最后一个可能触发风控了,但第…...
2023/5/26 9:58:09 - ChatGPT账号注册,为什么总是提示Access Denied you do not have acces
问题:提示Access denied 无法登录登录的时候,提示Access denied,You do not have access to chat.openai.com.原因登录出现这个界面,说明你的IP被OpenAI拉黑了,OpenAI对比较频繁访问的云主机商屏蔽了相关的IP出口段,所…...
2023/5/26 9:00:56