首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为任意屏幕尺寸构建 Android 界面

这意味着在平板电脑、可折叠设备和 Chrome OS 设备上,有超过 2.5 亿台大屏幕设备运行着 Android 系统,而关于可折叠设备的使用数量也在不断增长,同比增长超过 250%,因此,"大屏"...△ 可折叠手机上布局转换 为了正确处理如何列表和详情窗口折叠成单窗口层次结构,当在较小的屏幕上时,我们需要知道用户最后与哪个窗口交互,为此,我们实现了一个简单的自定义修饰符来记录最后一交互,并以此决定...我们将会通过 Gradle 托管设备,从而实现在各种屏幕尺寸和 API 级别上运行虚拟设备来运行现有的 instrumentation 测试。...,从而降低了每台设备的总体 CPU 和内存使用率,这将让您能够同时针对代表不同屏幕尺寸的多台设备运行测试。...当前,这一功能可在 Android 10 上使用,随着时间的推移将支持更高的 API 级别,以确保现有的屏幕截图测试能够继续与自动化测试设备配合运行

4.1K20

折叠屏上应用设计规范,了解一下?

因此在运行期间,应用可从一个尺寸类别过渡到另一个尺寸类别,并再次过渡回去。重要的是,不要将尺寸类别视作完全独立的桶,应用也需保证连续性 (即不中断用户体验),所以应用状态或数据不能丢失。...列表/详情 对列表/详情而言,AndroidX 中有个名为 SlidingPaneLayout 的专用控件,使用前需为它的两个子元素指定 layout_width,在运行期间,SlidingPaneLayout...△ 平均分布在铰链两侧的八栏网格 (蓝背景) 适配示例 现在我们来看如何运行期间利用好折叠状态。Jetpack Window Manager 库提供了相应的 API,可以检测应用窗口是否存在折叠。...顺便说一下,如果您使用 SlidingPaneLayout 来实现列表/详情布局,您会自动获得对书本模式的支持。...若您不使用注释,也可以使用 TestRunner 的其他过滤选项,比如运行特定类测试。将这些特性加以组合,我们可以为测试设置一致运行配置。

4.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

前端性能优化——让你的长任务保持在50ms 内

每执行完一个任务,如果耗时超过 50 ms,将剩余任务设为异步,放到下一执行,给到页面响应用户操作和更新渲染的时间。 为什么是 50 毫秒呢?...目标是 100 毫秒,但是页面运行时除了输入处理之外,通常还会执行其他工作,并且这些工作会占用可用于获得可接受输入响应的部分时间。...使用 Chrome Devtools 我们可以在 Chrome 开发者工具,通过录制 Performance 的方式,手动查找时长超过 50 毫秒的脚本的“长红/黄色块”,然后分析这些任务块的执行内容...我们可以选择 Bottom-Up 和 Group by Activity 面板来分析这些长任务(关于如何使用 Performance 面板,可以参考分析运行时性能一文): 比如在上图中,导致任务耗时较长的原因是一组成本高昂的...使用 Long Tasks API 我们还可以使用 Long Tasks API 来确定哪些任务导致互动延迟: new PerformanceObserver(function (list) { const

36710

让你的网页更丝滑(一)

1.2 动画Animation 现如今大多数设备的屏幕刷新频率是60Hz,也就是每秒钟屏幕刷新60;因此网页动画的运行速度只要达到60FPS,我们就会觉得动画很流畅。...RAIL规定,空闲周期内运行的任务不得超过50ms,当然不止RAIL规定,W3C性能工作组的Longtasks标准也规定了超过50毫秒的任务属于长任务,那么50ms这个数字是怎么得来的呢?...3.2 如何让JS动画更丝滑 JS动画是使用定时器不停的执行JS,通过在JS修改样式完成网页动画;若想保证动画流畅,从JS的执行到最终浏览器显示出画面,每一帧总耗时最多16ms,这样动画才能达到60FPS...图3-5每一帧总体耗时必须小于16ms,JS运行时间小于10ms 一旦JS运行时间超过10ms,就很有可能导致这一帧的像素管道整体耗时超过16ms,从而无法达到60FPS,但你以为只要保证JS的运行时间小于...在 JavaScript 运行时,上一帧已经渲染好的所有布局值都是已知的,我们可以使用offsetWidth这样的语法获得值;但这一帧刚修改完的样式浏览器还没渲染呢,这时候使用offsetWidth这样的语法读取元素的宽度

1.6K30

如何重新认知性能优化及其度量方法

测试工具方面:分别有 yslow,web page test,page speed,lighthouse。 网络的优化:网络的优化主要体现在协议的不断升级。...接着是 Navigation timing,定义的是文档,导航过程完整的性能度量及文档,从发起请求到完成加载的各阶段号时,其中页面的导航性能可以通过 performance 的 timing 接口来获得...通过前面标准API的介绍,我们知道了如何检测应用的性能,也知道如何去发现问题,并有针对性地实施优化。但是对于用户的真实感受,我们还缺少一个可以量化的标准去衡量,如何更准确的评估用户的真实感受。...最后我们看一下一 CLS 是累计布局偏移,视窗内可见元素的起始位置发生变化,我们就认为发生了一布局偏移。...我们先看看一些背景介绍,首先信息流的列表使用的是为是技术,图文正文是正文页使用的是 h5 技术,从列表页点击到进入正文页,中间会有一个 300 毫秒的 WebView 进场动画,也就是我们这张图展示的一个交互

1K31

Web性能评价指标

通过什么信息来分析系统性能,如何判定好坏?Google提供了思考性能问题的方法论,以用户为中心的性能模型 - RAILRAIL性能模型 用户感知到的“性能”是什么?...了解用户对不同关键动作所期望的性能,使用Chrome DevTools对加载或运行时的活动进行深入分析,识别性能问题。...用户收到的阻塞程度则由TTB来体现,每当出现长任务(在主线程上运行超过 50 毫秒的任务)时,主线程都被视作"阻塞状态",浏览器无法中断正在进行的任务,长任务超过 50 毫秒的部分为阻塞时间,总阻塞时间是在...例如: • 加载资源的缓存命中率 缓存机制设置的是否合理 • 长任务 运行开销大的代码是否阻塞主线程,比如频繁计算/过滤50M的数据 • 元素渲染时间 长列表需要多久能绘制到页面上...• 服务器响应时间 CDN是否正确设置 • API的耗时 在用户使用应用的生命周期中,增删改查操作占据很大的比例。

47110

什么是时间分片(Time Slicing)?

根据W3C性能小组的介绍,超过50ms的任务就是长任务。 ? 图片来自使用 RAIL 模型评估性能 根据上图我们可以知道,当延迟超过100ms,用户就会察觉到轻微的延迟。...Web Worker 我们都知道,JS是单线程,所以当我们在运行长任务时,容易造成页面假死的状态,虽然我们可以将任务放在任务队列,通过异步的方式执行,但这并不能改变JS的本质。...例如当我们需要在页面中一性插入一个长列表时(当然,通常这种情况,我们会使用分页去做)。...如果利用时间分片的概念来实现这个功能,我们可以使用requestAnimationFrame+DocumentFragment 关于这两个API,我同样不会做详细的介绍,有兴趣的可以查看MDN requestAnimationFrame...除了上述的生成DOM的方案,我们同样可以利用Web Api requestIdleCallback 以及ES6 API Generator]来实现。

1.2K70

什么是时间分片(Time Slicing)?

图片来自使用 RAIL 模型评估性能 根据上图我们可以知道,当延迟超过100ms,用户就会察觉到轻微的延迟。...Web Worker 我们都知道,JS是单线程,所以当我们在运行长任务时,容易造成页面假死的状态,虽然我们可以将任务放在任务队列,通过异步的方式执行,但这并不能改变JS的本质。...例如当我们需要在页面中一性插入一个长列表时(当然,通常这种情况,我们会使用分页去做)。...如果利用时间分片的概念来实现这个功能,我们可以使用requestAnimationFrame+DocumentFragment 关于这两个API,我同样不会做详细的介绍,有兴趣的可以查看MDN requestAnimationFrame...除了上述的生成DOM的方案,我们同样可以利用Web Api requestIdleCallback 以及ES6 API Generator]来实现。

59320

学界 | 从监督式到DAgger,综述论文描绘模仿学习全貌

它在多次迭代训练一个随机静态策略,接着利用训练策略的「几何」随机混合。 具体而言,我们从一个完全遵循专家行动的策略π_0 开始。...DAgger 的主要优势是使用了专家(expert)来教学习器如何从过去的错误恢复过来。...我们从完全由专家教授的第一个策略 π_0 开始,运行 π_0,看学习器访问了什么配置。我们生成一个新的数据集,其中包含有关如何从 π_0 的错误恢复的信息。...DAgger 可以组合在所有迭代获得的训练信号,与之相反,SEARN 仅在第 i 迭代上训练,即不聚合数据集。SEARN 是第一种实用的方法,之后是 DAgger。...这是一种使用近似策略迭代(API)方法正则化过的 LfD,其关键思想是使用专家的建议来定义线性约束,这些线性约束可以引导 API 所执行的优化。

1.7K60

电磁轨道炮设计-基于模型的系统工程(20190819更新)

炮弹获得的出口速度(千米/秒)和动能(兆焦,MJ)可以达到或超过传统的大炮,而且没有传统爆炸推进物的成本和处置风险。已经有实验系统报告出口速度>3千米/秒,动能>30MJ。 轨道炮领域建模 ?...红线表示 Syndeia引用连接 我们在Jama创建和管理主需求列表,但是我们要把它链接到其他用来验证需求的系统设计和分析模型。...有许多方法,我们选择构造SysML的约束块,来为某些性能需求提供直接的数学测试,并且创建Syndeia引用连接到Jama的需求(图6)。...图9,model1链接到Rail,但我们需要确切说明Rail的length参数如何和model1的尺寸相连。为此我们插入一个SysML参数图到图9,该图连接到右上角CAD部件边框的z尺寸。...一个关键参数是rechargeTime,在两开火之间电容重新充电的时间。

1.3K20

面向回家编程!GitHub标星两万的Python抢票教程”,我们先帮你跑了一遍

python环境产生问题): pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 非root用户(避免安装和运行使用了不同环境...注意,在过程如果报错为缺少上面列表的依赖,只需单独使用pip3安装相应依赖包即可。 ? 而后就可以启动项目了。...http://sc.ftqq.com/3.version 扫码绑定获取 SECRET 并关注获得抢票结果通知的公众号 SERVER_CHAN_CONF = { "is_server_chan...,再开启此功能,不然可能会耽误你购票的宝贵时间 # 使用方法: # 1、在agency/proxy_list列表下填入代理ip # 2、测试UnitTest/TestAll/testProxy 测试代理是否可以用...抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium COOKIE_TYPE = 3 # 如果COOKIE_TYPE=1,则需配置chromeDriver

1.6K30

GitHub标星两万的Python抢票教程”,我们先帮你跑了一遍

python环境产生问题): pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 非root用户(避免安装和运行使用了不同环境...注意,在过程如果报错为缺少上面列表的依赖,只需单独使用pip3安装相应依赖包即可。 而后就可以启动项目了。...http://sc.ftqq.com/3.version 扫码绑定获取 SECRET 并关注获得抢票结果通知的公众号 SERVER_CHAN_CONF = { "is_server_chan...,再开启此功能,不然可能会耽误你购票的宝贵时间 # 使用方法: # 1、在agency/proxy_list列表下填入代理ip # 2、测试UnitTest/TestAll/testProxy 测试代理是否可以用...抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium COOKIE_TYPE = 3 # 如果COOKIE_TYPE=1,则需配置chromeDriver

6.7K30

TiKV 项目首个 SIG 成立,一起走上 Contributor 进阶之路吧! | 1024 程序员节快乐!

完善测试 * 为了进一步提高 Coprocessor 的集成测试覆盖率,TiKV 社区开源了 copr-test 集成测试框架(github.com/tikv/copr-test),便于社区为 Coprocessor...添加更多集成测试; * 从 TiDB port 的函数需要同时 port 单元测试,如果 TiDB 的单元测试没有覆盖所有的分支,需要补全单元测试; * Expression 的集成测试需要构造使用这个...作为 acknowledgment,仍会处于成员列表的「Former Member」。...定期同步进度,定期周会 * 每 2 周以文档形式同步一当前各个项目的开发进度; * 每 2 周召开一全组进度会议,时间依据参会人员可用时间另行协商。...如果你是一个开源爱好者,想要参与到一个工业级的开源项目中来,或者想了解社区的运行机制,想了解你的代码是如何从一个想法最终发布到生产环境运行,那么加入 Coprocessor SIG 就是一个绝佳的机会

66900

你会不会模拟超过 5 万用户的并发访问?

步骤3 : BlazeMeter沙箱测试 如果那时你的第一个测试——你应该温习一下 这篇 有关如何在BlazeMeter创建测试的文章....- 来获得对你的测试参数的完全控制 通常你将会遇到的问题: 防火墙 - 确保你的环境对BlazeMeter的CIDR 列表 (它们会实时更新)开发,并把它们放入白名单 确保你所有的测试文件, 比如:...在运行测试, 而不是提高你之前500个用户数量的产能 这一将产能提升放到真实的测试(5-15 分钟是一个好的开始) 并将时长设置为50分钟....确保整个测试过程没有超过75%的CPU使用率或者85%的内存使用率… 为安全起见,你可以把每个引擎的线程数降低10%的....当测试运行时,打开监听标签,并且检验: 没有一个引擎超过CPU75%的占有率和内存85%占有率的上限; 定位你的控制台标签(你可以通过一点击Logs Tab->Network Information

74230

如何模拟超过 5 万用户的并发访问?

步骤3 : BlazeMeter沙箱测试 如果那时你的第一个测试——你应该温习一下 这篇 有关如何在BlazeMeter创建测试的文章....- 来获得对你的测试参数的完全控制 通常你将会遇到的问题: 防火墙 - 确保你的环境对BlazeMeter的CIDR 列表 (它们会实时更新)开发,并把它们放入白名单 确保你所有的测试文件, 比如:...在运行测试, 而不是提高你之前500个用户数量的产能 这一将产能提升放到真实的测试(5-15 分钟是一个好的开始) 并将时长设置为50分钟....确保整个测试过程没有超过75%的CPU使用率或者85%的内存使用率… 为安全起见,你可以把每个引擎的线程数降低10%的....当测试运行时,打开监听标签,并且检验: 没有一个引擎超过CPU75%的占有率和内存85%占有率的上限; 定位你的控制台标签(你可以通过一点击Logs Tab->Network Information

1.3K10

如何模拟超过 5 万的并发用户

步骤3 : BlazeMeter沙箱测试 如果那时你的第一个测试——你应该温习一下 这篇 有关如何在BlazeMeter创建测试的文章....- 来获得对你的测试参数的完全控制 通常你将会遇到的问题: 防火墙 - 确保你的环境对BlazeMeter的CIDR 列表 (它们会实时更新)开发,并把它们放入白名单 确保你所有的测试文件, 比如:...在运行测试, 而不是提高你之前500个用户数量的产能 这一将产能提升放到真实的测试(5-15 分钟是一个好的开始) 并将时长设置为50分钟....确保整个测试过程没有超过75%的CPU使用率或者85%的内存使用率... 为安全起见,你可以把每个引擎的线程数降低10%的....当测试运行时,打开监听标签,并且检验: 没有一个引擎超过CPU75%的占有率和内存85%占有率的上限; 定位你的控制台标签(你可以通过一点击Logs Tab->Network Information

1.4K20

敢不敢模拟超过 5 万的并发用户?

步骤 3 : BlazeMeter 沙箱测试 如果那时你的第一个测试——你应该温习一下 这篇 有关如何在 BlazeMeter 创建测试的文章。...- 来获得对你的测试参数的完全控制 通常你将会遇到的问题: 防火墙 - 确保你的环境对 BlazeMeter 的 CIDR 列表 (它们会实时更新)开发,并把它们放入白名单 确保你所有的测试文件,...在运行测试, 而不是提高你之前 500 个用户数量的产能 这一将产能提升放到真实的测试( 5-15 分钟是一个好的开始) 并将时长设置为 50 分钟。...确保整个测试过程没有超过 75% 的 CPU 使用率或者 85% 的内存使用率... 为安全起见,你可以把每个引擎的线程数降低 10% 的。...步骤 5:安装并测试集群 我们现在知道了从一个引擎我们得到了多少线程,在该章节的最后,我们将会知道一个集群能给我们提供多少用户。

74620

TestNG

因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义测试,它也可以显示如何使用这个新功能在真实的Java语言生产环境。...注解列表 以下是TestNG支持的注释列表: 注解 描述 @BeforeSuite 在该套件的所有测试运行在注释的方法之前,仅运行。...@AfterClass 在调用当前类的第一个测试方法之后运行,注释方法仅运行 @BeforeTest 注释的方法将在属于标签内的类的所有测试方法运行之前运行。...@AfterTest 注释的方法将在属于标签内的类的所有测试方法运行之后运行。 @BeforeGroups 配置方法将在之前运行列表。...此方法保证在调用属于这些组的任何一个的第一个测试方法之前不久运行。 @AfterGroups 此配置方法将在之后运行列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行

90620

如何运行50k +并发用户的负载测试

38 查看 本文将介绍使用50k并发用户测试轻松运行负载测试所需的步骤(以及最多200万用户的更大测试)。 快速步骤概述 1.写你的剧本 2.使用JMeter在本地测试 3....如果您的引擎没有达到75%的CPU利用率或85%的内存使用率(可以忽略一峰值): 将线程数更改为700并再次运行测试 提高线程数,直到获得1000个线程或60%的CPU /内存使用量 如果您的引擎超过了...再次运行测试; 而不是500的增加,把你从上一测试获得的用户数量 这一,在实际测试中加入你想要的加速(5-15分钟是一个很好的开始)并将持续时间设置为50分钟。...确保在整个测试过程不要超过75%的CPU或85%的内存使用率 为了安全起见,您可以更安全地减少每个引擎10%的线程数。 第5步:设置并测试您的群集 我们现在知道一个引擎可以获得多少线程。...第6步:使用主/从功能达到最大CC目标 我们已经到了最后阶段。 我们知道脚本正在运行,我们知道一个引擎可以维持多少用户,并且我们知道我们可以从一个群集获得多少用户。

1.3K40

用CasperJS构建你的网络爬虫

挑战 让我们先从一个简单的挑战开始——一个网络爬虫,可以从Techmeme获得当天最热门的故事列表! 注意:我会在这里使用DZone,但我遇到了捕获页面的问题。...它实际上给你一个更简单的API来处理网页。虽然它就像PhantomJS一样,被设计用来测试网页,但是还有很多功能可以使它适用于抓取内容。 CasperJS允许我们用JavaScript编写我们的脚本。...在编写脚本之前,你已经查看了页面源代码,或者你可能会使用开发人员工具根据某些操作观察页面的变化。 所以,让我们从一个简单的逻辑开始吧。使用CasperJS断言系统在继续之前确保某个元素已经到位。...() { this.test.assertExists("#topcol1"); 如果元素不存在,测试(即我们的脚本)将会失败,否则它将继续。...在本系列的下一篇文章,我将研究如何从网页下载图像,并且还将讨论如何使用CasperJS内置的文件系统函数,这些函数比你将习惯使用来自Node.js的函数更加受限.

2K30
领券