在我们的上下文中使用preserveDrawingBuffer时,我们需要自己清理绘图缓冲区.我在我的应用程序中使用此技术.
我读了一些文章说 - 将此标志设置为false可以获得更好的性能.
在我的应用程序设置为false时,在某些情况下我需要自己清理前缓冲区,因为当没有绘图时我们仍然可以看到之前绘制的内容.
我的问题是,现在值得将我的应用颠倒过来并覆盖所有案例以获得更好的表现吗?它真的改善了吗?
当这个标志为真(并且执行gl.clear(..)
)与false相比时,是否有任何演示显示性能的不同?
在我的网站上,我有很多数据阵列.例如:顶点数组,颜色数组,大小数组...
我正在处理大量物品.高达数千万.
在将数据添加到数组之前,我需要处理它.到现在为止,我在主线程中做到了这一点,这让我的网站冻结了X秒.它因处理而冻结,并且因为将处理后的数据添加到数组中.
今天我'把'(做了很多工作)处理成了web worker,但处理后的数据正在主线程中添加.我设法节省了处理的冻结时间,但没有添加.
添加只需通过array.push()
或完成array.splice()
.
我已经阅读了一些关于数组是如何工作的文章,并且发现当我们将项添加到数组时,数组被完全复制到内存中具有array.length + 1
大小的新位置并且添加了值.这使我的数据推迟.
我还读到类型数组要快得多.但为此,我需要知道数组的大小,我不知道,并且创建一个带有额外计数器的大型数组,并在中间(而不是数组的末尾)管理添加项目将是一个很多代码改变,我现在不想做.
所以,对于我的问题,我有从Web工作者返回的TypedArray,我需要将其放入常规数组中.什么是最好的方法来做到这一点?(今天我在一个循环中跑,一个接一个地推)
编辑
网站工作原理示例:客户端添加项目数,例如100000.正在收集项目原始数据并发送给工作人员.工作人员正在处理所有信息并将处理后的数据作为类型数组发回(用作可转移对象).在主线程中,我们将处理后的数据添加到数组 - 最后或某些特定索引中.第二轮.客户端添加另外100000个项目.发送给worker并将结果添加到主线程数组中.第3轮可以是10项,第4轮10000,第5轮可以删除指数10-2000,...
无法迁移到Webpack 4.
我提供了一个库,我的目标是有libs
,core
,extensions
文件(就像我设法在3的WebPack做).
因此我创建了3个入口点来导入我的所有代码(为了捆绑它).
这是webpack配置3的一部分:
const outputFileName = `MyInfra`;
...
entry: {
"myLibs": './infra/libs",
"myCore": './infra/core",
"MyExt1": './infra/ext1",
},
output: {
path: path.join(__dirname, 'dist'),
filename: `${outputFileName}.js`,
sourceMapFilename: `maps/${outputFileName}.map.js`,
libraryTarget: 'umd',
umdNamedDefine: true
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.optimize.CommonsChunkPlugin({ names: ['myCore',
'myLibs'], filename: `${outputFileName}.js` })
],
Run Code Online (Sandbox Code Playgroud)
这创建了我想要的3个文件,并且只在libs
文件中添加了webpackBootstrap
代码.
从我的用户我希望包括libs
,core
和extension
在他的html
顺序.
我现在正在尝试迁移到splitChunks.cacheGroups
- 但没有成功.
我设法达到的最接近的结果是:(我更改了没有昏迷的入口点名称)
optimization:{
splitChunks: {
cacheGroups:{
default: false,
myLibs: { name:"libs", …
Run Code Online (Sandbox Code Playgroud) 我的 webgl 上下文丢失/恢复有问题。
我的应用程序非常繁重,包含大量信息、图表、列表……和地图。
在地图中,我使用 webGL 以获得最佳性能。我的代码正在处理丢失并正确恢复的上下文。
我正在开始一个大操作,导致从服务器加载数据,解析它,...这有时会使浏览器失去我的 webgl 上下文。问题是上下文永远不会恢复。当我再次进行这个大操作时,我得到了恢复事件。
在我看来,这与内存和垃圾收集器的释放时间有关。
但我真的不知道该怎么做,以及如何解决这个问题。
我的属性包含像素值。我想用这个属性值来偏移我的 gl_vertex 。
问题是我的 gl_vertex 以世界单位为单位,而 offset\attribute 以像素为单位。
如果我将屏幕尺寸作为统一发送,然后将像素转换为 -1 到 1 值,并将其添加到最终的 gl_Position 中,我就可以做到这一点。但我现在不想管理屏幕尺寸事件并在每次绘制、我拥有的每个着色器时发送它。
有没有办法通过一些矩阵游戏或它们的逆矩阵来做到这一点?
为了方便起见,我想将 gl_Position 设置为像素 50,50。
vec4 myPixelValue = vec4(50,50,1,1);
gl_Position = <Something> * myPixelValue;
Run Code Online (Sandbox Code Playgroud)
- - 添加 - -
在我了解到如果不向着色器发送窗口大小就不可能做到这一点后,我决定发送该大小。我创建了以下顶点着色器代码
attribute vec2 spriteOffset;
uniform vec2 screenSize;
void main()
{
vec2 screenConvert = vec2(2.0 / screenSize.x, -2.0 / screenSize.y);
vec2 convertedPix = spriteOffset * screenConvert;
gl_Position = (gl_ModelViewProjectionMatrix * gl_Vertex) + vec4(convertedPix, 0.0, 0.0);
}
Run Code Online (Sandbox Code Playgroud)
此代码仅适用于 2D(正交投影)。但不是 3D。我现在遇到了问题。我知道我还需要考虑 Z 值,但不知道如何。
任何人 ?
我正在使用画布,我想不出任何解决方案,或在我的问题上找到答案.
我有一个字体,其中包含不同大小的符号\字符 - 高度和宽度.
我想从字体中绘制一些字符(符号),在符号的顶部\下面绘制一些字符.问题是我无法找到一种方法来获得我正在绘制的角色的精确高度(以像素为单位),并且它会导致中心符号与顶部\下方的符号之间出现不需要的空间(以获得宽度)一个字符串,有函数context.measureText(theText)).
对于前 让我说我希望'X'成为我的中心符号.和' - '在顶部.它看起来像这样
-
x
但现在'X'和' - '之间有空间,我不想要.
谁能帮我这个 ?
谢谢
javascript ×4
webgl ×2
arrays ×1
canvas ×1
character ×1
height ×1
measure ×1
memory ×1
opengl ×1
performance ×1
pixel ×1
shader ×1
typed-arrays ×1
vertex ×1
web-worker ×1
webpack ×1
webpack-3 ×1
webpack-4 ×1