uniapp:配置动态接口域名,根据图片访问速度,选择最快的接口

common.js

// 动态测速选择的域名
// h5直接返回默认第一个域名
// vue文件用到域名的话用this.$baseURL
let domains = [{uri:'192.168.31.215:9523', speed:0},{uri:'api.ceshi.org', speed:0},
]export const protocol = {api: 'http://',//本地// api: 'https://api.',//正式h5Url: 'https://www.',//正式downAPPUrl: 'https://download.'//正式
}export async function getDomain(){const result = new Promise((resolve, reject)=>{testSpeed().then(res=>{resolve(res)}).catch(()=>{resolve(domains[0].uri)})})return result
}// 得出最快的域名
// speedTest.jpg 需要提前放到服务器上,根据图片的访问速度来选择请求的接口
function testSpeed(){return new Promise((resolve, reject)=>{let array = []domains.forEach((item, index) => {array.push(getSpeedWithAjax(`${protocol.api}${item.uri}/images/speedTest.jpg`))})Promise.all(array).then(res=>{console.log(res);domains.forEach((e,i)=>{e.speed = res[i]})let arr = sort_uris(domains)resolve(arr[0].uri)}).catch((err)=>{console.log(err);reject()})})}
// 测速后排序数组
function sort_uris(array) {let compare = function(obj1, obj2) {var val1 = obj1.speed;var val2 = obj2.speed;if (val1 < val2) {return -1;} else if (val1 > val2) {return 1;} else {return 0;}}return array.filter((num) => {return num.speed > 0;}).sort(compare)
}function getSpeedWithAjax(url){return new Promise((resolve, reject) => {let start = null;let end = null;start = new Date().getTime();const xhr = uni.request({url,timeout:2000,success: () => {end = new Date().getTime();resolve(end - start)},fail: () => {resolve(0)}});})
}

main.js

import { getDomain, protocol } from '@/utils/common.js' //公共方法
getDomain().then(domain=>{console.log(domain);// H5地址let h5Url = `${protocol.h5Url}${domain}`// APP下载地址let downAPPUrl = `${protocol.downAPPUrl}${domain}`// 接口let baseUrl = `${protocol.api}${domain}`uni.$emit('urlChange',{baseUrl})Object.assign(Vue.prototype, {'$downAPPUrl':downAPPUrl,'$h5Url':h5Url,'$imgUrl':baseUrl,})const app = new Vue({...App,i18n})app.$mount()
})

request.js

let baseURL;
uni.$on('urlChange',data=>{baseURL = data.baseUrl
})
// 这个baseURL  就是根据图片访问速度 动态获取到的接口url
console.log(baseURL)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于JAVA+SpringBoot的新闻发布平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着科技的飞速发展和…

IO流 之 缓冲流(字节缓冲流和字符缓冲流)

缓冲流对原始流进行了包装&#xff0c;以提高原始流读写数据的性能。 字节缓冲流&#xff08;BufferedInputStream和BufferedOutputStream&#xff09; 字节缓冲流在内存中提供了一个默认为8kb的区域&#xff0c;用于缓冲&#xff0c;当流开始时&#xff0c;先读取一个8kb的内…

blender快捷键

1&#xff0c; shift a 添加物体 2&#xff0c;ctrl alt q 切换四格视图 3, ~ 展示物体的各个视图按钮&#xff0c;&#xff08;~ 就是tab键上面的键&#xff09; 4&#xff0c;a 全选&#xff0c;全选后&#xff0c;点 ctrl 鼠标框选 减去已经选择的&#xff1b…

车道线分割检测

利用opencv&#xff0c;使用边缘检测、全局变化梯度阈值过滤、算子角度过滤、HLS阈值过滤的方法进行车道线分割检测&#xff0c;综合多种阈值过滤进行检测提高检测精度。 1.利用cv2.Sobel()计算图像梯度(边缘检测) import cv2 import numpy as np import matplotlib.pyplot a…

skywalking入门

参考&#xff1a; https://www.jianshu.com/p/ffa7ddcda4ab 参考&#xff1a; https://developer.aliyun.com/article/1201085 skywalking&#xff08;APM&#xff09; 调用链路分析以及应用监控分析工具 Skywalking主要由三大部分组成&#xff1a;agent、collector、webapp-…

一文详解 JDK1.8 的 Lambda、Stream、LocalDateTime

Lambda Lambda介绍 Lambda 表达式(lambda expression)是一个匿名函数&#xff0c;Lambda表达式基于数学中的λ演算得名&#xff0c;直接对应于其中的lambda抽象(lambda abstraction)&#xff0c;是一个匿名函数&#xff0c;即没有函数名的函数。 Lambda表达式的结构 一个 Lamb…

十六.镜头知识之工业镜头的质量判断因素

十六.镜头知识之工业镜头的质量判断因素 文章目录 十六.镜头知识之工业镜头的质量判断因素1.分辨率(Resolution)2.明锐度(Acutance)3.景深(DOF)&#xff1a;4. 最大相对孔径与光圈系数5.工业镜头各参数间的相互影响关系5.1.焦距大小的影响情况5.2.光圈大小的影响情况5.3.像场中…

CISSP学习笔记:人员安全和风险管理概念

第二章 人员安全和风险管理概念 2.1 促进人员安全策略 职责分离: 把关键的、重要的和敏感工作任务分配给若干不同的管理员或高级执行者&#xff0c;防止共谋工作职责:最小特权原则岗位轮换:提供知识冗余&#xff0c;减少伪造、数据更改、偷窃、阴谋破坏和信息滥用的风险&…

点云从入门到精通技术详解100篇-基于深度学习的三维植物点云分割网络(续)

目录 3.7定量衡量指标 3.8 语义分割结果 3.9实例分割结果 3.10 与其他方法的对比 3.11 剥离实验

快速幂矩阵-python

看了大神讲解&#xff0c;理论在这里&#xff1a;快速幂算法&#xff08;全网最详细地带你从零开始一步一步优化&#xff09;-CSDN博客 例题&#xff1a;求整数 base 的 整数 power 次方&#xff0c;对整数 num_mod 取幂。 python 代码如下&#xff1a; import timedef norm…

LabVIEW在运行时调整表控件列宽

LabVIEW在运行时调整表控件列宽 如何在LabIEW中运行时调整表控件的列宽大小&#xff1f; 在VI运行时&#xff0c;有两种不同的方法可以更改表中列的宽度。首先&#xff0c;可以使用鼠标手动更改它们;其次&#xff0c;可以从框图中以编程方式更改它们。 手动更改列宽 只有在…

设计模式——8. 代理模式

1. 说明 代理模式(Proxy Pattern)是一种结构型设计模式,它允许一个对象(代理对象)充当另一个对象(真实对象)的接口,以控制对该对象的访问。代理对象在访问真实对象时可以执行一些额外的操作,例如权限验证、懒加载、缓存、日志记录等,而无需修改真实对象的代码。 代…

IPsec_SSL VPN身份鉴别过程简要

一、IPsec VPN身份鉴别&#xff08;参考国密标准《GMT 0022-2014 IPsec VPN技术规范》&#xff09; IKE第一阶段&#xff08;主模式&#xff09; “消息2”由响应方发出&#xff0c;消息中具体包含一个SA载荷&#xff08;确认所接受的SA提议&#xff09;、响应方的签名证书和…

MySQL 运维常用脚本

常用功能脚本 1.导出整个数据库 mysqldump -u 用户名 -p –default-character-setlatin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件…

在HTTP请求中安全传输base64编码的字符串

前言 base64是一种常见的的编码格式&#xff0c;它可以把二进制数据编码成一个由大小写英文字母&#xff08;a-zA-Z&#xff09;、阿拉伯数字&#xff08;0-9&#xff09;&#xff0c;以及三个特殊字符、/、组成的字符串。 问题 但是在URL传输中&#xff0c;、/、这三个特殊…

基于AI图像识别的智能缺陷检测系统,在钢铁行业的应用-技术方案

目录 概述 废钢智能检判方案简介 废钢智能检判系统优势及价值 废钢人工检判过程 废钢等级检判标准 废钢检判结果 智能检判方案-废钢智能检判算法 算法一&#xff1a;废钢等级识别算法 算法二&#xff1a;不合格料的位置识别算法 算法三&#xff1a;不合格料的类型识别…

第一百五十七回 SliverList组件

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了沉浸式状态栏相关的内容&#xff0c;本章回中将介绍SliverList组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在这里介绍的SliverList组件是一种列表类组件&#xff0c;类似我们之前介绍过的L…

【再识C进阶3(下)】详细地认识字符分类函数,字符转换函数和内存函数

前言 &#x1f493;作者简介&#xff1a; 加油&#xff0c;旭杏&#xff0c;目前大二&#xff0c;正在学习C&#xff0c;数据结构等&#x1f440; &#x1f493;作者主页&#xff1a;加油&#xff0c;旭杏的主页&#x1f440; ⏩本文收录在&#xff1a;再识C进阶的专栏&#x1…

全网最全面最精华的设计模式讲解,从程序员转变为工程师的第一步

前言 现代社会&#xff0c;技术日新月异&#xff0c;要想跟上技术的更新就必须不断学习&#xff0c;而学习技术最有效方式就是阅读优秀的源码&#xff0c;而优秀的源码都不是简单的逻辑堆积&#xff0c;而是有很灵活的设计模式应用其中&#xff0c;如果我们不懂设计模式&#…

单例模式:饿汉式

单例模式全局仅一个实例&#xff0c;用于获取公共的内容 头文件mglobalinfomgr.h class MGlobalInfoMgr {MGlobalInfoMgr();~MGlobalInfoMgr(); public:static MGlobalInfoMgr* GetInstance(); private:static MGlobalInfoMgr* _instance; }; 源文件mglobalinfomgr.cpp MGl…