最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解基于vue的移動web app頁面緩存解決方案

 更新時間:2017年08月03日 14:13:34   作者:zack24q  
這篇文章主要介紹了詳解基于vue的移動web app頁面緩存解決方案,非常具有實用價值,需要的朋友可以參考下

現(xiàn)在移動web app越來越熱門了,許多公司開始嘗試使用angular、react、vue等MVVM框架來開發(fā)單頁架構(gòu)的web app。但在開發(fā)web app時,如果希望頁面的導(dǎo)航體驗也接近原生應(yīng)用,那一般都會遇到這兩個問題:

  • 識別前進后退行為
  • 后退時恢復(fù)之前的頁面

筆者開發(fā)了一個基于vue與vue-router的導(dǎo)航庫vue-navigation,來幫助開發(fā)者來解決這些問題,下面是問題的解決思路。

識別前進后退

先說第一個問題。和原生app不一樣,瀏覽器中主要有這幾個限制:

  • 沒有提供前進后退的事件
  • 不允許開發(fā)者讀取瀏覽記錄
  • 用戶可以手動輸入地址,或使用瀏覽器提供的前進后退來改變url

解決方案是自己維護一份瀏覽記錄,每次url改變時,通過與記錄的瀏覽記錄作對比,從而判斷出前進后退行為:

  • url存在于瀏覽記錄中即為后退
  • url不存在于瀏覽記錄中即為前進
  • url在瀏覽記錄的末端即為刷新

另外,應(yīng)用的路由路徑中可能允許相同的路由出現(xiàn)多次(例如A->B->A),所以給每個路由添加一個key值來區(qū)分相同路由的不同實例。

這個瀏覽記錄需要存儲在sessionStorage中,這樣用戶刷新后瀏覽記錄也可以恢復(fù)。

后退時恢復(fù)之前的頁面

識別出后退行為后,下一步就是像原生一樣恢復(fù)之前的頁面了。

一種方案是頁面繼續(xù)存儲在DOM中,添加樣式display: none來告訴瀏覽器不渲染該元素,但是緩存的頁面多了DOM就會變得很大,會影響頁面的性能,本文不討論這個方案。

另一種方案是將數(shù)據(jù)緩存到內(nèi)存中,開發(fā)者需要將頁面的數(shù)據(jù)存儲起來,當返回到該頁面時,再根據(jù)數(shù)據(jù)將頁面恢復(fù)。但是這樣每個頁面存儲的數(shù)據(jù)不通,一般需要進行額外的編碼,如果有一種更底層的方案能解決這個問題,并且對開發(fā)者是透明的,就最好了,所以嘗試并開發(fā)了vue-navigation。

在vue-navigation 0.x版本的時候,借助了vue的keep-alive來緩存頁面,但是keep-alive是根據(jù)組件的name或tag來決定緩存的,所以帶來了很多限制。

通過拜讀keep-alive的源碼,了解到它的緩存機制后,就自己實現(xiàn)了一個管理緩存的組件,來靈活地緩存子組件,實現(xiàn)思路如下:

  1. 每次render時,先取到子組件的vnode(vue的虛擬dom)
  2. 計算出vnode的key,把key值賦給vnode避免vue-router復(fù)用組件實例
  3. 根據(jù)key值判斷該節(jié)點是否已緩存
    1. 已緩存:將緩存的實例賦給componentInstance,這樣vue就會根據(jù)這個實例來恢復(fù)組件
    2. 未緩存:將vnode存儲到內(nèi)存中,下次返回到該頁面時可以從內(nèi)存中恢復(fù)

另外還需要添加一個清除緩存的邏輯,當自己維護的瀏覽記錄變化時,根據(jù)瀏覽記錄清除不需要的緩存(例如當前的路由是:A->B->C,用戶從C直接返回到了A,那么B和C都需要從緩存中刪除)。

最后

雖然是基于vue來開發(fā)的,但是思路是不變的,使用其他框架也可以做到同樣的事情。

還是安利一下vuevue-navigation。使用插件后,再將router-view放在navigation下就有緩存功能了。

main.js

import Vue from 'vue'
import router from './router' // vue-router 實例
import Navigation from 'vue-navigation'
Vue.use(Navigation, {router})
// 啟動你的應(yīng)用...

App.vue

<template>
 <navigation>
  <router-view></router-view>
 </navigation>
</template>

最后歡迎大家討論或提供更好的解決方案。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何查看vue項目的node版本

    如何查看vue項目的node版本

    文章總結(jié):查看Vue項目中使用的Node版本,特別是當項目使用Yarn和TypeScript時,可以通過查看yarn.lock文件中的@types/node@version來確定版本
    2025-01-01
  • 基于vite2+vue3制作個招財貓游戲

    基于vite2+vue3制作個招財貓游戲

    端午將至,大家都開始吃粽子了么?本文將用vite2與vue3開發(fā)出一個招財貓小游戲,在圖案不停滾動的同時選出可以轉(zhuǎn)出不同的素材最終得到粽子獎勵,康康你能用多少次才會轉(zhuǎn)出自己喜愛口味的粽子吧
    2022-05-05
  • vue實現(xiàn)驗證碼倒計時按鈕

    vue實現(xiàn)驗證碼倒計時按鈕

    這篇文章主要為大家詳細介紹了vue實現(xiàn)驗證碼倒計時按鈕,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 一文帶你搞懂Vue3?defineModel中的雙向綁定

    一文帶你搞懂Vue3?defineModel中的雙向綁定

    隨著vue3.4版本的發(fā)布,defineModel也正式轉(zhuǎn)正了,它可以簡化父子組件之間的雙向綁定,是目前官方推薦的雙向綁定實現(xiàn)方式,下面就跟隨小編一起深入了解一下defineModel的使用吧
    2024-02-02
  • Vue 數(shù)值改變頁面沒有刷新的問題解決(數(shù)據(jù)改變視圖不更新的問題)

    Vue 數(shù)值改變頁面沒有刷新的問題解決(數(shù)據(jù)改變視圖不更新的問題)

    這篇文章主要介紹了Vue 數(shù)值改變頁面沒有刷新的問題解決(數(shù)據(jù)改變視圖不更新的問題),本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • vue.js響應(yīng)式原理解析與實現(xiàn)

    vue.js響應(yīng)式原理解析與實現(xiàn)

    這篇文章主要為大家詳細介紹了vue.js響應(yīng)式原理解析與實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Vue.js開發(fā)環(huán)境搭建

    Vue.js開發(fā)環(huán)境搭建

    Vue.js(讀音 /vju&#720;/, 類似于 view) 是一套構(gòu)建用戶界面的 漸進式框架。本文給大家介紹Vue.js開發(fā)環(huán)境搭建的詳解講解,感興趣的朋友一起看看吧
    2016-11-11
  • vue2.0使用md-edit編輯器的過程

    vue2.0使用md-edit編輯器的過程

    這篇文章主要介紹了vue2.0+使用md-edit編輯器的解決方案,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-02-02
  • 詳解Vue項目編譯后部署在非網(wǎng)站根目錄的解決方案

    詳解Vue項目編譯后部署在非網(wǎng)站根目錄的解決方案

    這篇文章主要介紹了Vue項目編譯后部署在非網(wǎng)站根目錄的解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Vue項目部署的實現(xiàn)(阿里云+Nginx代理+PM2)

    Vue項目部署的實現(xiàn)(阿里云+Nginx代理+PM2)

    這篇文章主要介紹了Vue項目部署的實現(xiàn)(阿里云+Nginx代理+PM2),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論

巩义市| 江孜县| 东阿县| 珲春市| 汝阳县| 吴江市| 赣榆县| 明星| 米泉市| 成都市| 济阳县| 河津市| 克拉玛依市| 巩义市| 株洲市| 临高县| 甘德县| 马关县| 鹰潭市| 乌拉特后旗| 棋牌| 宣威市| 木兰县| 武强县| 宝鸡市| 筠连县| 克拉玛依市| 柘城县| 青海省| 磴口县| 开封县| 遂宁市| 尼勒克县| 福建省| 新田县| 徐汇区| 衡水市| 木兰县| 宣城市| 丰顺县| 藁城市|