媒介
betty.js是一款极轻量的、运用localStorage
存储Javascript代码的东西。市面上已经有许多相似的东西:比方饿了么团队近来宣布的bowl.js,微信团队的MOON
(未开源),以及这个主意的开山祖师basket.js。
但为什么还要“反复造轮子”?是由于betty.js
她充足轻量,充足简约易用,充足具有扩大性,紧缩后的min.betty.js
只要1KB!使得你能够直接以inline
引入的体式格局(这也是引荐的引入体式格局)将betty用到你的项目里。
三年前就想着将Javascript的代码存储到LS里,在百度事情的时刻曾写出一个基于mod.js
的存储东西mocket.js
,它的头脑是动态剖析项目依靠,当地没有存储过的JS再去收集要求再存储下来,这也顺遂应用到百度的部份项目里。
但为什么不直接开源mocket.js
,就是由于betty
不依靠任何组件,是一个自力的极为轻量的小东西。固然,能够借助betty.js
来扩大完成mocket.js
动态剖析组件的头脑。
好了,空话这么多,接下来是引见文档:
装置
npm install betty.js
拷贝min.betty.js
的代码,运用inline
的体式格局引入项目里:
<script type="text/javascript">
var Betty=function....
</script>
假如你的项目基于FIS,能够这么引入:
<script type="text/javascript" src="/path/min.betty.js?__inline"></script>
示例
体式格局一:
var betty = Betty({
uri: "/path/min.allLib.js",
key: "allLib",
noCache: false,
xDomain: false
}, function() {
// your code...
})
体式格局二:
var betty = Betty({
uri: "/path/min.allLib.version.js",
key: "allLib",
noCache: false,
xDomain: false
});
betty.apply(function() {
// your code...
})
betty.apply(function() {
// your others code...
})
以上两种体式格局的代码实行一遍以后,min.allLib.js
的内容就会被betty存储到localStorage里,第二次实行时就不会从收集要求min.allLib.js
,直接从缓存中读取并实行。
至于为什么除了第一种写法,还支撑了第二种写法?是由于在前端工程里,能够斟酌把定义betty
的操纵放到通用的layout里,把betty.apply
写进每一个页面对应的js文件里。
固然,你能够自由选择本身的喜欢。
跨域缓存
betty.js
会默许运用Ajax
要求待缓存的JS资本,假如跨域则会要求失足。这时刻你须要设置betty padding
和xDomain
来让跨域要求JS资本被支撑:
index.html
<script>
window.betty = Betty({
uri: "/path/min.allLib_with_padding.version.js",
key: "allLib",
xDomain: true
}, function() {
console.log(Mobike.site)
})
</script>
min.allLib_with_padding.js
betty.store(function() {
// your code...
})
注重:
请设置
xDomain
为true
请在待缓存的JS文件中设置
betty padding
,如以上的betty.store(....)
请设置
betty
为全局变量
版本治理
betty.js
相对依靠uri
和key
来治理JS版本。假如你的代码须要更新,请替换uri
的值,新的JS就会被要求,然后代码内容会被从新存储到LocalStorage里,并且会删掉旧版本的代码。
betty.js
会以BETTY:{key}:{uri}花样存储JS代码,比方:
BETTY:allLib:/path/min.allLib.version.js
所以key
和uri
有一个发生变化,都邑引发从新要求并存储。
API
Betty
设置betty
var betty = Betty({config, callback[option]})
config:
uri
和key
必需设置noCache
: 设置不缓存,默许为false
xDomain
: 设置跨域缓存,默许false
,详见[跨域缓存]
betty.store
增加存储的代码
betty.store(function() {
...
})
betty.apply
实行依靠缓存的代码
betty.apply(function() {
...
})
betty.remove
移除缓存的代码
betty.remove("allLib")
关于缓存CSS
现在还不支撑,也不发起随便缓存CSS内容,照样发起直接在head
里引入CSS,主如果基于以下的斟酌:
动态插进去CSS会使页面闪烁
CSS款式递次治理题目
固然,一些不在首屏展现的CSS能够被缓存,但发起将其转换成JS文件兼并到你的min.allLib.js
中,能够借助这个小东西addcss:
addcss("a{color: red,font-size: 12px}")
假如你运用FIS,能够这么处置惩罚:
addcss(__inline("style.css"))