首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >调用多个app会降低应用程序的加载速度吗?

调用多个app会降低应用程序的加载速度吗?
EN

Stack Overflow用户
提问于 2019-10-18 09:47:24
回答 1查看 400关注 0票数 0

因此,我使用互联网上可用的App制作了一个新闻应用程序。所以我不得不为每个不同的类别使用不同的API。有超过9个类别,所以这使得我的应用程序加载非常慢。那么,这个问题的解决方案是什么?我怎么可能只在初始状态调用两个app,而在应用程序加载一段时间后调用其余的app。请参见以下代码:

代码语言:javascript
运行
AI代码解释
复制
class NewsCard extends StatefulWidget {
  @override
  _NewsCardState createState() => _NewsCardState();
}

class _NewsCardState extends State<NewsCard>
    with SingleTickerProviderStateMixin {

  TabController tabController;
  static DateTime now = DateTime.now();
  String formattedDate;
  List newsData;
  List topNews1;
  List businessNews1;
  List worldNews1;
  List sportsNews1;
  List entertainmentNews1;
  List educationNews1;
  List tvnews1;
  List electionNews1;
  List lifeNews1;
  bool isLoading = true;
  final String toi= "https://timesofindia.indiatimes.com/";
  final String topNews =
      "API url";
  final String sportsNews =
      "API url";

  final String businessNews =
      "API url";

  final String worldNews =
      "API url ";
  final String entertainmentNews =
      "API url ";
  final String educationNews =
      "API url";
  final String tvNews =
      "API url ";
  final String electionNews =
      "API url";
  final String lifeNews =
      "API url";

  final String url =
      "https://newsapi.org/v2/top-headlines?sources=google-news-in&apiKey=";

  Future getData() async {
    var response = await http.get(
      Uri.encodeFull(url),
      headers: {
        HttpHeaders.authorizationHeader: ""
      },
    );
    var response1 = await http.get(
      Uri.encodeFull(topNews),
    );
    var response2 = await http.get(
      Uri.encodeFull(businessNews),
    );
    var response3 = await http.get(
      Uri.encodeFull(worldNews),
    );
    var response4 = await http.get(
      Uri.encodeFull(sportsNews),
    );
    var response5 = await http.get(
      Uri.encodeFull(entertainmentNews),
    );
    var response6 = await http.get(
      Uri.encodeFull(tvNews),
    );
    var response7 = await http.get(
      Uri.encodeFull(lifeNews),
    );
    var response8 = await http.get(
      Uri.encodeFull(electionNews),
    );
    var response9 = await http.get(
      Uri.encodeFull(educationNews),
    );
    List data = jsonDecode(response.body)['articles'];
    List topNewsData = jsonDecode(response1.body)['stories'];
    List businessNewsData = jsonDecode(response2.body)['items'][0]['stories'];
    List worldNewsData = jsonDecode(response3.body)['items'][0]['stories'];
    List sportsNewsData = jsonDecode(response4.body)['items'][0]['stories'];
    List entertainmentNewsData = jsonDecode(response5.body)['items'][0]['stories'];
    List tvNewsData = jsonDecode(response6.body)['items'][0]['stories'];
    List lifeNewsData = jsonDecode(response7.body)['items'][0]['stories'];
    List electionsNewsData = jsonDecode(response8.body)['items'][0]['stories'];
    List educationNewsData = jsonDecode(response9.body)['items'][0]['stories'];
    setState(() {
      newsData = data;
      topNews1 = topNewsData;
      businessNews1 = businessNewsData;
      worldNews1 = worldNewsData;
      sportsNews1 = sportsNewsData;
      entertainmentNews1 = entertainmentNewsData;
      tvnews1 = tvNewsData;
      lifeNews1=lifeNewsData;
      electionNews1 = electionsNewsData;
      educationNews1  = educationNewsData;
      isLoading = false; //this is for the initial loading, this is taking too much of time.
    });
  }

  @override
  void initState() {
    super.initState();
    this.getData();
    tabController = TabController(vsync: this, length: 9);
  }

脚手架内

代码语言:javascript
运行
AI代码解释
复制
isLoading
                ?Column(....):Column(.....)

请记住,我是一个初学者,所以如果我的方法是错误的,那么请善意地要求我做完美的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-18 11:13:35

由于不同的api调用之间没有依赖关系(api调用1不需要等待api调用0完成),因此最好将它们全部启动并等待结束时的结果。所以不要对每个应用程序接口调用都使用await。取而代之的是使用Future.wait来等待所有的期货。类似于:

代码语言:javascript
运行
AI代码解释
复制
  Future getData() async {
    List<Future> responseFutures = [
      http.get(
        Uri.encodeFull(url),
        headers: {HttpHeaders.authorizationHeader: ""},
      ),
      http.get(
        Uri.encodeFull(topNews),
      ),
      http.get(
        Uri.encodeFull(businessNews),
      ),
      http.get(
        Uri.encodeFull(worldNews),
      ),
      http.get(
        Uri.encodeFull(sportsNews),
      ),
      http.get(
        Uri.encodeFull(entertainmentNews),
      ),
      http.get(
        Uri.encodeFull(tvNews),
      ),
      http.get(
        Uri.encodeFull(lifeNews),
      ),
      http.get(
        Uri.encodeFull(electionNews),
      ),
      http.get(
        Uri.encodeFull(educationNews),
      ),
    ];
    List responses = await Future.wait(responseFutures);

    List data = jsonDecode(responses[0].body)['articles'];
    List topNewsData = jsonDecode(responses[1].body)['stories'];
    List businessNewsData = jsonDecode(responses[2].body)['items'][0]['stories'];
    List worldNewsData = jsonDecode(responses[3].body)['items'][0]['stories'];
    List sportsNewsData = jsonDecode(responses[4].body)['items'][0]['stories'];
    List entertainmentNewsData = jsonDecode(responses[5].body)['items'][0]['stories'];
    List tvNewsData = jsonDecode(responses[6].body)['items'][0]['stories'];
    List lifeNewsData = jsonDecode(responses[7].body)['items'][0]['stories'];
    List electionsNewsData = jsonDecode(responses[8].body)['items'][0]['stories'];
    List educationNewsData = jsonDecode(responses[9].body)['items'][0]['stories'];
    setState(() {
      newsData = data;
      topNews1 = topNewsData;
      businessNews1 = businessNewsData;
      worldNews1 = worldNewsData;
      sportsNews1 = sportsNewsData;
      entertainmentNews1 = entertainmentNewsData;
      tvnews1 = tvNewsData;
      lifeNews1 = lifeNewsData;
      electionNews1 = electionsNewsData;
      educationNews1 = educationNewsData;
      isLoading = false; //this is for the initial loading, this is taking too much of time.
    });
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58448234

复制
相关文章
使用openssl创建https证书
从今天开始笔者打算和大家聊一聊http2这个协议,想要说清楚http2协议就必须亲手搭建一个http2的服务,并且对比http2和http1.1的特点,从而了解http2的一些新特性。
挥刀北上
2019/12/04
31.7K0
使用openssl创建https证书
使用OpenSSL创建CA和申请证书
OpenSSL是一种加密工具套件,可实现安全套接字层(SSL v2 / v3)和传输层安全性(TLS v1)网络协议以及它们所需的相关加密标准。
星哥玩云
2022/07/31
2.7K0
使用OpenSSL创建CA和申请证书
EJBCA使用之注册用户及创建证书
研究ejbca源码快一个月了,从openipmp中的老版ejbca到最新的4.0.15,感觉看别人代码实在太痛苦了,而且之前自己对ejb并不是很熟悉,还必须自己重新学了一点基本的ejb知识。 我最开始是研究openipmp的,里面自带就有ejbca的jar包,所以一开始我看openipmp怎么调用ejbca就行,但是由于openipmp实在太老了,它使用的ejbca是遵守ejb2.1标准的,调用起来实在太复杂太麻烦了,所以经过一周后我彻底放弃它,重新看最新版的ejbca。 最新版的ejbca可以从官网下,官
forrestlin
2018/05/23
1.6K0
openssl 创建 pfx 证书
生成证书请求文件,需要填写信息,例如:cn/gd/zh/sourcecode/bdc/www.a.com
全栈程序员站长
2022/08/15
8830
C#创建https请求并使用pfx证书
WebRequest req = WebRequest.Create(url);
拓荒者IT
2019/09/26
1.5K0
26 Dec 2021 使用cfssl创建自签名证书
可以通过执行cfssl print-defaults config创建默认的配置文件,然后再修改。
俊采
2023/10/17
2590
创建动态库时,建议使用的链接选项Bsymbolic
回归正题,前段时间项目开发中,实现了一个动态库,封装了一些方法。然后基于这个动态库,实现了一个应用程序。应用程序中含有全局变量A,动态库中也含有全局变量A,当我调用动态库中函数后,发现应用程序的A发生了变化!!!O,My God!对于我这种还没在Linux下做过开发的人来说,一头雾水。。。。。。 于是我尝试着,将A中的变量名称改为B,这样问题也就没有了~~~
河边一枝柳
2021/08/06
1.7K0
内网创建私有CA证书
关建立私有CA证书 OpenSSL: 三个组件: openssl: 多用途的命令行工具; libcrypto: 加密解密库; libssl:ssl协议的实现; # PKI:Public Key Infrastructure # CA # RA # CRL # 证书存取库 # 建立私有CA: # OpenCA # openssl # 证书申请及签署步骤: # 1、生成申请请求; # 2、RA核验; # 3、CA签署; # 4、
小柒吃地瓜
2020/04/23
2.7K0
SSL证书创建与部署
SSL证书简介 SSL证书创建 SSL证书部署-Nginx SSL证书部署-Apache SSL证书部署-Tomcat
达达前端
2019/10/28
1.6K0
SSL证书创建与部署
创建本地 LocalHost SSL 证书
程序开发时,避免不了使用https加密通信,可以通过 openssl 工具来生成 ssl 证书,对于不懂的开发来说,openssl 工具是太难使用。有没有一个好用又简单的工具,可以试一试这个用Go语言写的命令行工具:mkcert,非常简单易用。
YP小站
2020/06/04
3.6K0
创建本地 LocalHost SSL 证书
如何创建自签名证书
TLS/SSL是用于将正常流量包装在受保护的加密包装中的Web协议。得益于此技术,服务器可以在服务器和客户端之间安全地发送流量,而不会被外部各方拦截。证书系统还可以帮助用户验证他们正在连接的站点的身份。在本教程中,我们将向您展示如何在Ubuntu 18.04上设置用于Apache Web服务器的自签名SSL证书。
小铁匠米兰的v
2018/08/17
2.1K0
安卓证书在线生成,创建安卓证书
打包安卓应用时,需要对应的证书文件,目前很多前端使用混合开发平台,制作证书需要java的jdk环境,jdk就是几百兆,下载完了还要配置环境变量,大大浪费了我们的开发时间,使用工具在线帮你制作,全程网页操作,填个别名和密码就可以立即帮你生成证书。
英曼畅学
2023/04/23
2.1K0
HTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSL证书实战
对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好。 http协议没有任何的加密以及身份验证的机制,即时是token认证,也非常容易遭遇窃听、劫持、篡改,因此会造成个人隐私泄露,恶意的流量劫持等严重的安全问题。
麦克劳林
2019/12/23
26.9K0
iOS创建苹果证书、制作p12证书流程
1、在苹果开发者后台点击右上角【Account】进入以下界面,然后点击【Certificates, Identifiers & Profiles】
爱学iOS的小麦子
2022/10/18
1.9K0
iOS创建苹果证书、制作p12证书流程
iOS创建苹果证书、制作p12证书流程
1、在苹果开发者后台点击右上角【Account】进入以下界面,然后点击【Certificates, Identifiers & Profiles】
iOS程序应用
2022/12/01
1.1K0
代码签名证书时出错30005怎么办 代码签名证书的作用
代码签名证书在购买的时候一定要通过正规的渠道进行购买,如果是从一些不法平台购买得来的,很有可能会出现代码签名证书时出错30005的状态。出现这样的情况的话,大家首先要做的是先去找购买的平台进行询问,或者是自己找解决办法。
用户8715145
2021/11/26
1K0
iOS创建苹果证书、制作p12证书流程
1、在苹果开发者后台点击右上角【Account】进入以下界面,然后点击【Certificates, Identifiers & Profiles】
iOS Magician
2023/03/21
1.9K0
iOS创建苹果证书、制作p12证书流程
使用vue ui时在其他盘创建项目
使用vue ui在其他盘创建项目 1. cd 切换到其他盘 2. 输入vue ui 就这样可以了你现在的目录上可以创建项目 3. 进入ui界面创建项目
秋名山码神
2022/12/14
8430
使用vue ui时在其他盘创建项目
点击加载更多

相似问题

使用CertEnroll远程更新证书

11

如何使用CertEnroll生成扩展验证自签名证书?

15

C#使用CertEnroll从根证书生成客户端证书

164

无法使用CertEnroll在Windows 7上安装证书

214

基于Azure生成的自签名证书的Certenroll

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文