利用localStorage存储js文件,只有在第一次访问该页面的时候加载js文件,以后在访问的时候加载本地localStorage执行

封装lsFile类有url、filename(key前缀)、lname(key)、filetext(值)属性

var lstorage = window.localStoragefunction lsFile(url) {this.url = urlthis.filename = url.substring(url.lastIndexOf("/")+1, url.lastIndexOf("."))//this.filename = document.location.pathnamethis.lname = 'Lsf_'+this.filename+'_'+url.substring(url.lastIndexOf("?")+1)this.filetext = lstorage.getItem(this.lname)this.init()
}

首先判断本地localStorage有没有缓存文件,有的话直接getItem获取,通过eval执行,没有的话通过执行ajax获取js文件内容。

lsFile.prototype.init = function() {if (this.filetext) {this.eval(this.filetext)} else {this.xhr(this.url, this.runstr)}
}

通过ajax采用同步的形式js内容,取得内容后,eval执行js文件的内容,setItem设置保存到localStorage中,再删除localStorage中上个版本的文件。

lsFile.prototype.runstr = function(filetext) {this.eval(filetext)lstorage.setItem(this.lname, filetext)this.removels()
}

ajax同步获取js文件内容

lsFile.prototype.xhr = function(url, callback) {var _this = thisvar version = url.substring(url.lastIndexOf("?"))var xhr = new XMLHttpRequest();xhr.onreadystatechange = function() {switch(xhr.readyState) {case 4:if(xhr.status == 200) {var filetext = xhr.responseTextif (callback) {callback.call(_this, filetext)}} else {alert("加载失败")}break;default:break;}}xhr.open('GET', url, false);xhr.send();
}

删除localStorage中上个版本的文件方法,通过名字规则查找,除了当前设置的名字之外有相同前缀的,通过removeItem删除。

lsFile.prototype.removels = function() {var arr = []for (var i=0; i<lstorage.length; i++) {var name = lstorage.key(i);if (name.indexOf(this.filename) > -1 && name != this.lname) {arr.push(name)}}for (var i in arr) {localStorage.removeItem(arr[i]);}
}

使用

lsFile('/demo/lsfile/zepto.js?20150620')

移动端webapp使用

兼容性好

网速慢,LS读取+eval大多数情况下快于304

浏览器缓存经常会被清理,localStorage被清理的几率低一些

以下是完整代码

!function(w) {'use strict'var lstorage = window.localStoragefunction lsFile(url) {this.url = urlthis.filename = url.substring(url.lastIndexOf("/")+1, url.lastIndexOf("."))//this.filename = document.location.pathnamethis.lname = 'Lsf_'+this.filename+'_'+url.substring(url.lastIndexOf("?")+1)this.filetext = lstorage.getItem(this.lname)this.init()}lsFile.prototype.init = function() {if (this.filetext) {this.eval(this.filetext)} else {this.xhr(this.url, this.runstr)}}lsFile.prototype.xhr = function(url, callback) {var _this = thisvar version = url.substring(url.lastIndexOf("?"))var xhr = new XMLHttpRequest();xhr.onreadystatechange = function() {switch (xhr.readyState) {case 4:if (xhr.status == 200) {var filetext = xhr.responseTextif (callback) {callback.call(_this, filetext)}} else {alert('加载失败')}break;default:break;}}xhr.open('GET', url, false);xhr.send();}lsFile.prototype.runstr = function(filetext) {this.eval(filetext)lstorage.setItem(this.lname, filetext);this.removels()}lsFile.prototype.removels = function() {var arr = []for (var i=0; i<lstorage.length; i++) {var name = lstorage.key(i);if (name.indexOf(this.filename) > -1 && name != this.lname) {arr.push(name)}}for (var i in arr) {localStorage.removeItem(arr[i]);}}lsFile.prototype.eval = function(filetext) {window.eval(filetext)}w.lsFile = function (url) {return new lsFile(url)}
}(window)

利用localStorage本地储存js文件相关推荐

  1. 怎压缩html文件夹,如何利用koala压缩合并js文件?

    本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 苏南大叔在很久之前的文章中,曾经向大家介绍过一款很好用的js和css处理工具,叫做koala.据说是国人基于n ...

  2. 漏刻有时数据可视化大屏常见问题(10):geomap调用本地版js文件的操作说明

    命名规则 汉语拼音命名,地图标识为拼音. 如:德城区 decheng.js 地图标识:decheng 使用说明 1.将decheng.js引入通过script引入: 2.地图组件中修改对应的地图标识; ...

  3. SpringBoot html中引用本地js文件失败的问题

    1.问题描述 想在项目中使用jquery,于是从jquery官网下载了最新版本(手动从浏览器中复制到本地的js文件中),并在html文件中添加了引用.目录及引用情况如图. <!DOCTYPE h ...

  4. html 中引入外部 css 、js 文件

    1. 引入 css 文件 引入外部 css 文件代码如下,css文件引入代码应放在 <head></head> 中. <!-- 本地相对路径," ../ &qu ...

  5. js利用本地储存开获取商品足迹

    js利用本地储存开获取商品足迹 步骤 1.在点击li时,产生一条历史访问记录1.1获取所有的商品的li标签.1.2获取商品详情1.3 将这条记录放入到localStorage中, 数组[] 转json ...

  6. react本地储存_如何在React项目中利用本地存储

    react本地储存 以及为什么要这么做. 本地存储是现代Web浏览器固有的Web API. 它允许网站/应用程序在浏览器中存储数据(简单和有限),从而使数据在以后的浏览器会话中可用. 在开始学习本教程 ...

  7. JS9day(BOM对象模型,setTimeout定时器,JS单线程执行机制,location对象,swiper插件,localStorage本地存储,购物车案例升级版,学习信息案例(本地存储))

    文章目录 BOM简介 定时器-延时函数 5秒关闭广告案例 递归模拟setInterval函数 两种定时器对比 JS 执行机制 location对象 navigator对象 histroy对象(了解) ...

  8. Node.js 在本地生成日志文件

    文章目录 Node.js 在本地生成日志文件 1.前言 2.什么是 fs 3.new console.Console(stdout, stderr, ignoreErrors) 4.node.js 生 ...

  9. 根据id删除localstorage数据_原生js利用localstorage实现简易TODO list应用

    前言:小生不才,只懂得一些皮毛,我努力以最简单的语言将心中的想法表述出来,让更多人能够很轻松的弄明白.文章里面有不足之处望各位大牛指出,使得后面的文章能够朝着更好的方向发展.另外,大家记得点赞哟! 欢 ...

最新文章

  1. 豆瓣评分 9.3 的 Java 巨著 | Bruce Eckel 重讲 Java 的编程思想
  2. php fpm是干嘛的,php-fpm是什么?
  3. SessionLocaleResolver
  4. linux 安装库 编译提示-lcrypto 无法链接,缺少 crypto 库
  5. 计算机网络实验(华为eNSP模拟器)——第八章 动态主机配置协议(DHCP)
  6. 微信小程序 - 实战小案例 - 简易记事本
  7. rocketmq 4.X 扩容思路
  8. java 16进制_JAVA十六进制数据接收与传输
  9. linux scp命令 不输入远程机器的密码,scp 命令无需输入密码完成 Linux 系统间远程拷贝...
  10. 拓端tecdat|用R语言模拟混合制排队随机服务排队系统
  11. 深度学习新星 | 图卷积神经网络(GCN)有多强大?
  12. Spark核心编程原理
  13. c语言求统计硬币正反次数,C语言猜测硬币正反面
  14. ADSL密码查看器.rar
  15. (已实现)Mysql实现模糊拼音查询(Mybatis可直接使用)
  16. 【硬石STM32f407开发板_DIY入门】模块化编程实例
  17. opencv人脸识别(一)调用笔记本摄像头
  18. Linux虚拟机下FTP服务器的搭建(详细)
  19. 微信公众号通过第三方平台完成授权
  20. C语言的转义字符,八进制

热门文章

  1. 步步深入:MySQL架构总览-gt;查询执行流程-gt;SQL解析顺序
  2. UnpooledHeadByteBuf源码分析
  3. 05.full_text match_bool_prefix match_phrase_prefix 查询
  4. ES6的字符串与正则表达式
  5. 【最简便解法】1086 就不告诉你 (15分)_13行代码AC
  6. L1-011 A-B(13行代码AC!!)
  7. 38行代码AC——UVA-167The Sultan‘s Successors(八皇后问题,附视频讲解)
  8. Invalid config event received: {version=0, server
  9. 自己做网站翻译服务器 - 添加网站,猎场seo视频教程:站群之间应该如何进行链接-专业...
  10. 运用高斯核模型进行最小二乘回归_比特币价格与时间存在关系?一文读懂比特币价值的对数增长模型...