项目中有这个一个需求,当用户点击登录后返回上一页面,并使个人中心的页面重新加载 实现代码 //ajax成功后的回调 success:function(data){ mui.back...();//返回上一页面 var wobj = plus.webview.getWebviewById("me.html");//刷新个人中心页面 //这里最好是即将跳转时...,获取当前页面id并传递到现在的登录页面,登录成功后在重新加载传入进来的页面id wobj.reload(true);
这个体验并不好,不过在最初也是无奈之举-毕竟用户只有在刷新页面的情况下,才可以重新去请求数据。...当用户刷新页面时,浏览器会默认根据当前 URL 对资源进行重新定位(发送请求)。这个动作对 SPA 是不必要的,因为 SPA 作为单页面,无论如何也只会有一个资源与之对应。...1. hash 模式 hash 模式是指通过改变 URL 后面以“#”分隔的字符串(这货其实就是 URL 上的哈希值),从而让页面感知到路由变化的一种实现方式。.../#index // 活动页 https://www.imooc.com/#activePage 这个“不一样”是前端完全可感知的-JS 可以帮我们捕获到哈希值的内容。...浏览器的 history API 赋予了我们这样的能力,在 HTML 4 时,就可以通过下面的接口来操作浏览历史、实现跳转动作: window.history.forward() // 前进到下一页
InnoDB存储引擎设计了Insert Buffer,对于非聚簇索引的插入或更新操作,不是每一次都插入到索引页中,而是先判断插入的非聚簇索引页是否在缓冲池中,若在,则直接插入;若不在,则先放入到一个Insert...这就是说,在应用(apply) 重做日志前,用户需要一个页的副本,当写人失效发生时,先通过页的副本来还原该页,再进行重做,这就是doublewrite。...InnoDn存储引擎会监控对表上各索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)。...刷新临接页 InnoDB存储引擎还提供了Flush Neighbor Page (刷新邻接页)的特性。...其工作原理为:当刷新一个脏页时,InnoDB 存储引擎会检测该页所在区(extent) 的所有页,如果是脏页,那么一起进行刷新。这样做的好处显而易见,通过AIO可以将多个I0写人操。
在数据库中进行读取操作,首先将从磁盘中读到的页放在缓冲池中,下次再读相同的页中时,首先判断该页是否在缓冲池中。若在缓冲池中,称该页在缓冲池中被命中,直接读取该页。否则,读取磁盘上的页。 ...对于数据库中页的修改操作,则首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。页从缓冲池刷新回磁盘的操作并不是在每次页发生更新时触发,而是通过一种称为CheckPoint的机制刷新回磁盘。 ...对于非聚簇索引的插入或者更新操作,不是每一次都直接插入到索引页中,而是先判断插入的非聚集索引是否在缓冲池中,若在,则直接插入;若不在,则先放入到一个Insert Buffer中。...重做日志(Redo Log Buffer) 当缓冲池中的页的版本比磁盘要新时,数据库需要将新版本的页从缓冲池刷新到磁盘。...InnoDB存储引擎会监控对表上各个索引页的查询,如果观察到建立哈希索引可以带来速度上的提升,则建立哈希索引,所以叫做自适应哈希索引。
路由中有一个非常重要的概念叫路由表.路由表本质上就是一个映射表, 决定了数据包的指向. 三 .Vue-router的功能 *Vue Router是Vue.js的官方路由器。...它与Vue.js核心深度集成,使使用Vue.js轻松构建单页应用程序变得轻而易举。...功能包括: 嵌套路线/视图映射 模块化,基于组件的路由器配置 路由参数,查询,通配符 查看由Vue.js过渡系统提供动力的过渡效果 细粒度的导航控制 与自动活动CSS类的链接 HTML5历史记录模式或哈希模式...,在IE9中具有自动备用 可自定义的滚动行为 Vue-router构建单应用界面的核心 改变URL,但是页面不进行整体的刷新。...在路由切换时, 切换的是挂载的组件, 其他内容不会发生改变.
LRU是常见的缓存淘汰策略,用于分布式系统的缓存、页表置换等场景。然而,经典的哈希链表实现事实上并不是很好的实现策略。...哈希链表最大的问题在于,将所有的读访问转换为对同一临界区的写访问,在多核下是完全没有可拓展性的! 绝对的LRU并不适合工程实践,一般工业界使用LRU的近似算法。...当没有空物理页时,从柄开始查询。...在访问缓存的过程中,路径上的flag设置和查找方向相反(例如如果向左查找,那么设置成1)。 当miss时,二叉树根据flag查找到的block会被淘汰。...MRU(mostly) 实际上淘汰的是NRU, 每个block具备一个bit,访问block时该bit置0,其他block置1。当miss时,第一个bit为1的block会被淘汰。
注意:DBLWR文件是默认配置,与DATA和REDO存储在同一个目录中(也是默认配置) 下面几句话是关于下列图表的。...当doublewrite buffer被禁用时,它对不在Fusion-io硬件上的数据文件也禁用。该功能仅在Fusion-io硬件上支持,在Linux中仅支持Fusion-io NVMFS。...哈希符'#'会自动创建在指定目录名前缀,避免与shema名冲突。然而,如果使用了'.', '#'. 或者'/'指定了目录前缀,则不在目录名前缀没有哈希符'#'。...刷新列表双写文件默认大小是InnoDB page size * doublewrite page bytes. LRU列表双写文件是用于刷新从缓冲池LRU列表的页。它也包括单个页刷新的槽。...例如,下面的双写文件是在一个InnoDB页大小为16KB,单个缓冲池的MySQL实例上创建: #ib_16384_0.dblwr #ib_16384_1.dblwr innodb_doublewrite_files
当执行查询操作时,InnoDB会首先检查所需的索引页是否已经在缓冲池中,如果在,则直接从缓冲池中读取,这称为缓冲池命中;如果不在,则需要从磁盘加载到缓冲池中,这称为缓冲池未命中。 2....当向一个包含非聚集索引的表中插入数据时,如果相关的索引页不在缓冲池中,InnoDB不会立即将索引键插入到索引页中,而是将其存储在插入缓存中。...当某些索引值被频繁访问时,InnoDB会将这些索引值存储在自适应哈希索引中,以加速对这些值的查找。自适应哈希索引是完全自动的,不需要用户手动创建或维护。...加载数据页时,InnoDB会检查请求的数据页是否已经在Buffer Pool中(即缓存命中),如果不在,就会从磁盘读取数据页并将其放入一个空闲的缓存页中。 7....当一个事务提交或Buffer Pool中的空闲空间不足时,InnoDB会选择一些脏页加入到flush链表中,并在适当的时机将它们刷新到磁盘上。
;若不在,则先放入到一个 Insert Buffer 对象中,然后再以一定的频率和情况进行 Insert Buffer 和辅助索引页子节点的 merge(合并)操作,这时通常能将多个插入合并到一个操作中...在对缓冲池的脏页进行刷新时,并不直接写磁盘,而是会通过 memcpy 函数将脏页先复制到内存中的 doublewrite buffer,之后通过 doublewrite buffer 再分两次,每次 1MB...自适应哈希索引(Adaptive Hash Index,AHI)是指 InnoDB 存储引擎会自动根据访问的频率和模式来自动地为某些热点页建立哈希索引。...AHI 是通过缓冲池的 B+ 树页构造而来,因此建立的速度很快,而且不需要对整张表构建哈希索引。...其工作原理为:当刷新一个脏页时,InnoDB 存储引擎会检测该页所在区的所有页,如果是脏页,那么一起进行刷新,这样做的操作显而易见,通过 AIO 可以将多个 IO 写入操作合并为一个 IO 操作。
当需要访问某个页的数据时,先从哈希表中根据表空间号+页号看看是否存在对应的缓冲页。 ...引擎为了提高处理效率,在每次修改缓冲页后,并不是立刻把修改刷新到磁盘上,而是在未来的某个时间点进行刷新操作....作用: 在进行DML操作时,如果请求的辅助索引(二级索引)没有在缓冲池中时,并不会立刻将磁盘页加载到缓冲池,而是在CB记录缓冲变更,等未来数据被读取时,再将数据合并恢复到BP中。 ...当要访问某个页时,如果不在Buffer Pool,需要把该页加载到缓冲池,并且把该缓冲页对应的控制块作为节点添加到LRU链表的头部。 ...划分多个Buffer Pool区域提升数据库并发性能 在多线程并发访问同一个Buffer Pool时,他们都是访问内存中共享的数据结构,如缓存页、free链表、flush链表的等,此时必然要加锁,
在LRU基础上增加了K次的限制,为了解决缓存污染。 相比与LRU算法,LRU-K需要两个队列来统计数据的访问,一个历史访问队列和一个缓存队列,只有当数据被访问了K次,才会被加入到缓存队列中。...同时更新相关信息,如pages_信息,LRU-K信息(添加访问记录,设置为不可驱逐),以及在哈希表中的映射信息。...FlushPgImp(page_id_t page_id) -> bool override; 功能 将目标页刷新到磁盘。...参数 page_id要刷新的页面的 ID 不能是INVALID_PAGE_ID 返回 如果该page_id为INVALID_PAGE_ID,或者在页表中找不到该页...删除在哈希表中的映射记录,删除LRU-K替换器中的记录,重置对应的page信息,将该frame_id放到空闲队列中。
总结一下: 我们可以用表空间号 + 页号作为key,缓存页作为value创建一个哈希表,在需要访问某个页的数据时,先从哈希表中根据表空间号 + 页号看看有没有对应的缓存页,如果有,直接使用该缓存页就好...当然,我们可以每当修改完某个缓存页时,就立即将其刷新到磁盘中对应的页上,但是频繁的往磁盘中写数据会严重的影响程序的性能。...所以每次修改缓存页后,并不是立即把修改刷新到磁盘上,而是在未来的某个时间点进行刷新。 ...当需要访问某个页时,可以按照下面的方式处理LRU链表: 如果该页不在Buffer Pool中,在把该页从磁盘加载到Buffer Pool中的缓存页时,就把该缓存页对应的控制块作为节点塞到LRU链表的头部...很明显在一次全表扫描的过程中,多次访问一个页面(也就是读取同一页面中的多条记录)的时间不会超过1s, 如果我们把innodb_old_blocks_time的值设置为0,那么每次我们访问一个页面时就会把该页面放到
当我们要修改某个页的时候,首先还是判断该页是否在缓冲池中,不在就先读取到缓冲池中,然后修改在缓冲池中的页,随后不是直接将修改后的页刷盘,而是通过一种CheckPoint的机制刷新回磁盘。...,而最少使用的页在LRU列表的尾端,当缓冲池不能存放新读取到的页时,将首先释放LRU列表中尾端的页。...原来的刷新规则是,脏页在缓冲池占比小于innodb_max_dirty_pages_pct时,不刷脏,大于时,刷新100个脏页。...,对于二级非唯一索引的插入和更新操作,不是每一次直接插入到对应的索引页,而是先判断插入的二级非唯一索引是否在缓冲池中,如果在,则直接插入; 如果不在,则先放到一个insert buffer对象中,然后响应告诉用户更新完成...InnoDB存储引擎会监控对表上各索引页的查询。如果观察到建立哈希索引可以带来速度提升,则建立哈希索引,称之为自适应哈希索引(Adaptive Hash Index,AHI)。
在专用服务器上,通常高达80%的物理内存会分配给缓冲池。 为了提高大容量读操作的效率,缓冲池被分割成一个个可以容纳多行的页(pages)。...2.2 修改缓冲区 修改缓冲区是一个特殊的数据结构,用于缓存不在缓冲池中的那些二级索引页的变更。...自适应哈希索引特性通过变量: innodb_adaptive_hash_index开启,或在服务启动时通过--skip-innodb-adaptive-hash-index参数关闭。...前缀可以是任意长度,并且可能只有B树中的一些值出现在哈希索引中。哈希索引是根据需要为经常访问的索引页构建的。 2.4 日志缓冲 日志缓冲区是保存即将写入磁盘上日志文件的数据的内存区域。...日志缓冲区的内容定期刷新到磁盘。大的日志缓冲区能够在事务提交前无需写入redo日志数据到磁盘的情况下执行大事务。
注意,最小单位是页,哪怕只读一条数据,也会加载整个页进去。如果是顺序读的话,刚好又在同一个页里,譬如读了id=1的,那么再读id=2的时,大概率直接从缓存里读。...所以,Innodb设计了Insert Buffer,对于非聚簇索引的插入、更新操作,不是每次都插入到索引页中,而是先判断该二级索引页是否在缓冲池中,若在,就直接插入,若不在,则先插入一个insert buffer...目前有两种Checkpoint: 1 数据库关闭时,将所有脏页刷新到磁盘,这是默认的方式。...2 Master Thread操作,这个主线程会每秒、每10秒从脏页列表刷新一定比例的页到磁盘,这是个异步的操作,不会阻塞查询。 3 LRU 列表空闲页不足时,需要刷新一部分来自LRU列表的脏页。...4 redo log文件不可用时,需要强制刷新一部分,为了保证redo log的循环利用。 5 pool空间不足时,脏页太多,需要刷新。
• 变更缓冲区(Change Buffer):缓存对二级索引页的更改,当这些页不在缓冲池中时,以避免耗时的I/O操作。...• 自适应哈希索引(Adaptive Hash Index):为某些读操作提供快速的内存中查找机制,加速对频繁查询索引页的访问。...• 日志缓冲区(Log Buffer):保存要写入事务日志的更改,通过先写入内存再定期刷新到磁盘上的重做日志,来提高性能。 2....• 临时表空间(Temporary Tablespaces):存储临时数据,如排序操作或哈希索引创建过程中的数据。
最近的工作在做一个单页应用的部分功能的升级。 该应用是所谓的前后端分离的: 前端,后端是两个项目。 启动项目时,前端只需起一个静态服务器,后端用命令行起即可。 前端负责页面输出。...因为前,后端不在同一个域,所以,后端提供的接口的响应头都是 Access-Control-Allow-Origin: *的。...这是我做的第一次做单页应用,也是第一次在正式项目里用Angular,所以遇到了不少坑,记录如下 页面切换时(非页面刷新,只是hash发生变化,ng-view里的内容根据路由进行更新),用jQuery抓取新页面的元素抓不到...多次进入同一个页面,导致同一个js被多次执行导致的问题。因为页面没有刷新,事件委托的那元素上的事件会被绑定多次。解决方案是,绑事件前,先接触绑定事件。...因为单页应用的页面跳转并没有刷新页面 前后端分离可采用,前后端均用相同的模板引擎。前端在开发时,请求的自己写的模拟的接口,而非后端真正的接口。模拟的接口和后端的接口的格式是一样的。
1、通过 space id 和 page no 哈希计算之后把索引页加载到指定的 buffer pool instance 中。...Checkpoint 分为两种: Sharp checkpoint:在重用 redo log 文件时(切割日志),将所有记录到 redo log 中对应的脏数据刷新到磁盘。...在对普通索引数据页不在 BP 中,对页进行写操作,不会将磁盘数据加载到缓冲池中,仅仅记录缓冲变更(可以理解为只记录操作变更,不做真实数据操作)。...即使索引页不在缓冲池,也会去读取磁盘页,一次随机 IO(通过 B+tree 查找数据页),一次顺序 IO(写 redo log)避免不了。 那些场景会触发刷新 change buffer。...里的数据,刷新到共享表空间(ibdata),然后脏页刷新到磁盘中,此时内存页和数据页一致。
领取专属 10元无门槛券
手把手带您无忧上云