当前位置: 首页 > 面试题库 >

如何在Angular中测试渲染速度

浦墨竹
2023-03-14
问题内容

我们正在构建一个Angular应用程序,并且试图弄清楚如何获得渲染各种页面所需时间的一些基准。我在performance.timing这里已读过有关内容,但这似乎仅对非单页应用程序有用,因为当我导航至应用程序中的新视图时,计时编号不会改变。

理想情况下,我们将能够插入一些代码来获取各种视图的渲染时间并将其发布到我们的Big Query服务中。

关于如何在Angular应用中获取视图的时间信息的任何想法?

编辑:

更具体地说,您转到一条加载大ng-
repeat列表的路由(这对性能而言不是最佳选择),并且该窗口在实际呈现列表中的项目之前有很长的延迟。我们想看看从大的空白视图到呈现列表中的项目需要多长时间。


问题答案:

在进行了一些实验之后,我找到了一种近似估算视图渲染所需时间的方法。

场景:

  1. 路由到Angular应用中的页面
  2. 拨打AJAX以获得冗长的物品清单
  3. 取得项目清单,传递给 ng-repeat ul
  4. 查看渲染列表

在Angular应用程序中,它ng-repeat是一个臭名昭著的性能杀手,但它非常方便。这里是关于性能的讨论,这里。

假设我们希望获得从#3到#4的时间的近似值,因为测试AJAX调用性能非常简单。

这里是一些上下文:

<ul>
  <li ng-repeat="item in items">
    {{item.name}}
    <!-- More content here -->
  </li>
</ul>

在Angular控制器中:

// Get items to populate ng-repeater
MyApiService.getItems(query)
  .then( function (data) {
    $scope.items = data;
    // When callback finishes, Angular will process items
    // and prepare to load into DOM
  }, function (reason) {
    console.log(reason);
  });

通过@runTarm,提到的事件$routeChangeStart$routeChangeSuccess以及$viewContentLoaded火灾一旦路径被加载,但在此之前的DOM渲染的项目,所以他们不解决问题。但是,通过实验,我发现AJAX回调一旦完成并设置$scope.items,Angular就开始进行阻塞操作,以处理items并准备将ng- repeat
ul其插入DOM中。因此,如果您获得了AJAX调用完成之后的时间,并再次在setTimeout回调函数中指定的时间获得时间,setTimeout回调将排队等待直到Angular完成转发器过程,并在DOM渲染之前获得一秒钟的时间,从而为您提供了最接近的渲染时间。这不是实际的渲染时间,但是对我们来说,最慢的部分不是DOM在起作用,而是Angular,这就是我们要测量的东西。

这是修改后的示例:

// Get items to populate ng-repeater
MyApiService.getItems(query)
  .then( function (data) {
    var start = new Date();
    $scope.items = data;
    // When callback finishes, Angular will process items
    // and prepare to load into DOM
    setTimeout( function () {
      // Logs when Angular is done processing repeater
      console.log('Process time: ' + (new Date() - start));
    }); // Leave timeout empty to fire on next tick
  }, function (reason) {
    console.log(reason);
  });


 类似资料:
  • 本文向大家介绍详解angular中如何监控dom渲染完毕,包括了详解angular中如何监控dom渲染完毕的使用技巧和注意事项,需要的朋友参考一下 刚刚看到群上一个人说,他们公司凡是用angular和jquery插件一起用的人,都被解雇了,没看到这句话之前我很惭愧的说我有这样用过,其实angular的生态系统那么完善,完全可以不用去操作任何的dom元素都可以满足你的提倡开发需求。 那么如果真的需要

  • 问题内容: 有没有带WebSockets的Angular Universal示例? 服务器端渲染不知道在我的情况下是不是一个WebSocket对象。如果我使用socket.io,则尝试建立连接时节点服务器将挂起。 有关该问题的一些其他信息: 我从github下载了angular-universal- starter:https://github.com/angular/universal- sta

  • 问题内容: 我正在尝试使用和JSX 渲染具有重音符号的元素,但它没有返回我想要的东西。 我的JSX: 我呈现的JavaScript: 我在浏览器中的结果: 我已经在标签内的索引文件中进行了设置,如果直接在页面内容中键入该单词,则重音字符将在页面标题和正文中起作用,但是在由 我该如何解决这个问题? 问题答案: 您所看到的是由于UTF-8字节数组以ASCII呈现的结果,可能是代码页ISO 8859-1

  • 问题内容: 我正在遵循此教程:http : //reactkungfu.com/2015/07/approaches-to-testing- react-components-an-overview/ 尝试学习“浅渲染”的工作原理。 我有一个更高阶的组件: 和一个组件: 和一个测试: 该变量保存 在本教程中,测试如下: 就我而言,如果我登录,它是: 所以我像这样更改了测试: 现在它给了我这个错误:

  • 我无法呈现一个selectOneMenu,但只能禁用该项目 例如,这是可行的: 而这个不是: 有什么建议吗 谢谢

  • 问题内容: 你能告诉我如何在react js中渲染列表吗?我喜欢这样 问题答案: 您可以通过两种方式进行操作: 第一: 第二: 直接在返回中编写map函数