CSS3 动画卡顿性能优化解决方案

(点击上方公众号,可快速关注)

来源:趁你还年轻

segmentfault.com/a/1190000013045035


640?wx_fmt=gif

最近在开发小程序,与vue类似,它们都有生命周期这回事。

  • onLoad 监听页面加载

  • onReady 监听页面初次渲染完成

  • onShow 监听页面显示

到底是什么意思?

所以这又触碰到了我的知识盲区,不过项目在磕磕绊绊中完成的差不多了,但是遇到了CSS3动画渲染的性能问题,所以我也是被逼的,再回过头来从浏览器渲染网页的流程出发,去找动画卡顿的症结。

浏览器渲染网页的流程如下:

  • 使用 HTML 创建文档对象模型(DOM)

  • 使用 CSS 创建 CSS 对象模型(CSSOM)

  • 基于 DOM 和 CSSOM 执行脚本(Scripts)

  • 合并 DOM 和 CSSOM 形成渲染树(Render Tree)

  • 使用渲染树布局(Layout)所有元素

  • 渲染(Paint)所有元素

可以结合Alon的这篇前端性能优化和安卓开发者选项的显示页面布局。

安卓开发者选项的显示页面布局

如何判断手机app是native,webview还是hybird?

简单说下,app中的一大块是白色的没有红线标记出来的,但是上面有按钮,图片等时,就是webview,也就是通过一个伪浏览器去请求到的数据,断网时打开app没有任何东西显示在上面

640?wx_fmt=png

onLoad 监听页面加载

在渲染完界面之后,也就是通过.json中的配置项生成native界面后,开始渲染webview的部分,一个页面只会调用一次。

onReady 监听页面初次渲染完成

一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。

onShow 监听页面显示

每次打开页面都会去调用其中的函数。

我们的动画应该放在哪里?

应该放在onShow里,因为这样我每次打开都能看到动画。

为什么会卡顿?

有一个前提必须要提,前端开发者们都知道,浏览器是单线程运行的。但是我们要明确以下几个概念:单线程,主线程和合成线程。

虽然说浏览器执行js是单线程执行(注意,是执行,并不是说浏览器只有1个线程,而是运行时,runing),但实际上浏览器的2个重要的执行线程,这 2 个线程协同工作来渲染一个网页:主线程和合成线程。

一般情况下,主线程负责:运行 JavaScript;计算 HTML 元素的 CSS 样式;页面的布局;将元素绘制到一个或多个位图中;将这些位图交给合成线程。

相应地,合成线程负责:通过 GPU 将位图绘制到屏幕上;通知主线程更新页面中可见或即将变成可见的部分的位图;计算出页面中哪部分是可见的;计算出当你在滚动页面时哪部分是即将变成可见的;当你滚动页面时将相应位置的元素移动到可视区域。

那么为什么会造成动画卡顿呢?

原因就是主线程和合成线程的调度不合理。

下面来详细说一下调度不合理的原因。

在使用height,width,margin,padding作为transition的值时,会造成浏览器主线程的工作量较重,例如从margin-left:-20px渲染到margin-left:0,主线程需要计算样式margin-left:-19px,margin-left:-18px,一直到margin-left:0,而且每一次主线程计算样式后,合成进程都需要绘制到GPU然后再渲染到屏幕上,前后总共进行20次主线程渲染,20次合成线程渲染,20+20次,总计40次计算。

主线程的渲染流程,可以参考浏览器渲染网页的流程:

  • 使用 HTML 创建文档对象模型(DOM)

  • 使用 CSS 创建 CSS 对象模型(CSSOM)

  • 基于 DOM 和 CSSOM 执行脚本(Scripts)

  • 合并 DOM 和 CSSOM 形成渲染树(Render Tree)

  • 使用渲染树布局(Layout)所有元素

  • 渲染(Paint)所有元素**

也就是说,主线程每次都需要执行Scripts,Render Tree ,Layout和Paint这四个阶段的计算。

而如果使用transform的话,例如tranform:translate(-20px,0)到transform:translate(0,0),主线程只需要进行一次tranform:translate(-20px,0)到transform:translate(0,0),然后合成线程去一次将-20px转换到0px,这样的话,总计1+20计算。

可能会有人说,这才提升了19次,有什么好性能提升的?

假设一次10ms。

那么就减少了约190ms的耗时。

会有人说,辣鸡,才190ms,无所谓。

那么如果margin-left是从-200px到0呢,一次10ms,10ms*199≈2s。

还会有人说,辣鸡,也就2s,无所谓。

你忘了单线程这回事了吗?

如果网页有3个动画,3*2s=6s,就是6s的性能提升。

由于数据是猜测的,所以暂时不考虑其真实性,文章后面我使用chrome devtools的performance做了一个实验。

要知道,在"客户至上"的今天,好的用户体验是所有产品的必须遵守的一条规则,无论是对于开发者还是产品经理,追求极致的性能都是我们打造一个好的产品所必备的品质。

可能看了我的略不专业的分析后,大家对主线程,合成线程以及它们在2种性能不同动画方案上的工作流程还不是很了解,可以去看一篇翻译过来的博客(英文原版链接已经失效了):深入浏览器理解CSS animations 和 transitions的性能问题

这篇文章完美讲述了浏览器主线程和合成线程的区别,并且举了一个高度从100px变化到200px的2种动画方案的对比,对主线程和合成线程的整个工作流程做了很详尽的讲解,真心建议认真阅读一遍。

回过头来总结下,css3动画卡顿的解决方案:

在使用css3 transtion做动画效果时,优先选择transform,尽量不要使用height,width,margin和padding。

transform为我们提供了丰富的api,例如scale,translate,rotate等等,但是在使用时需要考虑兼容性。但其实对于大多数css3来说,mobile端支持性较好,desktop端支持性需要格外注意。

补充:为了增强本文的说服力,特地回家做了一个实验,代码如下。

 
 
  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4.  <meta charset="utf-8" />

  5.  <meta http-equiv="X-UA-Compatible" content="IE=edge">

  6.  <title>Page Title</title>

  7.  <meta name="viewport" content="width=device-width, initial-scale=1">

  8.  <style>

  9.    .margin-transition{

  10.      /* margin-left: 0; */

  11.      background: rgba(0,0,255,0.3);

  12.      transition: margin-left 1s;

  13.    }

  14.    .transform-transition{

  15.      /* transform: translate(0,0); */

  16.      background: rgba(0,255,0,0.3);

  17.      transition: transform 1s;

  18.    }

  19.    .common{

  20.      height: 300px;

  21.      width: 300px;

  22.    }

  23.  </style>

  24. </head>

  25. <body>

  26.  <div class="margin-transition common" id="marginTransition">

  27.    <p>transition:margin-left 1s</p>

  28.  </div>

  29.  <div class="transform-transition common" id="transformTransition">

  30.      <p>transition:tranform 1s</p>

  31.  </div>

  32.  <button id="control">见证奇迹</button>

  33.  <script>

  34.      var btn = document.getElementById('control');

  35.      var marginTransition = document.getElementById('marginTransition');

  36.      var transformTransition = document.getElementById('transformTransition');

  37.      btn.addEventListener("click",function(){

  38.        console.log(marginTransition.style,transformTransition.style)

  39.        marginTransition.style.marginLeft = "500px";

  40.        transformTransition.style.transform = "translate(500px,0)"

  41.      })

  42.  </script>  

  43. </body>

  44. </html>

我将主要借助chrome devtools的performance工具对比二者的性能差异。

先来看margin动画,动态修改DOM节点的margin-left值从0到500px;。

 
 
  1. transition: margin-left 1s;

640?wx_fmt=gif640?wx_fmt=png640?wx_fmt=png

再来看下transform动画,动态修改DOM节点的transform值从translate(0,0)到translate(500px,0)。

 
 
  1. transition: transform 1s;

640?wx_fmt=gif

640?wx_fmt=png

640?wx_fmt=png

可能图片不是很好地能说明性能差异,那么我们来列一张耗时对比表,方便我们计算。

耗时margintransform
Summery3518ms2286ms
Scripting1.8ms2.9ms
Rendering22.5ms6.9ms
Painting9.7ms1.6ms
Other39.3ms25.2ms
Idle( browser is waiting on the CPU or GPU to do some processing)3444.4ms2249.8ms
GPU使用率4.1MB1.7MB

通过上表我们可以计算出明margin,transform与transition组合实现CSS3动画效果时的性能差异参数。

关键性能参数margintransform
实际动画耗时(总时间 减去 空闲时间)73.6ms36.2ms

计算得出,transform动画耗时约等于margin动画耗时的0.49倍,性能优化50%。

由于我对Other的所做的具体事情不是很清楚,所以这里的实际动画时间也有可能还要减掉Other中的时间,下表是我们减掉后的数据。

关键性能参数margintransform
实际动画耗时(总时间 减去 其他时间和空闲时间)34.3ms11ms

计算得出,transform动画耗时约等于margin动画耗时的0.32倍,性能优化接近70%。

也就是说,无论我们减去还是不减去Other的时间,我们采用transform实现动画的方式都比margin动画快。

不精确的得出一个小结论:transform比margin性能好50%~70%

虽然会有50%~70%的性能提升,但是需要注意硬件差异,硬件好的情况下可能不能发现卡顿或者其他的一些性能上的问题。

例如在开发小程序的过程中,模拟器是位于desktop端的,因此它的硬件性能性能更好,例如CPU,GPU。但是一旦在mobile端运行,例如ios或者android上运行时,就可能会出现性能问题,这就是因为移动端的硬件条件逊于PC端导致的。

所以说,性能问题是一直存在的,只不过硬件差异会导致性能影响的程度不同。

所以我们再次回过头来,总结出css3动画卡顿的解决方案:

在使用css3 transtion做动画效果时,优先选择transform,尽量不要使用height,width,margin和padding。

That's it !

参考
  • http://sy-tang.github.io/2014/05/14/CSS%20animations%20and%20transitions%20performance-%20looking%20inside%20the%20browser/

  • http://jinlong.github.io/2017/05/08/optimising-the-front-end-for-the-browser/

  • http://blog.csdn.net/yeana1/article/details/52756871

  • https://www.jianshu.com/p/b70b72de3c32

  • https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/

  • http://blogs.adobe.com/webplatform/2014/03/18/css-animations-and-transitions-performance/



【关于投稿】


如果大家有原创好文投稿,请直接给公号发送留言。


① 留言格式:
【投稿】+《 文章标题》+ 文章链接

② 示例:
【投稿】《不要自称是程序员,我十多年的 IT 职场总结》:http://blog.jobbole.com/94148/

③ 最后请附上您的个人简介哈~



觉得本文对你有帮助?请分享给更多人

关注「前端大全」,提升前端技能

640?wx_fmt=png

640?wx_fmt=jpeg

前端大全
关注 关注
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CSS - 你遇到过动画卡顿的问题吗
xingyu_qie的专栏
04-07 86
尽管硬件加速可以使动画更加流畅,提升用户体验。但需要注意的是,在布局这一步,因为我们的页面元素大部分都是相对定位的,一旦某个元素的位置、大小、边距发生了变化,就引起其他元素一连串的变化,也就是我们常说的回流。在整个动画执行过程中,重新布局和绘制的工作所需时间短,那么动画更加流畅,反之,这两项工作所需时间长,那么动画显得卡顿。这道题是对CSS3动画及知识点的考察,想要回答好这类题目,从动画实现、浏览器渲染原理到每一帧动画浏览器执行的工作再到及硬件加速,都是需要仔细学习并在面试前加强记忆的。
css3针对移动端卡顿问题的解决(动画性能优化)
01-19
一、使用css,jquery,canvas制作动画 1.Canvas 优点:性能好,强大,支持多数浏览器(除了IE6、IE7、IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形; 缺点:依赖于HTML,只能通过脚本绘制图形,没有实现动画的API(依靠事件和定时器更新);由于在 canvas 上以编程方式显示的文本其实就是位图,因此搜索爬行器将完全忽略文本。文本内容也无法被屏幕阅读器识别。 2.css3 优点:简单且与内容分离、css动画不触发layout和paint;(这些属性的修改不触发layout和paint:backface-visibility、opacity、pe
CSS3动画卡顿性能优化解决方案
weixin_34074740的博客
01-30 1344
最近在开发小程序,与vue类似,它们都有生命周期这回事。 onLoad 监听页面加载onReady 监听页面初次渲染完成onShow 监听页面显示 到底是什么意思? 所以这又触碰到了我的知识盲区,不过项目在磕磕绊绊中完成的差不多了,但是遇到了CSS3动画渲染的性能问题,所以我也是被逼的,再回过头来从浏览器渲染网页的流程出发,去找动画卡...
CSS3动画页面闪白,动画卡顿
renxin0828的博客
07-07 953
解决方案: 1.尽可能地使用合成属性transform和opacity来设计CSS3动画,不使用position的left和top来定位 2.开启硬件加速 -webkit-transform: translate3d(0,0,0); -moz-transform: translate3d(0, 0, 0); -ms-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); ...
CSS 动画:基础知识与性能优化
薛定谔的猫-前端领域
05-13 2003
理论上说,FPS 越高,动画越流畅,目前大多数设备的屏幕刷新率为 60 次/秒,所以通常来讲 FPS 为 60frame/s 时动画效果最好,也就是每帧的消耗时间(帧预算)为 16.67ms,但实际上,浏览器有整理工作要做,因此所有工作需要尽量在 10 ms 内完成。而且新的智能手机有 90Hz 的屏幕而 iPad Pro 的屏幕是 120Hz 的,这让帧预算分别减少到 11.1ms 和 8.3ms。
CSS3 动画卡顿性能优化的完美解决方案
10-17
今天小编就为大家分享一篇关于css3 动画卡顿性能优化的完美解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
前端-CSS3动画卡顿性能优化解决方案.docx
10-26
前端-CSS3动画卡顿性能优化解决方案.docx
浅谈CSS3 动画卡顿解决方案
09-22
今天主要介绍一下CSS3 动画卡顿解决方案,原因就是主线程和合成线程的调度不合理。本文详解的介绍了解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
CSS transition动画卡顿的探究
weixin_45689946的博客
12-27 5926
一、问题 今天在使用css3的transition做动画过渡时,发现动画卡顿,特此记录我发现卡顿的一些原因和笔记。 先给出结论: 在使用css3 transtion做动画效果时,transform实现的动画是与合成器线程相关的,不需要等待主线程样式计算或者 JS 执行,计算速度是很快的;而使用height,width,margin和padding做动画过渡时,导致浏览器发生布局和绘制的调整,主线程需要重新计算样式并且执行JS,计算速度自然就了。 二、以height为过渡属性时 当一个元素的过渡属性为
解决CSS3动画卡顿问题
qq_34309704的博客
07-02 7683
解决方法:尽量使用transform属性,避免使用height、width、margin、padding等要求较高时,可以开启GPU硬件加速器1、尽量使用transform属性,避免使用height、width、margin、padding等①、因为,transform属性不更改元素或它周围元素的布局,只是对元素的整体产生影响,比如缩放、旋转这对浏览器是个好消息,浏览器只需要一次生成这个元素的位...
两句css 搞定页面滚动时的卡顿问题?
tager168的博客
10-23 3092
前言 对于网页的卡顿性能优化,我们首先想到的肯定是从JavaScript开始。但这个锅js表示不背????,但不是js的原因又是什么原因了?文章内容不多,只要你能仔细看完,相信一定能对你有所帮助。 在实际项目中React、Vue、Angular三大框架都有使用过,其在开发效率上是毋庸置疑的,但在某些场景上其性能确是差强人意的。如果大家有遇到此类场景,欢迎在下方留言讨论。 下面我们一起来了解一下实际项目中遇到的此类性能瓶颈是如何处理的! 背景 项目基于VUE,由于业务要求需要长列表渲染(不能做动态加载和虚拟
CSS3 动画卡顿解决方案
盏茶作酒的博客
04-07 1234
前端时间用 animation 实现 H5 页面中首页动画过渡,很简单的一个效果,首页加载一个客服头像,先放大,停留 700ms 后再缩小至顶部。代码如下 <!DOCTYPE html> <html> <head lang="zh-cn"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-...
详解CSS和JS动画底层原理及如何优化它们的性能
yy743的博客
02-18 294
javascript栏目介绍CSS和JS动画底层原理 相关免费学习推荐:javascript(视频) 概述 你肯定知道,动画在创建引人注目的 Web 应用程序中扮演着重要的角色。随着用户越来越多地将注意力转移到用户体验上,商户开始意识到完美、愉快的用户体验的重要性,结果 Web 应用程序变得越来越重,并具有更动态交互的 UI。这一切都需要更复杂的动画,以便用户在整个过程中更平稳地进行状态转换。今天,这甚至不被认为是什么特别的事情。用户正变得越来越挑剔,默认情况下,他们期望的是具有高响应性和交互性的用户界面。
css卡片——毛玻璃特效,backdrop-filter的性能问题记录
swallowblank的博客
12-15 2296
今天在youtube上看到了一个关于使用css完成毛玻璃特效的视频。 很奇怪的一点是,在card上加入了backdrop-filter之后,card上的所有过渡动画肉眼可见的不流畅,在用titl.js之后更是卡的不行。 backdrop-filter: blur(5px); 当去掉这个属性以后,整个页面极其流畅。 ...
css3动画卡顿闪屏@酷酷的小航航
kukuhang的博客
11-05 1082
css3动画卡顿比较厉害 于是找各种方法 并一一去试 学简单的处理方法和部分渲染原理 是否启用硬件加速GPU (Graphics Processing Unit)? “用到了CSS3动画”和“开启了硬件加速”是两件事情,虽然前者有可能导致后者。 开启硬件加速在webkit中有神奇的万金油:opacity: 1;或者-webkit-backface-visibility: hidden;。 尽量...
css动画卡顿的感觉如何改善
qq_32973061的博客
08-02 1486
animation-duration 规定完成动画所花费的时间,以秒或毫秒计。 animation-timing-function 规定动画的速度曲线。 1. animation-duration时间越短,动画执行的越快,肉眼更难分辨卡顿 2.animation-timing-function 调整速度曲线,选择效果合适的 ...
动画性能优化
Abudula__的博客
08-15 1286
CSS3 动画给 Web 的用户体验带来了巨大提升,本文将尝试从浏览器渲染的角度,来解析动画优化的原理及其技巧。为大家提供一些动画性能优化的参考。 60fps 与设备刷新率 目前大多数设备的屏幕刷新率为60fps(Frame per Second),即每秒60帧。因此,如果在页面中有一个动画或渐变效果,或者用户正在滚动页面,那么浏览器渲染动画或页面的每一帧的速率也需要跟设备屏幕的刷新率保持一致...
CSS结构不合理导致网页运行超,还让浏览器崩溃
阿锋--专栏
10-12 622
最近做一网站,网页在IE7,8,9下正确,在6下和360下崩溃   最后找到原因,竟是因为span中嵌套了很多标签如,DIV UL LI 等   因为不合理的结构导致网页超
CSS3 动画关键帧
最新发布
04-18
CSS3动画关键帧是指在CSS3中定义动画效果的关键帧。通过在关键帧中定义元素的样式属性,可以实现元素在不同时间点上的不同样式,从而创建出流畅的动画效果。 在CSS3中,我们可以使用@keyframes规则来定义动画关键帧...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 深入理解 requestAnimationFrame 54721
  • 几种常见的 CSS 布局 31346
  • 前端工作越来越难找,是不是已经饱和了? 19579
  • Vue 兼容 IE9 全功能正常使用的全面解决方案 18457
  • Vue 在哪些方面比 React 做得更好? 14983

最新评论

  • 双11福利仍在加载中...

    2401_84994752: 福利我庆福利

  • 前端工作越来越难找,是不是已经饱和了?

    htt2321: 求职者太多了,越来越卷是真的

  • RGB、HSL、Hex网页色彩,看完这篇全懂了

    衡隐娘: 挺详细的

  • 关于 Vue.js:那些好的,不怎么样的和糟糕的

    不服输的人: 一针见血

  • 基于 HTML5 Canvas 的交互式地铁线路图

    m0_70161193: 大佬有没有源码呢

大家在看

  • OpenHarmony实战开发——图片加载 ImageKnife 1038
  • flowable已发起流程管理 1.新增节点、2.修改流程节点路径、3.移动某个节点(自由跳转,当前节点自动完成) 249
  • 【设计模式深度剖析】【4】【结构型】【组合模式】| 以文件系统为例加深理解 514
  • 2024全新交友盲盒+付费进群二合一源码
  • 第六节:带你全面理解vue3 浅层响应式API: shallowRef, shallowReactive, shallowReadonly 512

最新文章

  • Vue实现原理+前端性能优化
  • JavaScript 弱依赖项的使用场景
  • 用了 5 年 React,我不喜欢 Vue.js 的地方有这些
2021年1篇
2020年3篇
2019年282篇
2018年557篇
2017年131篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司池州关键词按天计费价格平湖百度爱采购公司垦利百度seo报价凉山网站建设设计推荐淮北企业网站设计报价天门百度seo推荐镇江建设网站多少钱坑梓优秀网站设计漯河网站改版公司晋中至尊标王推荐上饶网站推广方案黄石网站seo优化多少钱固原企业网站制作报价上海SEO按天收费报价临沧建设网站多少钱商洛建站哪家好赤峰百度竞价包年推广推荐中卫seo珠海关键词排名公司泸州网站优化公司那曲外贸网站设计价格石家庄网站推广方案临汾建网站报价泉州企业网站制作双龙网站搜索优化报价乐山关键词按天计费镇江SEO按效果付费多少钱河源关键词排名公司北海关键词排名多少钱台州如何制作网站推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化