Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 列出Node.js下的Canvas和WebAudio上下文方法和属性_Javascript_Node.js_Canvas - Fatal编程技术网

Javascript 列出Node.js下的Canvas和WebAudio上下文方法和属性

Javascript 列出Node.js下的Canvas和WebAudio上下文方法和属性,javascript,node.js,canvas,Javascript,Node.js,Canvas,我正在开发一个专门用于demoscene压缩的工具,它是为js1k启动的,目标是1k-4k类别的产品。 我目前面临的困难是让它在浏览器和Node.js环境中工作并产生完全相同的结果 它的一个特点是需要了解2D、GL和音频上下文的所有方法和属性。它还需要GL常量的值。 但是没有方法被调用,因此不需要实际的实现 编辑——一个更好地理解正在发生的事情的示例 提供给封隔器的原始未压缩代码如下所示(在剥离此处不相关的行之后,例如那些向n添加颜色的行) 打包程序计算最佳散列,在本例中为i[0]+i[6]。然

我正在开发一个专门用于demoscene压缩的工具,它是为js1k启动的,目标是1k-4k类别的产品。 我目前面临的困难是让它在浏览器和Node.js环境中工作并产生完全相同的结果

它的一个特点是需要了解2D、GL和音频上下文的所有方法和属性。它还需要GL常量的值。 但是没有方法被调用,因此不需要实际的实现

编辑——一个更好地理解正在发生的事情的示例

提供给封隔器的原始未压缩代码如下所示(在剥离此处不相关的行之后,例如那些向
n
添加颜色的行)

打包程序计算最佳散列,在本例中为
i[0]+i[6]
。然后,它替换代码中的方法,并在循环之前添加一个执行散列(输出是独立的,因此它包含解压例程)。否则在运行时,js解释器将无法理解
c.cR()
实际上是
context.createRadialGradient()
。以下是生成的代码:

如果发生冲突(多个方法产生相同的哈希字符串),则不会执行替换

在浏览器中,只需创建适当上下文的实例并迭代其方法/属性即可。但是,Node.js不提供这种可能性。我需要另一种方法来获取这些信息

对类似问题(或)的回答建议使用或。然而,这些模块并不是其浏览器对应模块的完美镜像,它们既有附加方法,也有其子集。在某些情况下,这将导致哈希算法产生不同的输出


不幸的是,这排除了解决方案,因为两种环境都需要相同的结果。还有什么其他选择?提前感谢。

为什么压缩机找到的路径是标准路径还是非标准路径很重要?只要它们是一致的,就可以了。压缩程序不应使用字典,因为web属性一直在更改…@dandavis已编辑以添加示例。压缩代码以及添加的解包例程将在浏览器中运行。因此,如果散列结果不一致,可能会在node.js下打包一个演示,并生成无法在浏览器中正常运行的代码(例如,node.js下没有发生冲突)。这不会按照编码的方式工作。假设他们在上下文中添加了一个名为“3dalpha”的新属性;之后出现的任何内容都会使索引减少1,而旧脚本将中断。您需要提供替换和完全替换,这意味着除非
createRadialGradient
被多次使用,否则它不值得替换。演示只需低于大小限制并在当前浏览器中工作即可。它们不需要是未来的证明,因此以后对浏览器API的更改不太重要。此外,该算法不依赖于属性的数字索引(在浏览器之间无论如何都是不同的),因此添加新的索引可能只会在散列产生冲突时破坏旧脚本。该工具在浏览器中已经运行良好,请参见
c=a.getContext("2d");
e=c.getImageData(0,0,150,150);
c.fillStyle=n=c.createRadialGradient(225,75,25,225,75,60);
c.fillRect(150,0,150,150);
for(i in c=a.getContext("2d"))c[i[0]+i[6]]=c[i];
e=c.gg(0,0,150,150);
c.fillStyle=n=c.cR(225,75,25,225,75,60);
c.fc(150,0,150,150);