为了了解它的性能,我手工编写了一个非常短的asm.js模块,它使用32位整数数学和类型化数组(Int32Array)模拟2D波动方程。我有三个版本,都尽可能相似:
普通(即可读的,尽管是C风格的) JavaScript
与1一样,根据火狐和其他工具添加了asm.js注释,使其通过验证器
与2相同,除非没有“使用asm";指令在顶部
我在上留下了一个演示,它允许您在模块之间切换以查看使用每个模块的效果。这三种方法都能工作,但速度不同。这是热点(带有asm.js注释):
for (i = 0; ~~i < ~~h; i = (1 + i)|0) {
for
当某些带有asm.js指令的use asm;代码在Firefox中被解析时,控制台将告诉我它是否成功地验证和编译。类似于:
Successfully compiled asm.js code
(total compilation time 0ms; not stored in cache (too small to benefit))
是否也有办法在Chrome中获取这些信息?
据我所知,Asm.js只是一个严格的JavaScript规范,它使用JavaScript特性,而不是一种新的语言。
例如,它没有使用var a = e;,而是提供了var a = e|0;。
我的问题是,如果asm.js只是一个定义,可以通过改变使用和声明变量和动态类型的方式来实现,那么"use asm";实际上是做什么的呢?是否有必要在声明函数的主体之前将此字符串放入?
我试图在Firefox29中运行asm.js代码,但我从调试器控制台得到了以下警告:
TypeError: asm.js type error: Disabled by debugger
以下是代码:
function boo() {
"use asm";
var result = 0;
for (var i = 0; i < 1000000000; i = (i + 1) | 0) {
var result = result + i | 0;
}
}
当我使用asm.js时,它似乎是禁用的,我如何解决这个问题?
我试图将asm.js注释添加到perlin噪声函数中:
"use strict";
// Ported from Stefan Gustavson's java implementation
// http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf
// Read Stefan's excellent paper for details on how this code works.
//
// Sean McCullough banksean@gmail.com
function
我有一个图像存储在一个Uint8ClampedArray在我的网页。我想将此映像保存在服务器上的jpg/png文件中。
我可以访问执行以下代码的图像:
canvas.putImageData(imgData,0,0);
// create a new img object
var image=new Image();
// set the img.src to the canvas data url
image.src=canvas.toDataURL();
现在,在我的image.src中,我有一个非常长的字符串,它表示图像。
我有两个问题:
我是否需要使用画布来获取img源代码,或者