标签: rendering

Chrome 的重新计算样式事件涉及什么?

TL; 博士

是什么导致在 Chrome 中重新计算样式以及如何减少此步骤的时间?

背景

在具有许多元素(变量,例如 10,000)的应用程序中,在这些元素的父元素上添加类时,我观察到重新计算样式需要很长时间。当容器有这个类时,有选择器会影响每个子树的元素。

在开发人员工具中,我能够通过单击此处(MCVE 的屏幕截图)来跟踪重新计算样式事件的原因:

Chrome 开发工具:如何追溯事件原因

从到名称我假设这一步涉及计算有效(最终)元素样式。我认为这发生在

  1. 改变了元素样式,
  2. 一个改变的(伪)类

    • 元素本身或
    • 由选择器关联的父元素或兄弟元素的
  3. 更改的 CSS 选择器(导入新 CSS,生成<style>)

强制浏览器重新计算元素的 CSS 属性。

尝试证明我的论文

我使用与静态 HTML 相同数量的元素创建了一个 MCVE,并使用文档上的处理程序在a.change上切换类- 死的简单代码。.containerclick

MCVE 的性能比实际应用程序要好得多,重新计算样式步骤花费的时间更少。这可能是由于更简单的树和更少的样式。

然后我开始向所有选择器添加更多样式,并且每增加一组新的 CSS 属性,平均时间就会增加。向 10,000 个子树添加更多元素并没有改变平均时间。

所以,我想说这次影响的是 CSS 属性的数量、受影响的选择器的数量和受影响的元素的数量。

css rendering google-chrome reflow

5
推荐指数
1
解决办法
5507
查看次数

Pyglet 图像渲染

我正在为我的第一个深度 Pyglet 项目开发一种 2D Minecraft 克隆,但我遇到了一个问题。每当我在屏幕上有相当数量的块时,帧速率就会急剧下降。

这是我的渲染方法:我使用字典,键是元组(表示块的坐标),项目是纹理。

我遍历整个字典并渲染每个块:

for key in self.blocks:
    self.blocks[key].blit(key[0] * 40 + sx,key[1] * 40+ sy)
Run Code Online (Sandbox Code Playgroud)

PS sx 和 sy 是屏幕滚动的坐标偏移量

我想知道是否有一种方法可以更有效地渲染每个块。

python graphics rendering pyglet

5
推荐指数
1
解决办法
3148
查看次数

Chrome DevTools 中帧渲染的空闲时间

在研究 Web 渲染优化时,我在许多流行网站上遇到了一种奇怪的渲染行为。帧渲染时间的很大一部分是没有操作的空白空间。来自 Apple 促销页面的示例

在那个时间范围内运行的唯一东西是 GPU。我找不到这种行为的任何原因。这个问题背后的原因可能是什么,我如何改善项目中此类帧的渲染时间?

optimization performance rendering google-chrome-devtools web

5
推荐指数
1
解决办法
1万
查看次数

为什么 BRDF 是两个微分的商?

我不确定这是否是问这个问题的正确地方,但我想不出更好的地方。有人可以向我解释为什么 BRDF 是两个微分的商,而不是输出辐照度和辐照度的未微分数量的商吗?在最好的情况下有一些涂鸦。我能找到的关于这个话题的所有解释都是维基百科的解释: “函数被定义为两个微分的商而不是直接作为未微分量之间的商的原因,是因为除 dEi(?i) 之外的其他辐射光, fr(?i , ?r) 不感兴趣,可能会照亮表面,无意中影响 Lr(?r),而 d?Lr (?r) 仅受 dEi(?i) 影响。” ( https://en.wikipedia.org/wiki/Bidirectional_reflectance_distribution_function) 我不明白这个解释。

我希望你们中的一些人可以帮助我,我非常感谢每一次尝试。

PS:我希望我听起来不像一个六岁的孩子,但英语不是我的母语。

graphics rendering physics

5
推荐指数
1
解决办法
100
查看次数

平滑过渡 renderPlot 闪亮 R

我使用这种方法在 Shiny 中做了一个动画 我发现的问题是从情节到情节的过渡有点卡住(处理下一个情节时情节区域逐渐消失)。

我想保留之前的情节,直到下一个准备好。有没有办法从一个渲染图过渡到下一个渲染图,避免对先前图的淡化效果?

下面我包括一个最小的工作示例。如果您的计算机没有卡住,只需增加 K,它最终就会卡住。

library(shiny)
library(ggplot2)
k<-50000L
data=data.frame(x=runif(k),y=runif(k))

runApp(list(
  ui =fluidPage(
    tags$head(tags$style(".rightAlign{float:right;}")),
    headerPanel("Cost Explorer"),

    sidebarPanel(
      actionButton("goButton", "Go!"),
      actionButton("reset", "Reset")  ),
      mainPanel(fluidRow(column(8,
      plotOutput(outputId="tsplot"),class = 'rightAlign')))),

  server=function(input, output, session) {

  datareactive<-reactiveValues(data=data)
  t <- reactiveValues(counter=1)

  observe({
    isolate({   
      t$counter=t$counter+1;
      datareactive$data<-data.frame(x=runif(k),y=runif(k))
    })
      if ((input$goButton > 0)){
        invalidateLater(200, session)
      }



  })

    output$tsplot <- renderPlot({
      ggplot(datareactive$data,aes(x,y))+geom_point()+coord_fixed()+
      theme_bw()+
      geom_path(data=datareactive$data[(k-10):k,],aes(x,y),size=1.1,
                colour="blue")+
      geom_point(data=datareactive$data[k,],aes(x,y),
                   colour="red")
    })

  }
))
Run Code Online (Sandbox Code Playgroud)

rendering r shiny

5
推荐指数
1
解决办法
651
查看次数

使用 python 将 3D 网格渲染为图像

我是一个神经网络,它使用张量流从单个图像重建人脸。

我想弄清楚如何将网络的输出(这是一个 3D 网格)渲染成 python 中的图像。

我发现的大多数库都实时进行 3D 渲染,我只希望渲染和单帧。

我还需要一些快速的东西,因为这可能会成为实时网络预处理的一部分(将网络应用于实时视频。

网格非常简单,它是一个简单的面,大约有 30k 个顶点和 50k 个三角形。

python 3d rendering render

5
推荐指数
2
解决办法
8540
查看次数

Flowchart.js SVG 渲染在弹出窗口中搞砸了

我正在使用流程图.js库来获取流程图的SVG 渲染。我需要在带有动态引导程序面板的弹出窗口中包含流程图渲染,但结果一团糟(盒子上的标签和小渲染:

在此处输入图片说明

我的代码是:

<div class="panel panel-default">   
  <div class="panel-body">      
    <div id="diagram"></div>    
    </div> 
</div>

<script type="text/javascript">

    $(document).ready(function () {
        var diagram = flowchart.parse('st=>start: Start:>http://www.google.com[blank]\n' +
            'e=>end:>http://www.google.com\n' +
            'op1=>operation: My Operation\n' +
            'op2=>operation: Stuff|current\n' +
            'sub1=>subroutine: My Subroutine\n' +
            'cond=>condition: Yes \n' + // use cond(align-next=no) to disable vertical align of symbols below
            'or No?\n:>http://www.google.com\n' +
            'c2=>condition: Good idea|rejected\n' +
            'io=>inputoutput: catch something...|request\n' +
            '\n' +
            'st->op1(right)->cond\n' +
            'cond(yes, right)->c2\n' + // conditions can also be redirected like cond(yes, …
Run Code Online (Sandbox Code Playgroud)

javascript svg rendering flowchart raphael

5
推荐指数
1
解决办法
825
查看次数

Safari 浏览器 z-index 或转换 CSS 属性问题 - 元素不可见/背景化

我在 Safari(移动和桌面)中无法在前台呈现HTML 元素的可见性问题,我已经花了至少 8 个小时的专门故障排除试图解决这个问题。

我所追求的概念似乎很简单;我正在尝试显示几个标签(<p>'s 和<a>'s 在 a <div>that is 中position:absolute;。我正在利用强制绝对定位的 3rd 方 Javascript 覆盖流,但我愿意进行任何修改以使其正常工作.

我很自然地认为这是一个z-index只影响 Safari的问题,但在 Chrome、IE、Edge 和 Firefox 中没有渲染问题,包括 Android 移动设备。

当查看来自 iOS/Safari 和可能的 macOS 的媒体封面时,可以在 www.bibleanthem.com 上轻松重现该问题;在它最初加载的一瞬间,元素是可见的,然后专辑插图移动到前台。您还可以在专辑插图下边缘的角落看到轻微的“+1”标志。您甚至可以单击两个不可见按钮所在的位置并与文档进行交互(例如立即播放歌曲或添加到播放列表)。

我试过的

  • 更改(和 IIRC 完全放弃)transform每个 Coverflow 项目的使用情况(请参阅下面的“其他详细信息”部分以获取重要说明)
  • z-index 变化(包括荒谬的大值,如 10000000000000)
  • position为父 div更改为固定的、相对的、粘性的
  • 将position子元素更改为固定的、相对的、粘性的
  • 改变display块和内联块之间
  • 更改overflow层次结构中的大多数元素

附加细节

  • 我过去曾看到 Safari 不能很好地与transform;一起玩的问题。这可能是这里的问题,症状与我过去的经历非常相似,但我无法解决问题。这就是我猜测问题实际存在的地方。

每个 Coverflow 项目的渲染 HTML

<div style="position: absolute; …
Run Code Online (Sandbox Code Playgroud)

safari rendering visibility z-index mobile-safari

5
推荐指数
1
解决办法
886
查看次数

反应 useContext() 性能,自定义钩子内的 useContext

我使用了一个使用React Hooks的结构。它基于包含减速器组合的全局上下文(如在 Redux 中)。此外,我广泛使用自定义钩子来分离逻辑。我有一个包含异步 API 请求的钩子,它变得非常麻烦,我有机会将这个钩子的几乎每个函数拆分成其他钩子,但是这些函数中的每一个都使用全局上下文(更准确地说 - 从 useReducer() 调度) )。

所以,问题:

  1. 可以在每个需要它的钩子中使用 useContext() 吗?
  2. 例如,如果我创建 10 个在内部使用 useContext() 并在组件中使用它们的自定义钩子,它将如何影响性能。

例子:

供应商/Store.js

import React, { createContext, useReducer } from 'react';

export const StoreContext = createContext();

export const StoreProvider = ({ children }) => {
  /**
   * Store that contains combined reducers.
   */
  const store = useReducer(rootReducer, initialState);

  return (
    <StoreContext.Provider value={store}>{children}</StoreContext.Provider>
  );
};
Run Code Online (Sandbox Code Playgroud)

钩子/useStore.js

import { useContext } from 'react';
import { StoreContext } …
Run Code Online (Sandbox Code Playgroud)

javascript rendering reactjs react-context react-hooks

5
推荐指数
1
解决办法
3934
查看次数

Chromium v​​79 图形渲染在 Ubuntu 18 上不可预测地冻结

我正在使用 HTML 和 Javascript 开发应用程序。该应用程序应该执行和关闭远程进程。

我正在使用基于 Ubuntu 18.04 构建的 Chromium 79.0.3945.79。

我的应用程序正在 Chromium 的窗口中运行。执行应用程序后的几秒钟(不可预测:可能是 5 秒或 50 秒),就像它被冻结一样,因为 GUI 没有“图形化”响应,但实际上它没有冻结,因为如果我按下窗口中的按钮,远程进程被执行/终止(即使我没有看到鼠标悬停/单击按钮的动画)。一段时间后,一切正常。对我来说,好像 Chromium 窗口的渲染挂起一样,因为后台的一切都在工作,只有图形没有响应。在开发工具中没有任何错误。

我注意到的一件奇怪的事情是,如果我运行 Chrome 的任务管理器 ( Shift+Esc ),问题就不会出现并且一切正常。

当我运行 Chromium 启动窗口时,我遇到了同样的问题 chromium-browser从终端并在“设置”菜单中导航(因此,问题不是我的应用程序)。

我已经尝试通过设置或终端 ( --disable-gpu)禁用某些设置,例如硬件/gpu 加速,但问题仍然存在。此外,RAM 和 CPU 使用率很低。

ubuntu rendering freeze chromium

5
推荐指数
1
解决办法
1710
查看次数