当前位置: 首页 > news >正文

如何做360网站优化湖北百度推广公司

如何做360网站优化,湖北百度推广公司,eclipse用来做网站前端,如何自己做网站 开直播一、显示器是怎么显示图像的 每个显示器都有固定的刷新频率,通常是 60HZ,也就是每秒更新 60 张图片,更新的图片都来自于显卡中一个叫前缓冲区的地方,显示器所做的任务很简单,就是每秒固定读取 60 次前缓冲区中的图像&…

一、显示器是怎么显示图像的

每个显示器都有固定的刷新频率,通常是 60HZ,也就是每秒更新 60 张图片,更新的图片都来自于显卡中一个叫前缓冲区的地方,显示器所做的任务很简单,就是每秒固定读取 60 次前缓冲区中的图像,并将读取的图像显示到显示器上。

(1)显卡

显卡的职责就是合成新的图像,并将图像保存到后缓冲区中,一旦显卡把合成的图像写到后缓冲区,系统就会让后缓冲区和前缓冲区互换,这样就能保证显示器能读取到最新显卡合成的图像。通常情况下,显卡的更新频率和显示器的刷新频率是一致的。但有时候,在一些复杂的场景中,显卡处理一张图片的速度会变慢,这样就会造成视觉上的卡顿。 

(2) 帧 VS 帧率

我们把渲染流水线生成的每一副图片称为一帧,把渲染流水线每秒更新了多少帧称为帧率,比如滚动过程中 1 秒更新了 60 帧,那么帧率就是 60Hz(或者 60FPS)。

二、如何生成一帧图像

  • 重排:它需要重新根据 CSSOM 和 DOM 来计算布局树,这样生成一幅图片时,会让整个渲染流水线的每个阶段都执行一遍,如果布局复杂的话,就很难保证渲染的效率了。
  • 重绘:因为没有了重新布局的阶段,操作效率稍微高点,但是依然需要重新计算绘制信息,并触发绘制操作之后的一系列操作。
  • 合成:相较于重排和重绘,合成操作的路径就显得非常短了,并不需要触发布局和绘制两个阶段,如果采用了 GPU,那么合成的效率会非常高。

三、分层和合成

(1)在 Chrome 的渲染流水线中,分层体现在生成布局树之后,渲染引擎会根据布局树的特点将其转换为层树(Layer Tree),层树是渲染流水线后续流程的基础结构。

(2)层树中的每个节点都对应着一个图层,下一步的绘制阶段就依赖于层树中的节点。绘制阶段其实并不是真正地绘出图片,而是将绘制指令组合成一个列表,比如一个图层要设置的背景为黑色,并且还要在中间画一个圆形,那么绘制过程会生成|Paint BackGroundColor:Black | Paint Circle|这样的绘制指令列表,绘制过程就完成了。

(2)有了绘制列表之后,就需要进入光栅化阶段了,光栅化就是按照绘制列表中的指令生成图片。每一个图层都对应一张图片,合成线程有了这些图片之后,会将这些图片合成为“一张”图片,并最终将生成的图片发送到后缓冲区。这就是一个大致的分层、合成流程。

注意:合成操作是在合成线程上完成的,这也就意味着在执行合成操作时,是不会影响到主线程执行的。这就是为什么经常主线程卡住了,但是 CSS 动画依然能执行的原因。(重排和重绘操作都是在渲染进程的主线程上执行的,比较耗时;而合成操作是在渲染进程的合成线程上执行的,执行速度快,且不占用主线程。

 四、分块

 (1)如果说分层是从宏观上提升了渲染效率,那么分块则是从微观层面提升了渲染效率。

(2) 通常情况下,页面的内容都要比屏幕大得多,显示一个页面时,如果等待所有的图层都生成完毕,再进行合成的话,会产生一些不必要的开销,也会让合成图片的时间变得更久。因此,合成线程会将每个图层分割为大小固定的图块,然后优先绘制靠近视口的图块,这样就可以大大加速页面的显示速度。不过有时候, 即使只绘制那些优先级最高的图块,也要耗费不少的时间,因为涉及到一个很关键的因素——纹理上传,这是因为从计算机内存上传到 GPU 内存的操作会比较慢。

(3) 为了解决这个问题,Chrome 又采取了一个策略:在首次合成图块的时候使用一个低分辨率的图片。比如可以是正常分辨率的一半,分辨率减少一半,纹理就减少了四分之三。在首次显示页面内容的时候,将这个低分辨率的图片显示出来,然后合成器继续绘制正常比例的网页内容,当正常比例的网页内容绘制完成后,再替换掉当前显示的低分辨率内容。这种方式尽管会让用户在开始时看到的是低分辨率的内容,但是也比用户在开始时什么都看不到要好。

 五、如何利用分层技术优化代码

(1)在写 Web 应用的时候,你可能经常需要对某个元素做几何形状变换、透明度变换或者一些缩放操作,如果使用 JavaScript 来写这些效果,会牵涉到整个渲染流水线,所以 JavaScript 的绘制效率会非常低下。

(2)这时你可以使用 will-change 来告诉渲染引擎你会对该元素做一些特效变换

.box {will-change: transform, opacity;
}

这段代码就是提前告诉渲染引擎 box 元素将要做几何变换和透明度变换操作,这时候渲染引擎会将该元素单独实现一帧,等这些变换发生时,渲染引擎会通过合成线程直接去处理变换,这些变换并没有涉及到主线程,这样就大大提升了渲染的效率。这也是 CSS 动画比 JavaScript 动画高效的原因。

(3)所以,如果涉及到一些可以使用合成线程来处理 CSS 特效或者动画的情况,就尽量使用 will-change 来提前告诉渲染引擎,让它为该元素准备独立的层。但是凡事都有两面性,每当渲染引擎为一个元素准备一个独立层的时候,它占用的内存也会大大增加,因为从层树开始,后续每个阶段都会多一个层结构,这些都需要额外的内存,所以你需要恰当地使用 will-change。

 六、问题

(1)既然css动画会跳过重绘阶段,则意味着合成阶段的绘制列表不会变化。但是最终得到的相邻两帧的位图是不一样的。那么在合成阶段,相同的绘制列表是如何绘制出不同的位图的?

1、记住一点,能直接在合成线程中完成的任务都不会改变图层的内容,如文字信息的改变,布局的改变,颜色的改变,统统不会涉及,涉及到这些内容的变化就要牵涉到重排或者重绘了。

2、能直接在合成线程中实现的是整个图层的几何变换,透明度变换,阴影等,这些变换都不会影响到图层的内容。

3、比如滚动页面的时候,整个页面内容没有变化,这时候做的其实是对图层做上下移动,这种操作直接在合成线程里面就可以完成了。

4、再比如旋转操作,如果样式里面使用了will-change ,那么这些box元素都会生成单独的一层,那么在旋转操作时,只要在合成线程将这些box图层整体旋转到设置的角度,再拿旋转后的box图层和背景图层合成一张新图片,这个图片就是最终输出的一帧,整个过程都是在合成线程中实现的。

http://www.lbrq.cn/news/2538289.html

相关文章:

  • 现在学java的都是傻子网站优化排名易下拉软件
  • 电商平台网站设计公司查排名的网站
  • 怎么做扫二维码登陆网站建网站要多少钱
  • ps如何做音乐网站汕头seo网站建设
  • 新手怎样做网站推广百度电脑版官网下载
  • 如何新做的网站让百度快速收录网站关键词排名优化
  • 做相册集什么网站免费建站网站一级
  • 肥城网站建设方案正规seo多少钱
  • 如何编写微信小程序代码南京seo网络优化公司
  • 广州网站商城建设承德seo
  • 网站怎么做图片动态图片不显示百度95099怎么转人工
  • 可以做网络兼职的网站seo文章外包
  • 济南做网站建设的公司网站优化的方法与技巧
  • 烟台做网站系统免费b站推广网站在线
  • 个人网站开发毕业论文培训后的收获和感想
  • 廊坊网站制作费用国外网站制作
  • 上市公司网站推广方案全国最新实时大数据
  • 重庆巴南网站建设小程序开发收费价目表
  • 晋城两学一做网站搜索引擎优化的简写是
  • 怎么把做的页面放到网站上今日热点新闻事件摘抄50字
  • 大兴企业网站建设公司百度搜索引擎平台
  • 织梦修改网站背景颜色个人在线网站推广
  • 网站加水印每日重大军事新闻
  • 西安公司注册代理资源网站优化排名软件
  • 做平面素材比较好的网站企业管理软件管理系统
  • 如何访问自己做的网站如何制作一个简易网站
  • 安徽网新网站建设jsurl转码
  • 湖北鄂州疫情最新情况东营seo整站优化
  • wordpress 自动生成文章小学生班级优化大师
  • 购物网站,购物车界面如何做微信公众号推广2元一个
  • 有限元方法中的数值技术:三角矩阵求解
  • 生成式人工智能展望报告-欧盟-04-社会影响与挑战
  • 迈向透明人工智能: 可解释性大语言模型研究综述
  • [创业之路-535]:软件需要原型验证、产品需要原型验证、商业模式也需要原型验证
  • 安灯系统(Andon System)
  • 【05】OpenCV C#——OpenCvSharp 图像基本操作---转灰度图、边缘提取、兴趣区域ROI,图像叠加