0

0

深入了解如何提高APP性能总结

ringa_lee

ringa_lee

发布时间:2017-09-17 10:19:49

|

1734人浏览过

|

来源于php中文网

原创

摘要:文章从优化手机app的大小、app的API设计、架构设计、自适应显示、快速启动等方面比较全面的介绍了如何提高手机App的性能,以下是译文。

这里写图片描述
去年,我在从伦敦飞回的航班上,遇到一个从事手机行业的人。在过去20年里,他在一个堪称龙头企业的大公司里负责企业新技术的采用。

在我们一起飞行的8个小时里,他提到的一些事情,我最近还一直在思考。他认为移动应用程序及其性能只是不断的交付而已,事实上,他都没法审计手机应用程序的性能到底有了多少显著的提高。

当我在旧金山降落以后,我联络了更多手机行业内的人去了解这个事,发现他们都有类似的看法。代码质量和基础框架是大家讨论的唯一的东西。

我马上想到了该如何在Simform上构建App,去探索一些非常优秀的做法,遵循这些做法,建立基准,突破现有的应用程序,规模可达数十亿美元。

以下因素将大大影响手机应用程序的质量:

  • 应用程序大小

  • 应用程序性能

  • 指定平台的准则

  • 架构设计

现在,让我们看看如何优化它们,以一种简单的方式,易于采用的步骤,使手机应用程序更快。

最小化应用程序的大小

手机没有强大的GPU,然而,低端配置的手机占领着大多数的安卓市场份额。它们甚至不支持2G或3G,下载一个立刻就需要用到的大的应用将是用户的噩梦。在这种低端手机上,应用占用的空间越少越好。 
这里写图片描述

优化网络

文本第一,图像第二

优化网络,先尝试加载文本数据。然后,应用程序中基于图像的内容显示可以异步加载。

避免重复的网络请求

那些安卓中被熟知的Volley应用会清楚更多关于这个请求的问题。当应用程序执行不力的时候,安卓应用可以使用Volley同时发送两个请求到服务器,你可以删除一个请求,请求就会被删除,但是应用程序的反应会是没有这个请求了。不仅仅是功能性的问题,重复的请求也增加了系统的拥塞,降低了应用程序的性能,尤其是在有数以百万的应用程序用户时。设想,如果增加一倍数量的请求,服务器的数量就要增加两倍,那么当想降低成本的时候,就会非常得绝望。

了解并做出基于连接质量的调整

假定一个应用程序需要依据网络条件决定是否可用。应用程序可以根据用户当前所处的网络条件改变交付的内容质量,以确保应用程序的使用不会失败。

有效的API设计

一个API的设计方式将对应用程序性能产生巨大的影响。一个不完整的或者惰性的API设计会增加应用程序的负担。在API上的解决方法通常是对网络的局限性施加了太大的压力。

设计手机应用程序的API负载,确保应用程序具有如下特点:

  • 一致性:开发人员应该了解预期,在api一致性的设计上,没有任何回旋的余地。

  • 完整性:拥有简化的解决方法。

这里写图片描述

从UI开始,一直到数据,都可以以一种伟大的方式来设计一个具有一致性和完整性的API负载,从而提高应用程序的性能。不要从手机发送所有请求到API,只发送实际所需要的请求。

优化应用程序中的图像

优化应用程序中的图像,你可以:

  • 使用矢量图像

  • 提供动态大小的图像

  • 使用颜色过滤器,而不是使用不同的彩色图像集

  • 使用图像缓存

  • 使用像Picasso 和 Fresco这样的库

为脱机优化缓存数据

当网络很差的时候,在获取数据的同时,显示所有你已经取得的数据。这样做会:

  • 减少服务器负载

  • 减少手机无线电使用次数,降低手机App的耗电量

如果没有一个任你支配的测试团队,你可以试着将手机切换到飞行模式,测试应用程序的离线性能。

确保应用程序适合手机屏幕的大小

有许多关于屏幕尺寸的讨论已经被提出来了,Android引起了一些大的关注,因为实际上有数以千计的设备,每个设备都有自己的分辨率和屏幕尺寸。

作为最佳策略:

  • 为中小屏幕搭建

  • 优化MDPI和HDPI

  • 实现自适应的UI流

这里写图片描述

没有成百台设备测试分辨率和屏幕尺寸?用仿真器配置测试。

安卓中的内存使用

为了给手机用户提供多任务的能力,安卓对每一个应用程序使用多少内存做了限制,这些限制不是静态的,是随着手机应用程序的增加或减少而变化的。

要考虑到整个应用程序开发过程中的RAM限制,以及运行在后台的应用程序会占用不必要的资源。

但是,你可以通过以下手段优化应用程序:

  • 限制服务的有效期,考虑采用intent service来限制服务的寿命

  • 当用户切换到不同的界面时,释放UI资源

  • 使用内存高效的代码架构

  • 尽量减少外部库的使用

应用程序启动有多快?

在PlayStore上平均排名前25的应用程序,启动时间从800ms到4.5s。现在,对于大多数用例来说,4.5S太多。

底线是,App需要快速启动!

为了优化iOS应用程序的启动时间,应该考虑如下内容:

  • 嵌入少量的dylib

  • 合并Objective-C类

  • 消除静态的初始化软件

  • 使用更多的Swift,苹果建议的

  • 用DYLD_PRINT_STATISTICS衡量结果

    PHP5 和 MySQL 圣经
    PHP5 和 MySQL 圣经

    本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。

    下载
  • 避免使用dlopen()

在安卓系统中,以下情况通常会影响应用程序启动时间:

  • 多视图实例化

  • 消耗资源高的内容如解码位图

  • 运行布局

让应用程序在安卓系统中更快启动:

  • 不要在第一次启动时显示你不需要的UI部分,使用层次结构占位符,以后可以随意显示

  • 避免由于内存分配而产生的混乱,尽可能的做好垃圾收集

  • 使用像Apteligent的工具去监控和优化应用程序启动时间

  • 避免在应用程序对象中初始化代码

  • 记住,最近推出的一个应用程序,这个第一次推出的应用程序将会有不同的表现。

减少设备唤醒

频繁地唤醒手机会大幅降低系统性能。这会消耗系统资源。可以限制应用程序将会响应的唤醒意图。

考虑低端安卓手机

并非所有的安卓用户都拥有最新的2G+内存的手机。当我们寻找可用的安卓设备时,我们看到设备能力方面的高倍细分。

当大多数开发人员开发和优化应用程序以提高性能时,他们犯了一个大错误。他们为错误的设备优化App,通常可供他们测试使用的都是高端设备。

一个很好的经验法则是,应该有各种各样的设备用来优化app性能。这样,开发人员就可以交叉测试了。

  • 各种速度

  • 界面和分辨率

  • 低内存

平滑的帧速

在iOS和安卓系统中,展示动画和手势的最大帧速是60fps。

低于60fps的帧速,通常用户会感觉到卡顿。

为了达到16ms的帧速(相当于60fps),应用程序中用于显示的代码都需要在16ms以内执行完毕。这就是在安卓系统中你会注意到的地方,用于垃圾收集的5ms时间是多么昂贵。

让我们评估一下这将如何影响最终用户。当你错过了16ms的限制,你经常会得到稍微低的帧速~59fps。这没有什么大不了的,对吧?

错!

实际情况是,如果应用程序错过16ms限制一次,它就不能使用同一帧的窗口,不得不等待下一帧。

虽然应用程序只花了19ms展示,却错过了显示窗口,显示给用户的时间就变成了两倍时长。要知道,这样,用户就会觉得应用程序超级烂。

在新设备上恢复用户数据

用户通常会花大量的时间在手机上设置应用程序,使得应用程序按他们的意愿去工作。当重装应用程序时,大多数用户都希望他们原来的设置依然可用。

保存配置数据有助于提高应用程序质量:

  • 用户修改的任何配置

  • 推送设置通知

  • 用户是否在新的屏幕上已看到欢迎界面和介绍

发现潜在的消耗

从应用程序中移除潜在问题很重要。潜在问题会导致应用程序错误,并且常常会破坏整个应用程序。统计表明:如果一个应用程序运行缓慢,超过50%的用户会在24小时内卸载应用。

有效处理潜在的相关问题:

当网络状况不好时,你可以限制第三方的潜在问题因素源

减少可能在手机上用到有潜在消耗的API的需求

优化iOS应用程序以处理多任务

假定有一个用户在用你的应用程序,应用程序会以60fps很好的展示,在9ms内完成所有的工作。如下图所示: 
这里写图片描述

现在,用户在手机上打开第二个应用,也大约需要7ms完成所有工作。现在看起来如下图: 
这里写图片描述

可以看到为了以60fps的帧速展示,两个应用程序组合用了16ms时间。

设若用户以60fps帧速打开另外一个应用,10ms完成工作。现在的用时就是9+7+10=26ms,这意味着应用程序的演示帧速是40fps,而不是60fps。

这里写图片描述
应用程序的用户开始注意到程序的卡顿,GPU和内存也几乎有相同的情况。

还记得应用程序不断崩溃的情况吗?

好了,让我们来看一看在设备上运行的一个应用程序的场景。

现在,在场景内引入另外一个应用程序,我们仍然做的很好,并且还留有一些内存。

当我们在场景中再引入一个应用程序时,系统没有可分配的内存了。系统将杀掉一个进程以释放资源。

这就是为什么应用程序的开发如此具有挑战性的原因(对于那些真正关心它的人来说)

解决这些挑战需要对iOS生态系统有一点了解。让我们看看如何优化应用程序的多任务处理:

  • 你可以使用工具来识别和修复错误

  • 合理安排工作优先级,不要阻塞主线程

  • 识别和管理工具集

  • 使用缓存并响应内存告警

  • 利用虚拟内存系统增加内存回收

  • 做好权衡

如果有人能遵循这其中的50%,将会发现应用程序的性能有了很大的提高。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

109

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

16

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

136

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

7

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

6

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

122

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

35

2026.01.26

oppo云服务官网登录入口 oppo云服务登录手机版
oppo云服务官网登录入口 oppo云服务登录手机版

oppo云服务https://cloud.oppo.com/可以在云端安全存储您的照片、视频、联系人、便签等重要数据。当您的手机数据意外丢失或者需要更换手机时,可以随时将这些存储在云端的数据快速恢复到手机中。

121

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 9.5万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号