当为JSNI函数使用int或double时,它在性能上有什么不同吗
Does it make any difference in Performance when using int or double for JSNI Functions?
我使用GWT JSNI访问本机JavaScript库。
我想知道我通过JSNI的数据类型的速度是否有什么不同。
示例1:
public static native int test(int value) /*-{
return this.computeSomething(value);
}-*/;
示例2:
public static native double test(double value) /*-{
return this.computeSomething(value);
}-*/;
假设computeSomething()将整数值作为参数,并返回一个整数值。
我必须按照这里的建议强制转换返回值吗:如何在gwt-jsni方法中使用int值
对JSNI函数使用int或double时,性能会有什么不同吗?
有没有办法从JSNI返回int?这里似乎有一个错误:https://code.google.com/p/google-web-toolkit/issues/detail?id=2693
当您从Java调用JS时,编译器相信JSNI代码完全遵循方法签名。这意味着,如果从int
方法返回double
值,您可能会在其他地方获得其他效果。这会产生以下结果:
- 如果您不相信JS代码会返回正确的类型,则需要强制转换。例如,如果方法声明了一个int,但js代码可能会返回一个double,那么你应该强制为int。你的链接问题更多的是返回null而不是数字
-
就性能而言,它没有任何区别。由于GWT假设JS会按照您所说的去做,所以它不会做任何额外的工作来验证(除了在开发模式下,作为验证代码是否有意义的一种方式)
有几种方法可以从可能是浮点的JS数字转换为整数,这样您就可以确信GWT/Java代码可以接受它。第一种方法是简单地返回
double
,然后在Java代码中转换为int
,或者使用Math.round
来删除任何不需要的精度。另一个是在您的JSNI中做com.google.gwt.dom.client.Element#toInt32
在GWT2.6:中所做的事情/** * Fast helper method to convert small doubles to 32-bit int. * * <p>Note: you should be aware that this uses JavaScript rounding and thus * does NOT provide the same semantics as <code>int b = (int) someDouble;</code>. * In particular, if x is outside the range [-2^31,2^31), then toInt32(x) would return a value * equivalent to x modulo 2^32, whereas (int) x would evaluate to either MIN_INT or MAX_INT. */ private static native int toInt32(double val) /*-{ return val | 0; }-*/;
注意链接答案中
| 0
与|| 0
的用法——第一个是按位OR,而第二个是布尔OR。 -
从JSNI返回
int
没有问题——链接的问题是返回java.lang.Integer
,即围绕int
的盒装Java类型。这个问题是有缺陷的,因为com.google.gwt.core.client.JsArrayNumber
已经存在,所以不需要JsArray<Integer>
,您只需要强制转换为int就可以处理舍入问题。
- 什么对性能更好:每个元素的事件或一个具有委派的事件
- 关于性能,最好的方法是什么:setInterval()或body上的全局事件
- 什么最适合性能:带键的数组或包含数组的键
- 什么时候 JavaScript 足够小,值得内联(以获得最佳性能)
- 从 JavaScript 创建 HTML 元素时的性能一致性是什么?
- 在JavaScript中省略分号对性能的边际影响是什么
- 隐藏具有特定ID的元素的最佳方法是什么;不会影响性能
- 有什么方法可以提高JS中for循环的性能吗
- 什么是replaceAll性能秘诀?[HTML转义]
- 隐藏HTML元素的性能更好的方法是什么
- 属性vs变量:性能问题是什么?
- 在脚本中使用代码会在性能上有什么不同吗?标记或从.js文件
- Javascript性能:如何检查是什么使页面变慢
- 在性能方面,在一个页面上显示1000张图片的最佳方法是什么?
- 在Redux中切换到Immutable.js.性能影响是什么?对组件的影响是什么? '语法
- 监视值的设置和获取的“未记录且令人难以置信的非性能”方法是什么?
- 内联Javascript代码和纯Javascript代码之间的最佳性能是什么?
- 什么'是通过websocket实时数据的性能最高的全JavaScript图表选项
- 当为JSNI函数使用int或double时,它在性能上有什么不同吗
- 在JS中,快速存储XY坐标整数的最高性能方法是什么