uni-app 最近发现因 sdk.api.oaid.wocloud.cn 接口导致请求延迟30秒 晚上6点多恢复正常
uni-app 最近发现因 sdk.api.oaid.wocloud.cn 接口导致请求延迟30秒 晚上6点多恢复正常
产品分类
HTML5+
HBuilderX版本号
4.24
手机系统
全部
手机机型
华为 VIVO 都有这个现象
打包方式
云端
测试过的手机
华为、vivo 都有这个现象,小米没有
示例代码
{
"@platforms" : [ "android" ],
"id" : "H5619190B",
/* 必选,应用的标识 */
"name" : "",
/* 必选,应用名称 */
"version" : {
"name" : "1.4",
/* 必选,版本名称 */
"code" : "100"
},
"description" : "",
/* 可选,应用描述信息 */
"icons" : {
"72" : "icon.png"
},
"fullscreen" : true,
"launch_path" : "http:xxxx",
/* 必选,应用的入口页面,默认为根目录下的index.html;也可以是网络地址,网络地址必须以http://或https://开头 */
"developer" : {
"email" : "",
/* 可选,开发者名称 */
"name" : "",
/* 可选,开发者邮箱地址 */
"url" : ""
},
"permissions" : {},
"plus" : {
"launchwebview" : {
"titleNView" : {
"backgroundcolor" : "#f7f7f7",
"titletext" : "",
"titlecolor" : "#000000"
}
},
"statusbar" : {
"immersed" : false, //"supportedDevice",
"style" : "dark"
},
"popGesture" : "close",
/* 设置应用默认侧滑返回关闭Webview窗口,none为无侧滑返回功能,hide为侧滑隐藏Webview窗口。参考ask.dcloud.net.cn/article/102 */
"splashscreen" : {
"autoclose" : true,
/* 如果为true,程序启动的图片可以自动关闭,如果为false,开发者需要手动关闭 */
"waiting" : true
},
"runmode" : "normal",
/* 两个值,liberate或normal,前者在应用安装时释放资源,后者不需要释放资源 */
"signature" : "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==",
/* 可选,保留给应用签名,暂不使用 */
"distribute" : {
"debug" : "",
/* 可选,是否为debug模式,可取值:true表示debug模式运行,false表示release模式运行,默认值为false */
"apple" : {
"appid" : "",
/* iOS必选,苹果开发网站申请的appid,如io.dcloud.HelloMUI */
"mobileprovision" : "",
/* iOS必选,打包配置文件 */
"password" : "",
/* iOS必选,导入配置文件密码 */
"p12" : "",
/* iOS必选,打包配置文件关联的个人证书 */
"devices" : "universal",
/* iphone,可取值iphone/ipad/universal */
"frameworks" : [],
"idfa" : false
},
"google" : {
"packagename" : "",
/* Android必选,程序包名,如io.dcloud.HelloMUI */
"keystore" : "",
/* Android必选,打包证书文件 */
"password" : "",
/* Android必选,打包证书密码 */
"aliasname" : "",
/* Android必选,打包证书别名 */
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
"minSdkVersion" : 24,
"targetSdkVersion" : 24
},
"orientation" : [
"portrait-primary",
"landscape-primary",
"portrait-secondary",
"landscape-secondary"
],
/* 必选 */
"icons" : {
"ios" : {
"iphone" : {
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
},
"ipad" : {
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"appstore" : "unpackage/res/icons/1024x1024.png"
},
"android" : {
"hdpi" : "unpackage/res/icons/72x72.png",
"xhdpi" : "unpackage/res/icons/96x96.png",
"xxhdpi" : "unpackage/res/icons/144x144.png",
"xxxhdpi" : "unpackage/res/icons/192x192.png"
}
},
"splashscreen" : {
"ios" : {
"iphone" : {},
"ipad" : {}
},
"android" : {
"hdpi" : "unpackage/res/splash.png",
"xhdpi" : "unpackage/res/splash.png",
"xxhdpi" : "unpackage/res/splash.png"
},
"androidStyle" : "default",
"useOriginalMsgbox" : false
},
"plugins" : {
"geolocation" : {
"system" : {
"platform" : [ "ios", "android" ]
}
}
}
},
"schemeWhitelist" : [ "market" ]
},
"dependencies" : {
"pages" : {},
"idle" : {}
},
"screenOrientation" : [ "portrait-primary" ]
}
操作步骤
- 就最近几天,白天就有这个现象,晚上6点多就恢复了
预期结果
- 能正常请求
实际结果
- 能正常请求
bug描述
- 最近发现,app因为sdk.api.oaid.wocloud.cn的接口导致请求延迟30秒,然后再每个时间段,sdk.api.oaid.wocloud.cn 又正常了,业务的请求又恢复 这个只是用Hubild 打包H5 的APP,启动页面是服务器上的。工程里没有任何其他东西
1 回复
针对您提到的uni-app中因为sdk.api.oaid.wocloud.cn
接口导致的请求延迟问题,这通常可能是由于服务端在高并发时段的处理能力不足、网络延迟、或者该接口本身的设计限制所导致。虽然无法直接修改服务端的行为,但我们可以从客户端的角度优化请求逻辑,减少因请求延迟对用户体验的影响。以下是一个使用uni-app进行请求优化的代码示例,这里主要采用了请求超时处理和重试机制。
代码示例
首先,确保您已经安装了uni-request
库(如果未安装,可以使用npm install @dcloudio/uni-request
进行安装),或者您可以直接使用uni-app自带的uni.request
方法。
// 引入uni-request(可选,如果使用原生的uni.request则无需引入)
// import uniRequest from '@dcloudio/uni-request';
// 配置请求重试次数和超时时间
const MAX_RETRIES = 3;
const TIMEOUT = 5000; // 5秒超时
function fetchDataWithRetry(url, data, retries = MAX_RETRIES) {
return new Promise((resolve, reject) => {
uni.request({
url,
data,
timeout: TIMEOUT,
success: (res) => {
if (res.statusCode === 200 && res.data) {
resolve(res.data);
} else {
reject(new Error('Invalid response'));
}
},
fail: (err) => {
if (retries > 0) {
// 递归调用自身进行重试
setTimeout(() => fetchDataWithRetry(url, data, retries - 1).then(resolve).catch(reject), 2000); // 等待2秒后重试
} else {
reject(err);
}
}
});
});
}
// 使用示例
fetchDataWithRetry('https://sdk.api.oaid.wocloud.cn/your-endpoint', {
// 请求参数
}).then(data => {
console.log('请求成功:', data);
}).catch(error => {
console.error('请求失败:', error);
});
说明
- 超时设置:通过
timeout
参数设置了请求的超时时间为5秒,避免长时间等待。 - 重试机制:在请求失败时,通过递归调用自身实现重试机制,最多重试3次,每次重试间隔2秒。
- 错误处理:无论是请求成功但响应无效,还是请求失败且重试次数用完,都会进入
catch
块进行错误处理。
通过这种方式,可以在一定程度上缓解因服务端问题导致的请求延迟,提升用户体验。当然,最根本的解决办法还是需要与服务端团队沟通,查找并解决导致延迟的根本原因。