位置: 编程技术 - 正文

JavaScript版的TwoQueues缓存模型(javascriptcom)

编辑:rootadmin

推荐整理分享JavaScript版的TwoQueues缓存模型(javascriptcom),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript怎么办,javascriptlet,javascriptcom,javascript.,javascriptj,javascriptlet,javascriptlet,javascriptjs,内容如对您有帮助,希望把文章链接给更多的朋友!

本文所指TwoQueues缓存模型,是说数据在内存中的缓存模型。

无论何种语言,都可能需要把一部分数据放在内存中,避免重复运算、读取。最常见的场景就是JQuery选择器,有些Dom元素的选取是非常耗时的,我们希望能把这些数据缓存起来,不必每次调用都去重新遍历Dom树。

存就存吧,但总得有个量吧!总不能把所有的历史数据都放在内存中,毕竟目前内存的容量还是相当可怜的,就算内存够大,理论上每个线程分配的内存也是有限制的。

那么问题来了,如何才能高效的把真正有用的数据缓存起来呢?这就涉及到淘汰算法,需要把垃圾数据淘汰掉,才能保住有用的数据。

比较常用的思路有以下几种:

FIFO:就是一个先进先出的队列,最先缓存的数据,最早被淘汰,著名的JQuery框架内部就是用的这种模型。

LRU:双链表结构,每次有新数据存入,直接放在链表头;每次被访问的数据,也转移到链表头,这样一来,链表尾部的数据即是最近没被使用过的,淘汰之。

TwoQueues:FIFO+ LRU,FIFO主要存放初次存入的数据,LRU中存放至少使用过两次的热点数据,此算法命中率高,适应性强,复杂度低。

其他淘汰算法还有很多很多,但实际用的比较多的也就这两种。因为他们本身算法不复杂,容易实现,执行效率高,缓存的命中率在大多数场合也还可以接受。毕竟缓存算法也是需要消耗CPU的,如果太过复杂,虽然命中率有所提高,但得不偿失。试想一下,如果从缓存中取数据,比从原始位置取还消耗时间,要缓存何用?

JavaScript版的TwoQueues缓存模型(javascriptcom)

具体理论就不多说了,网上有的是,我也不怎么懂,今天给大家分享的是JavaScript版的TwoQueues缓存模型。

还是先说说使用方法,很简单。

基本使用方法如下:

[/code] var tq = initTwoQueues(); tq.set("key", "value"); tq.get("key");[/code]

初始化的时候,指定一下缓存容量即可。需要注意的是,由于内部采用FIFO+LRU实现,所以实际容量是指定容量的两倍,上例指定的是个(键值对),实际上可以存放个。

容量大小需要根据实际应用场景而定,太小命中率低,太大效率低,物极必反,需要自己衡量。

在开发过程中,为了审查缓存效果如何,可以将缓存池初始化成开发版:

就是在后边加一个参数,直接true就可以了。这样初始化的缓存池,会自动统计命中率,可以通过hitRatio方法获取命中率。如果不加这个参数,hitRatio方法获取的命中率永远为0。 统计命中率肯定要消耗资源,所以生产环境下不建议开启。 是时候分享代码了:

最后,再次提醒,缓存算法需要和实际应用场景相结合,没有万能算法,合适的才是最好的!

浅谈重写window对象的方法 重写window对象的方法不是一件新奇的事,比如我们可能需要改变默认alert的行为,如何安全的重写呢?小菜看到某知名IT网站是这样的写法:window.alert=fun

JavaScript前端图片加载管理器imagepool使用详解 前言imagepool是一款管理图片加载的JS工具,通过imagepool可以控制图片并发加载个数。对于图片加载,最原始的方式就是直接写个img标签,比如:imgsrc="图

JavaScript语言对Unicode字符集的支持详解 上个月,我做了一次分享,详细介绍了Unicode字符集,以及JavaScript语言对它的支持。下面就是这次分享的讲稿。一、Unicode是什么?Unicode源于一个很简单

标签: javascriptcom

本文链接地址:https://www.jiuchutong.com/biancheng/383833.html 转载请保留说明!

上一篇:深入分析原生JavaScript事件(原生js)

下一篇:浅谈重写window对象的方法(重写runnable)

  • 小规模纳税人开专票税率是1%还是3%
  • 背书承兑分录
  • 结售汇有金额限制吗
  • 主营业务收入体现在资产负债表哪里
  • 综合所得预扣预缴表在哪里查
  • 电子承兑逾期提示付款说明怎么写
  • 建筑服务适用简易计税吗
  • 外购商品增值税
  • 销售收入包括应收销货款
  • 持有待售固定资产为什么不计提折旧
  • 服务业预收款项怎么确认收入
  • 银行对公贷款利息多少
  • 原材料出现贷方余额
  • 增值税发票做假什么后果
  • 出售房产税收
  • 单位车辆卖给个人怎么开票
  • 一般纳税人的工资可以抵扣吗
  • 方案讲解:关于员工激励的税收筹划
  • 购进原材料不用交税吗
  • 什么是劳动保护费支出
  • 留存收益净利润之间关系
  • 子公司代总公司付款
  • 对于目标文件系统文件过大无法删除
  • 商场外面的广告牌叫什么
  • 电脑没有声音问题
  • 进程rundll32
  • 押金收不回的会计分录
  • PHP:class_implements()的用法_spl函数
  • 为什么把收入进行舞弊假定
  • 既征收消费税又征收增值税的是
  • php现在
  • PHP:pcntl_sigtimedwait()的用法_PCNTL函数
  • 税盘可以全额抵扣是什么意思
  • 什么叫奖励旅游
  • php做登录界面连接数据库
  • 林木业折旧年限
  • sql实现mysql的分页功能
  • php索引类型
  • 增值税发票认证抵扣时间规定
  • _get_osfhandle
  • 借款凭证会计分录是什么
  • 6.824 Lab 1: A simple web proxy
  • 月末制造费用可以有余额吗
  • 税收优惠与政府补助对于企业研发来说哪个优惠力度大
  • 固定资产处置增值税政策
  • 基于stm32的毕业设计
  • 零售行业的销售额由什么决定
  • 个体户怎么申请电子营业执照
  • 认缴的出资额
  • 出口退税帐务处理
  • 企业所得税季度预缴纳税申报表
  • 小规模纳税人报哪些税
  • 自用房地产转换为采用成本模式计量的投资性房地产
  • 事业单位如何计算退休工资
  • 事业单位利息收入的正确分录
  • 咨询公司评估选择标准
  • 当月财务费用怎么算
  • 享受所得税减免优惠的生产性外商投资企业包括
  • 银行汇票质押办理流程
  • 认缴款和投资款区别
  • 企业项目贷款所需资料
  • 期末结转之前会进行哪些工作
  • 采购自产自销的商品
  • 变卖固定资产怎么交税
  • 怎么怎么恢复
  • windows2008关闭ie增强
  • windows vista秘钥
  • ubuntu16设置启动项
  • apple watch手表怎么看型号
  • win10更新后有线网络无法使用
  • cocos2dx加libevent库
  • 游戏编程设计模拟软件
  • 全志科技在国内芯片界地位
  • gdi双缓冲绘制
  • window.open打开窗口设置背景色
  • 创建nodejs项目的步骤
  • 监控服务器安装教程
  • javascript总结笔记
  • activity启动原理
  • 云南省国家税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设