uni-app uni.request在安卓平台上请求时间特别长
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>
提供下 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
在安卓平台上的请求性能问题。