uni-app uni.request在安卓平台上请求时间特别长

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

uni-app uni.request在安卓平台上请求时间特别长
正常的接口请求在ios上面104毫秒,在安卓手机上面有概率出现请求时长特别长的情况,异常情况的请求时长在32秒左右,之前一直没有出现这个问题。最新版打包之后出现安卓手机在不同的网络上面,偶发性的出现接口请求时长超长的情况。

<template>  
    <view>  
        <button @click="fetchApi">fetch api</button>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {}  
        },  
        onLoad() {},  
        methods: {  
            fetchApi() {  
                const time = Math.floor(Date.now() / 1000);  
                const sign = 'c1f6bcfce32cc5d09d12860a611b833c';  
                uni.showLoading({  
                    title: "发请求中....",  
                });  

                let postDataHeader = {  
                    token: '5OYOnUWYXwSHkmWmw0BGK993AMqRjVkR1NpBGQfOly0'  
                };  
                console.log(233, +new Date());  
                uni.request({  
                    url: 'https://api.ltpp.com.cn/v3/user/info', // 你的API接口地址  
                    method: 'GET',  
                    header: postDataHeader,  
                    data: {  
                        time,  
                        sign  
                    },  
                    success: (res) => {  
                        console.log('GET请求成功:', res.data);  
                    },  
                    fail: (err) => {  
                        console.error('GET请求失败:', err);  
                        uni.hideLoading();  
                        // 处理错误  
                    },  
                    complete: () => {  
                        uni.hideLoading();  
                        console.log(234, +new Date());  
                    },  
                })  
            }  
        }  
    }  
</script>

15 回复

提供下 vue 和 HBuilderX 的具体版本。你可以稳定复现吗,模拟器、具体真机?有相关日志吗,是随机的接口慢,还是固定操作、固定的接口慢? 你提供的接口可以用于测试吗,或者私聊提供测试接口


HBuilderX版本:4.29,vue3,代码如下,可以直接复现出来,oppo手机A2x,网络无线网2.4G,5G可以,有时候又是5G不可以,2.4G可以。华为荣耀手机也不同程度上出现接口请求时间较长的情况 const time = Math.floor(Date.now() / 1000); const sign = ‘c1f6bcfce32cc5d09d12860a611b833c’;

uni.showLoading({ title: “发请求中…”, }); let token = uni.getStorageSync(‘token’); console.log(‘tokenjjjjj’, token) let postDataHeader = { token: ‘5OYOnUWYXwSHkmWmw0BGK993AMqRjVkR1NpBGQfOly0’ }; uni.request({ url: ‘https://api.ltpp.com.cn/v3/user/info’, // 你的API接口地址 method: ‘GET’, header: postDataHeader, data: { time, sign }, success: (res) => { console.log(‘GET请求成功:’, res.data); // 处理你的业务逻辑 console.log(‘res.coderes.code’, res.data.code) if (res.data.code == 200) { } else { } uni.hideLoading(); }, fail: (err) => { console.error(‘GET请求失败:’, err); uni.hideLoading(); // 处理错误 }, complete: () => { const endTime = Date.now(); // 请求结束时间 console.log(请求耗时:${endTime - startTime} ms); uni.hideLoading(); }, })

回复 t***@163.com: 我更新了你到问题,提供了复现 demo,经过我测试,在安卓模拟器上运行都是很短的时间就结束了 loading,你模拟器能遇到吗?

回复 DCloud_UNI_OttoJi: 我们就是在手机上面运行的模拟基座,出现的这个问题,运行到浏览器都没问题,ios基座也没问题

这个是我们程序的视频

看到问题了,标准基座也有这个问题是吗,我看你是很简单的页面。我发给相关同事

模拟器一定没问题是吗?你的 demo 也发一下吧,或者私聊我

我就是新建了一个项目 就发的那个请求 那个demo 就加了那个请求 ,因为一开始发现在我们项目里面有这个问题,所以我新建了一个项目还是一样,对比了一下 正常的接口请求在ios上面104毫秒,在安卓手机上面有概率出现请求时长特别长的情况,异常情况的请求时长在32秒左右,之前一直没有出现这个问题。最新版打包之后出现安卓手机在不同的网络上面,偶发性的出现接口请求时长超长的情况。

可以告诉我如何复现吗,我本地测试正常,正常发送。如果实在复现不了,你加超时加重试呢,概率性出现,有多大概率呢,后台日志正常吗?

查阅了相关的文档之后发现应该是ssl证书的问题,有部分用户的手机不是特别支持。

还有这种问题,最终如何解决的,使用其他厂商颁发的 ssl 证书吗?

之前用的免费的ssl证书,更换了付费的ssl证书可以了。

感谢反馈

在解决uni-app中uni.request在安卓平台上请求时间特别长的问题时,可以从多个角度进行优化,包括网络请求本身、数据处理、以及可能的系统或环境配置问题。以下是一些可能帮助你解决问题的代码示例和优化建议:

1. 优化网络请求配置

确保你的uni.request配置尽可能高效。例如,设置合理的超时时间,使用压缩传输数据等。

uni.request({
    url: 'https://your-api-endpoint.com/data',
    method: 'GET',
    header: {
        'Content-Type': 'application/json',
        'Accept-Encoding': 'gzip, deflate' // 启用gzip压缩
    },
    timeout: 10000, // 设置超时时间为10秒
    success: (res) => {
        console.log('请求成功', res.data);
    },
    fail: (err) => {
        console.error('请求失败', err);
    }
});

2. 使用异步请求并处理响应

确保你的请求是异步的,并且在处理响应时不会阻塞主线程。

async function fetchData() {
    try {
        const res = await uni.request({
            url: 'https://your-api-endpoint.com/data',
            method: 'GET'
        });
        console.log('请求成功', res.data);
    } catch (err) {
        console.error('请求失败', err);
    }
}

// 调用函数
fetchData();

3. 启用HTTPS

确保你的API端点使用HTTPS,这不仅可以提高安全性,还能在某些情况下提高请求速度。

4. 缓存数据

对于不经常变化的数据,考虑使用本地缓存来减少重复请求。

const cacheKey = 'api_data_cache';
const cachedData = uni.getStorageSync(cacheKey);

if (cachedData) {
    console.log('使用缓存数据', cachedData);
} else {
    uni.request({
        url: 'https://your-api-endpoint.com/data',
        method: 'GET',
        success: (res) => {
            uni.setStorageSync(cacheKey, res.data);
            console.log('请求成功并缓存数据', res.data);
        },
        fail: (err) => {
            console.error('请求失败', err);
        }
    });
}

5. 调试和日志

在开发和测试阶段,增加详细的日志记录可以帮助你更好地理解请求过程中的延迟来源。

const startTime = new Date().getTime();

uni.request({
    url: 'https://your-api-endpoint.com/data',
    method: 'GET',
    success: (res) => {
        const endTime = new Date().getTime();
        console.log(`请求耗时: ${endTime - startTime}ms`, res.data);
    },
    fail: (err) => {
        const endTime = new Date().getTime();
        console.error(`请求失败并耗时: ${endTime - startTime}ms`, err);
    }
});

通过上述方法,你可以系统地排查和优化uni-app中uni.request在安卓平台上的请求性能问题。

回到顶部