文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

微信小程序弱网监控

2023-09-27 16:02

关注

前言

在真实的项目中,我们为了良好的用户体验,会根据用户当前的网络状态提供最优的资源,例如图片或视频等比较大的资源,当网络较差时,可以提供分辨率更低的资源,能够让用户尽可能快的看到有效信息,而不是一直白屏等待。

那如何设计一个生产环境可用的小程序当前网络状态监测系统。主要考虑以下几个方面:

实现

细节步骤

代码展示

js

// import eventBus from './eventBus';const NETWORK_STATUS = {    OFFLINE: 'offline',    POOR: 'poor',    GOOD: 'good',    WONDERFUL: 'wonderful'}// 小于1000表示网络极好,1000至1500则表示good 超过1500表明是弱网。const DOWNLOAD_TIME = [1000, 1500];const MAX_COUNT = 10;let count = 0;function getNetworkType() {    return new Promise((resolve) => {        wx.getNetworkType({            success(res) {                resolve(res);            },            fail(err) {                resolve(err);            }        })    })}const getNetworkStatus =  (opt) => {    return new Promise((resolve) => {        try {            let networkType = opt && opt.networkType;            let networkStatus = NETWORK_STATUS.WONDERFUL;            if (!networkType) {                networkType = getNetworkType().then(({networkType}) => {                    if (['unknown', 'none'].includes(networkType)) {                        emitNetworkStatus(NETWORK_STATUS.OFFLINE);                        return resolve(NETWORK_STATUS.OFFLINE);                    }                    if (['2g', '3g'].includes(networkType)) {                        emitNetworkStatus(NETWORK_STATUS.POOR);                        return resolve(NETWORK_STATUS);                    }                    const startTime = +new Date();                    requestImage().then((result) => {                        const requestTime = +new Date() - startTime;                    if (requestTime < DOWNLOAD_TIME[0]) {networkStatus = NETWORK_STATUS.WONDERFUL;                        } else if (requestTime > DOWNLOAD_TIME[1]) {networkStatus = NETWORK_STATUS.POOR;                        } else {networkStatus = NETWORK_STATUS.GOOD;                        }                        emitNetworkStatus(networkStatus);                        return resolve(networkStatus);                    })       });            }        } catch (error) {            resolve(NETWORK_STATUS.WONDERFUL);        }    })   }function run() {    if (count >= MAX_COUNT) {        return;    }    const timer = setTimeout( () => {        getNetworkStatus().then(networkStatus => {            count += 1;            if ([NETWORK_STATUS.POOR, NETWORK_STATUS.GOOD].includes(networkStatus)){                run();            }        })        clearTimeout(timer);    }, 5000)}function start(opt) {    const timer = setTimeout( () => {        getNetworkStatus(opt).then(networkStatus => {            if ([NETWORK_STATUS.POOR, NETWORK_STATUS.GOOD].includes(networkStatus)) {                run();            }        })                clearTimeout(timer);    }, 1000)}function requestImage() {    return new Promise((resolve) => {        wx.request({            url: 'https://file.lsjlt.com/upload/f/202309/27/jo1ub3k0zq2.png',            data: {                time: +new Date(),            },            success(res) {                resolve(res);            },            fail() {                resolve()            }        })    })}function emitNetworkStatus(networkStatus) {    const app = getApp();    const oldNetwordStatus  = app.globalData.networkStatus;    // 只有本次状态与上一次存储的不一致才会对外发送。    if (oldNetwordStatus !== networkStatus) {        app.globalData.networkStatus = networkStatus;        // 通过全局的事件系统,将结果发送出去        // eventBus.emit('networkChange', networkStatus, oldNetwordStatus);        }}export const networkController = {    start,};

eventBus功能可以根据自己的项目自行封装,这里不再多述。

调用时机

js

 wx.onNetworkStatusChange((res) => {      networkController.start(res);    })

总结

作为一个c端产品,针对弱网的优化是必不可少的。用户体验问题要一直放在最重要的位置,作为开发人员要时刻关注这些点,以免给用户造成不好的体验。

如果有更好的意见,辛苦评论区指出,共同学习,共同提高。

来源地址:https://blog.csdn.net/weixin_43837268/article/details/131927111

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯