uni-app长时间页面停留,static文件被当缓存清除导致后续跳转失败

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app长时间页面停留,static文件被当缓存清除导致后续跳转失败

当前硬件条件是 小米电视TV

BUG介绍:项目初期启动的时候页面跳转正常,但是当页面长期停留以后,再尝试做路由跳转会失败。

第一次点击后会报一个
请求的页面无法打开:file:///storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/www/__uniappview.html at file:///android_asset/data/dcloud_error.html:41
尝试重复点击的情况下会报一个
Waiting to navigate to: /pages/xxxxxx, do not operate continuously: /pages/xxxxxx.

image

其他情报:
在长时间停留再做操作后,会发现原本放在static文件夹下的静态资源文件无法加载成功,是否是长期不操作或者就是长期运行,android会把uniapp下的static资源文件清空导致项目报错。


10 回复

可能是系统清理了


我也怀疑是系统清理了,拿怎么样追加配置防止系统清理呢?

回复 l***@aliyun.com: 请问解决了吗

回复 哼哼可帅: 同问,解决了吗?

我这里也遇到了相同的问题,请问解决了吗

哎,nvue问题太多了

这个解决了吗,刷着刷着就点不进去了,Waiting to navigate to: /pages/news/detail/detail, do not operate continuously: /pages/news/detail/detail. 太吐血了

24年了还没解决吗

在uni-app中,如果页面长时间停留导致static文件被当缓存清除,从而造成后续跳转失败的问题,可以通过多种方式来解决,这里主要介绍几种常见的技术手段,包括服务端的缓存控制、前端资源版本控制和uni-app自身的配置优化。以下是一些代码示例和配置方法:

1. 服务端设置缓存控制头

确保服务端正确设置缓存控制头(Cache-Control),避免文件被浏览器错误地缓存或清除。

示例(以Nginx为例)

server {
    location /static/ {
        add_header Cache-Control "public, max-age=31536000, immutable";
    }
}

这段配置指定了static目录下的文件将被缓存一年,并且标记为不可变,这有助于减少缓存失效的问题。

2. 前端资源版本控制

通过在资源文件名中加入版本号或哈希值,确保每次加载的都是最新的资源。

示例(在uni-app中使用webpack打包)

vue.config.js中配置输出文件的哈希值:

module.exports = {
    configureWebpack: {
        output: {
            filename: '[name].[hash].js',
            chunkFilename: '[name].[hash].js'
        }
    }
}

这样,每次构建时,资源文件都会带上一个独特的哈希值,避免了缓存问题。

3. uni-app配置优化

manifest.json中,可以配置一些与缓存相关的选项,尽管uni-app本身对static文件的缓存控制有限,但可以通过配置页面路由来优化用户体验。

示例(在manifest.json中配置页面路由)

{
    "pages": [
        {
            "path": "pages/index/index",
            "style": {
                "navigationBarTitleText": "首页",
                "enablePullDownRefresh": false,
                "disableScroll": false
            }
        },
        // 其他页面配置...
    ],
    "tabBar": {
        "list": [
            {
                "pagePath": "pages/index/index",
                "text": "首页"
            },
            // 其他tab配置...
        ]
    }
}

虽然这里并未直接解决static文件缓存问题,但良好的路由配置可以提升用户体验,减少因长时间停留导致的页面问题。

4. 强制刷新static资源

在某些情况下,可以通过在跳转前强制刷新static资源来解决问题,但这通常不是最佳实践,因为它会影响用户体验。

示例(在页面中通过编程方式刷新)

// 在跳转前,通过修改URL参数来强制刷新资源
const currentPath = window.location.pathname + '?' + new Date().getTime();
window.location.href = currentPath;

这种方法应谨慎使用,因为它会导致页面重新加载,可能带来不必要的延迟。

总之,解决uni-app中static文件缓存问题,需要综合考虑服务端配置、前端资源管理和uni-app自身的优化策略。

回到顶部