性能优化之布局优化

谈到性能优化,一般都是从优化布局开始,优化布局一般可采用如下步骤进行:

Step1:进入系统设置打开调试GPU过度绘制功能,先定位存在重绘的布局;

Step2:对已定位存在过度重绘的布局,采用lint功能检测下,快速去掉冗余布局;

Step3:经过前两步后,如果还存在过度重绘,则采用hierarchy viewer进行深入研究

 

下面以Demo对上述三步进行详述:

要定位Demo中布局重绘情况,则先如图1所示开启“调试GPU过度绘制功能


图1

然后进入Demo应用查看重绘状态,如图2

图2

2显示Demo界面图标和文字都显示成红色,表示4X重绘说明存在严重重绘。关于不同颜色对应的重绘等级可参考图3

图3

找到布局存在问题后,则采用AS自带lint工具来检测布局,看究竟存在什么问题,如图4

图4

按图4操作完成后,则会出现如图5结果:


图5

按着图5检测结果,修改已存在问题如图6

布局文件修改前后对比

图6


修改后,再次执行Demo,以查看是否消除了重绘问题,结果如图7

图7


此时已将lint检测出的问题都已修复,但仍存在问题,那究竟问题出哪?(实际问题并非如Demo简单,这仅是通过简单问题说明解决问题的步骤),为进一步探究,就需要采用hierarchy Viewer来查看,如图8


图8


根据结果,很容易发现问题,此时TextView被三层ViewGroup包裹着,为解决此问题,探究具体布局以对问题进行修改,修改后布局如下:

<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="16dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawablePadding="3dp"
    android:drawableTop="@mipmap/ic_launcher"
    android:text="Hello World!" /></span>

这样修改后布局,如果在Activity正常显示出来,根据一般开发经验,这样用上去,显示的布局肯定与我们之前显示的不一样,那我们就对Activity的代码进行修改,此时我不采用setContentView,就采用LayoutInflater以将View层级降到最低,代码如下:

<span style="font-size:18px;">public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout parentView = (FrameLayout) this.findViewById(Window.ID_ANDROID_CONTENT);
        parentView.setBackgroundColor(Color.parseColor("#000000"));
        LayoutInflater.from(this).inflate(R.layout.activity_main,parentView,true);
    }
}</span>

经过这番修改,再次检测布局的重绘情况,如图9所示:

修改布局后Demo结果验证图



图9

到此,已将优化布局的整个流程讲解完毕,以此为引,加以深入,完全可以写好层级最优的布局。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前端性能优化是提高网页加载速度和用户体验的重要手段之一。而减少使用table布局优化前端性能的一种常见方法。 1. 减少DOM元素数量:table布局包含大量的tr、td等标签,每个标签都是一个DOM元素,而DOM的操作开销较大。减少table布局的使用,可以减少DOM元素的数量,从而提升性能。 2. 减少嵌套层级:使用table布局时,常常会嵌套多个table标签,增加了嵌套的层级。层级过深会导致浏览器渲染变慢,增加页面加载时间。使用其他布局方式,如CSS布局,可以将嵌套层级减少到最低,提高性能。 3. 减少重绘与回流:table布局的改变会引发页面的重绘与回流,这是浏览器重新渲染页面的过程,会消耗大量的CPU资源。使用其他布局方式,如flex布局,可以减少页面的重绘与回流,提高性能。 4. 使用CSS代替表格:在某些情况下,使用table布局可能是为了实现某种特定的效果或布局。但是,很多情况下,可以使用CSS布局来替代table布局,例如使用flex布局、grid布局等。这样可以更加灵活地控制布局,并且能够更好地适应不同设备和屏幕尺寸。 综上所述,减少table布局是一种常见的前端性能优化手段,可以通过减少DOM元素数量、减少嵌套层级、减少重绘与回流、使用CSS代替表格等方式来实现。这样可以提高页面加载速度,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值