HarmonyOS优化应用文件上传下载慢问题性能优化

一、概述

在开发应用时,客户端与服务器之间数据交换的效率取决于文件传输的性能。一个数据交换性能较低的应用会导致其在加载过程中耗费较长时间,在很多的场景造成页面卡顿,极大的影响了用户体验。相反,一个数据交换高效的应用,则会让应用变得更加流畅。

本文将介绍两种常见的上传下载传输和网络请求的关键技术:数据压缩和断点续传,可减少宽带占用,提高传输效率,从而达到提升数据交换性能。

二、上传下载接口

(一)主要功能

目前系统内提供给文件上传下载可用的模块有http模块和request模块。http模块提供基础的HTTP数据请求能力,功能较为基础,本文不做介绍。request模块主要给应用提供上传下载文件、后台传输代理的基础能力。它具备任务管理系统的默认并发功能,可简化下载功能的实现和管理,提升数据传输的安全性,整合通知机制,新增任务状态与进度查询功能,具有灵活性、高效性、可扩展性、可靠性、一致性和安全性的优势。

具体来说,request模块包括以下功能:

任务管理:任务管理操作包括创建任务、暂停任务、恢复任务、删除任务、文件上传、文件下载、系统通知等。创建的任务分为前端任务和后台任务。前端任务是立即的、模态界面的、同步的,跟随应用的生命周期,通常数据量较小、耗时短,例如发布微信朋友圈、微博,通常优先级高且倾斜带宽资源。后台任务为可等待的、任意界面的、异步的,通常数据量较大、耗时长,例如缓存一部电影、同步数百兆字节乃至若干吉字节的数据,优先级相较于前端任务低且与应用生命周期无关。

任务查询管理:系统查询所有任务、过滤上传任务、过滤下载任务、过滤时间段内任务、过滤前端任务、过滤后台任务、用户查询指定任务信息、用户查询指定隐藏任务信息、系统查询指定任务信息、系统清理指定任务等。

任务自动恢复:网络条件不满足时任务不启动或者暂停,满足后自动启动或者恢复(需要HTTP服务器支持断点续传)。

安全隐私保护:包括网络权限检查、安全处理接口操作、任务信息加密存储、接口检查、接口查询隐匿任务敏感字段、遍历攻击、DOS、僵尸任务、恶意的静默后台任务、系统管理接口权限等。

日志:包括调试模式和发布模式。调试模式可打印所有内存修改、磁盘、网络读写、逻辑分支等日志。发布模式下除了导致任务失败、服务异常的日志,其余日志都会关闭。

任务失败重试:对于不可恢复的原因,直接失败;对于可恢复的原因,网络断开、网络类型不匹配等,不现场重试,任务到等待网络恢复队列;网络超时则就地重试1次,仍网络超时,则立即失败。

服务按需启停:上传下载服务不随系统自启。应用主动调用任意接口,上传下载服务自动启动。网络连接事件会触发上传下载服务启动。在任务队列中,没有正在处理的任务,或者等待网络恢复的任务,延迟一段时间,再check一次,仍旧没有的,则通知系统服务框架(SAMGR)可以停止并卸载上传下载服务。在服务退出过程中,新的接口请求可能失败,在客户端检查服务状态、通过重试按需启动。

通知:任务从第一次开始到最终结束都应该有进度通知。目前采用固定时间间隔触发进度通知,前台任务1秒,后台任务3秒。任务状态的每次变化也要触发进度通知。当任务完成和失败,则触发其专用的进度通知。提供了抑制开关,可以在创建任务时打开,以避免频繁通知。

(二)下载任务的状态迁移流程

使用request模块执行下载的任务,具有四种运行状态:初始任务、就绪任务、挂起任务、待网任务。可以通过create创建任务,start开始任务,pause挂起任务,resume恢复任务,remove移除任务,stop停止任务,任务结果有final-failed任务失败,final-completed下载完成,recoverable-failed重试失败,并支持查询任务状态,具体流程如下图所示:

图1 模块流程图


本文主要引用参考HarmonyOS官方文档

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

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

相关文章

64、【OS】【Nuttx】任务休眠与唤醒:clock_nanosleep

背景 之前的 blog 63、【OS】【Nuttx】任务休眠与唤醒:sleep 分析了任务休眠中的 sleep 函数,下面继续来分析下 sleep 函数中的核心功能 clock_nanosleep clock_nanosleep usleep 上篇 blog 分析了 sleep 函数,其核心功能封装到了 clock_…

【生产实践】华为存储XSG1在RHEL 7.x/8.x上的多路径配置操作手册(生产环境)

一、概述 本手册针对Red Hat Enterprise Linux 7.x/8.x系统与华为XSG1存储设备的多路径I/O(MPIO)配置,通过优化路径策略实现高可用、负载均衡及故障容错,适配华为存储硬件特性,满足生产环境需求。 二、参数解析与配置…

Unity开发之Webgl自动更新程序包

之前让客户端更新webgl程序是在程序里写版本号然后和服务器对比,不同就调用 window.location.reload(true);之前做的客户端都是给企业用,用户数少看不出来啥问题。后来自己开发一个小网站,用户数量还是挺多,然后就会遇到各种各样的…

一个开源脚本,可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内容

​一、软件介绍 文末提供程序和源码下载 一个开源脚本,可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内容。 二、ROCm-AI-Installer ROCm-AI-安装程序 一个开源脚本,可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内…

【Axure结合Echarts绘制图表】

1.绘制一个矩形,用于之后存放图表,将其命名为test: 2.新建交互 -> 载入时 -> 打开链接: 3.链接到URL或文件路径: 4.点击fx: 5.输入: javascript: var script document.createEleme…

Relooking:损失权重λ 、梯度权重α、学习率η

一般多任务,大家都喜欢叠加很多损失,由此产生很多损失权重系数。此外,有的学者直接对梯度进行操作。咋一看,上面三个系数貌似重复多余,直接用其中一个系数代替不行吗?为此,回顾了下神经网络的前…

数学复习笔记 20

复习方程组,还有随便复习一下高数和矩阵,向量。现在是复习高数的导数这一章。两个曲线相切,列出方程,然后解出参数,没有任何难度呢。算切线方程,就是,算导数,导数就用导数定义&#…

Sqlalchemy 连mssql坑

连接失败: (pyodbc.OperationalError) (08001, [08001] [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:0A00014D:SSL routines::legacy sigalg disallowed or unsupported] (-1) (SQLDriverConnect)) (Background on this error at: https://sqlalche.me/e/…

AI大模型学习三十、ubuntu安装comfyui,安装插件,修改返回405 bug,值得一看喔

一、说明 ComfyUI是一个开源的、基于节点的Web应用。它允许用户根据一系列文本提示(Prompt)生成图像。 ComfyUI使用扩散模型作为基础模型,并结合 ControlNet、Lora和LCM低阶自适应等模型,每个工具都由程序中的一个节点表示 二、开…

MySQL(40)如何使用DROP TABLE删除表?

DROP TABLE 语句用于从数据库中永久删除一个表及其所有数据。执行该语句后,表结构和数据都将被彻底删除,且无法恢复。因此,在执行 DROP TABLE 操作之前,请确保已备份好相关数据。 基本语法 DROP TABLE table_name;如果要删除多个…

element ui 表格 勾选复选框后点击分页不保存之前的数据问题

element ui 表格 勾选复选框后点击分页不保存之前的数据问题 给 el-table上加 :row-key"getRowKey"给type“selection” 上加 :reserve-selection"true"

vite常见面试问题

一、Vite 核心原理 1. Vite 为什么比 Webpack 快? 答案: Vite 的核心优势在于开发环境和生产环境的双重优化: 开发环境: 基于原生 ESM(ES Modules):浏览器直接加载 ES 模块,无需打包,启动时间极短(毫秒级)。按需编译:仅编译当前页面所需的模块,而非整个项目。预…

Screen 连接远程服务器(Ubuntu)

连接 1. 安装screen 默认预安装&#xff0c;可以通过命令查看&#xff1a; screen --version 若未安装&#xff1a; # Ubuntu/Debian sudo apt-get install screen 2. 本机连接远程服务器 ssh root192.168.x.x 在远程服务器中打开screen&#xff1a; screen -S <nam…

Flutter GridView网格组件

目录 常用属性 GridView使用配置 GridView.count使用 GridView.extent使用 GridView.count Container 实现列表 GridView.extent Container 实现列表 GridView.builder使用 GridView网格布局在实际项目中用的也是非常多的&#xff0c;当我们想让可以滚动的元素使用矩阵…

Jenkins实践(8):服务器A通过SSH调用服务器B执行Python自动化脚本

Jenkins实践(8):服务器A通过SSH调用服务器B执行Python自动化脚本 1、需求: 1、Jenkins服务器在74上,Python脚本在196服务器上 2、需要在服务器74的Jenkins上调用196上的脚本执行Python自动化测试 2、操作步骤 第一步:Linux Centos7配置SSH免密登录 Linux Centos7配置S…

C#二维码:利用 ThoughtWorks.QRCode 库实现二维码生成与解析

C#二维码&#xff1a;利用 ThoughtWorks.QRCode 库实现二维码生成与解析 在当今数字化信息交互频繁的时代&#xff0c;二维码凭借其信息容量大、容错能力强、易识别等特点&#xff0c;广泛应用于各个领域。从移动支付、产品溯源到活动签到&#xff0c;二维码无处不在。在 C# 开…

【Java Web】速通JavaScript

参考笔记:JavaWeb 速通JavaScript_javascript 速通-CSDN博客 目录 一、JavaScript快速入门 1. 基本介绍 2. JavaScript特点 3. JavaScript的引入方式(重要) 3.1 写在script标签中 ​​​​​3.2 以外部文件方式引入 二、JS的数据类型 1. 变量 2. 常用数据类型 3.特殊值 三、…

Python打卡训练营-Day13-不平衡数据的处理

浙大疏锦行 知识点&#xff1a; 不平衡数据集的处理策略&#xff1a;过采样、修改权重、修改阈值交叉验证代码 过采样 过采样一般包含2种做法&#xff1a;随机采样和SMOTE 过采样是把少的类别补充和多的类别一样多&#xff0c;欠采样是把多的类别减少和少的类别一样 一般都是缺…

Mac OS 使用说明

Mac 的启动组合键 了解可通过在启动时按住一个或多个按键来访问的 Mac 功能和工具。 若要使用这些组合键中的任何一个&#xff0c;请在按下电源按钮以开启 Mac 后或在 Mac 开始重新启动后&#xff0c;立即按住相应按键。请一直按住&#xff0c;直至电脑出现对应的行为。 !!!上…

LoadRunner 是什么

LoadRunner 是一款由 Micro Focus&#xff08;原惠普企业软件部门&#xff09;开发的性能测试工具&#xff0c;广泛应用于软件、应用程序和系统的 负载测试、压力测试 和 性能分析。它通过模拟大量用户并发操作&#xff0c;帮助测试人员评估系统在高负载下的性能、稳定性和可扩…