可视化/数字孪生专业社区
资源中心
问答
文章
实用工具
ByteVCharts
开源中台
申请建模
申请帮助
登录
注册
申请协助
此单为
付费
协助
×
为协助帮威客用户快速入门,帮威客平台可损供用户特定项目的框架代码开发服务。该服务可为用户快速构建符合项目基本需求的3D可视化框架代码资源(包括源码、3D模型、贴图、数据等),用户的技术团队可在此基础上快速上手,大幅提高3D可视化项目成功基础。
预算金额
公司名称
联系人
微信号
手机号码
提交申请
申请协助
此单为
付费
协助
×
为协助帮威客用户快速入门,帮威客平台可损供用户特定项目的框架代码开发服务。该服务可为用户快速构建符合项目基本需求的3D可视化框架代码资源(包括源码、3D模型、贴图、数据等),用户的技术团队可在此基础上快速上手,大幅提高3D可视化项目成功基础。
预算金额
公司名称
联系人
微信号
手机号码
提交申请
业务咨询
开发咨询
微信咨询
杜老师
黄老师
熊老师
支付信息
×
购买文章
使用indexdb缓存模型文件
订单金额
¥
0
实付金额
¥
0
我已阅读并同意ByteV组件购买协议
取消
提交订单
支付宝支付
微信支付
提交订单
0
点赞
0
评论
收藏
分享
举报
使用indexdb缓存模型文件
henry66
关注
已关注
0
0
0
1089
发表于 2021-07-30 22:09:43
思路,创建indexdb,通过get方法下载资源,将资源以文件流方式存储到indexdb中,使用时检测indexdb中是否有该资源如果有直接返回文件缓存url,如果没有,下载资源处理成缓存再加载 代码如下: ```js const indexDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB; class ByteVDBCache{ constructor(callback) { this._db = null; this._transaction = null; this._request = null; this._cacheTableName = 'modalcache'; this._dbversion = 1; this.initDB(callback); } initDB(callback) { this._request = indexDB.open('cacheModel', this._dbversion); this._request.onsuccess = event => { this._db = this._request.result; console.log('success db'); if(typeof callback === 'function') callback(); }; this._request.onerror = event => { console.log('indexdb初始化失败'); if(typeof callback === 'function') callback(); }; this._request.onupgradeneeded = event => { console.log('upgradeneeded') let db = this._request.result; // console.log('dfsdfs'); let store = db.createObjectStore(this._cacheTableName, { keyPath: 'id' }); store.createIndex("INDEX_ID", "id", { unique: true }); } } loadNetSource(url) { return new Promise((resolve,reject)=>{ fetch(url).then(res => { if(res.status === 200){ res.blob().then(blob => { let transaction = this._db.transaction(this._cacheTableName, 'readwrite'); let store = transaction.objectStore(this._cacheTableName); let storeReq = store.add({ id: url, blob }); storeReq.onerror = event => { console.log('缓存失败'); reject(url); } storeReq.onsuccess = event => { console.log(`创建${url}缓存成功`); resolve(blob); } }) }else{ console.log('未找到缓存资源'); reject(url); } }) }) } cacheModel(url) { return new Promise((resolve,reject)=>{ let transaction = this._db.transaction(this._cacheTableName, 'readwrite'); let store = transaction.objectStore(this._cacheTableName); let response = store.get(url); response.onsuccess = e => { if(!response.result){ this.loadNetSource(url).then(blob=>{ let _url = URL.createObjectURL(blob); resolve(_url); }).catch(err=>{ resolve(url); }) return } let _url = URL.createObjectURL(response.result.blob); resolve(_url); } response.onerror = ()=>{ resolve(url); } }) } deleteModel(url){ return new Promise((resolve,reject)=>{ let transaction = this._db.transaction(this._cacheTableName, 'readwrite'); let store = transaction.objectStore(this._cacheTableName); let response = store.get(url); response.onsuccess = ()=>{ console.log('删除成功'); resolve('删除成功'); } response.onerror = (event)=>{ console.log('删除失败'); reject(event); } }) } } ```
点击查看更多
全部评论
登录
|
注册
关于作者
henry66
TA的个人主页
关注
已关注
文章
1
粉丝
0
获赞
0
评论
0
访问
1092
使用indexdb缓存模型文件
推荐文章
ThreeJS 轮廓线特效 OutLinePath
(3)、React中使用ECharts——柱状图
31个惊艳的数据可视化作品,让你感受“数据之美”!
防抖节流
创建海洋特效组件 THREEJS 海洋效果 Shader实现
文章目录
文章分享
×
扫一扫分享
复制链接