0

如你所知,Cappuccino 实现了 Objective-C / Smalltalk 的调度机制,以一个名为 objj_msgSend 的特殊方法向对象发送消息(~调用它们的方法)。

[someObject someMethodToInvocate: aParameter];

显然,这会引入一些开销,从而导致速度损失。我想知道是否有人可以提供此消息发送与在 JavaScript 中执行方法的正常方式之间的速度比较......</p>

someObject.someMethodToInvocate(aParameter);
4

3 回答 3

4

在您的评论中,您说您想知道在卡布奇诺应用程序的上下文中“一般”。在这种情况下,测试很简单:运行任何 Cappuccino 应用程序,例如GitHub Issues,并自行判断它是否慢。尝试在主表中滚动,选择一些条目等等。这将告诉您卡布奇诺咖啡“一般”是快还是慢,因为 objj_msgSend 广泛用于您可以在这样的应用程序中想到的任何用例中。

如果你真的在想一些更具体的东西,请注意卡布奇诺并没有强迫你使用消息传递。就像在 Objective-C 中一样,当你需要做一些性能更密集的事情时,你总是可以“降级”——在这种情况下是纯 JavaScript。如果您有一个紧密的循环,并且您不需要 objj_msgSend 提供的附加功能,只需直接调用函数即可。Objective-J 不会介意。

于 2010-11-11T19:09:47.100 回答
1

objj_msgSend用于我对纯方法调用的简单测试,它比直接调用慢 2-2.5 倍。

考虑到它可以实现的高级功能,这实际上非常好。

于 2010-11-12T15:21:54.800 回答
-2

这来得太晚了两年,但这是一个稍微无效的问题(绝不是说这使它成为一个坏问题)。真的没有必要质疑 objj_msgSend 的速度,而不是当您假设它是 Smalltalk/Obj-C/Obj-J 特定功能时。

Javascript 一直都有这种能力。

查找: call() 和 apply() 方法...(快速谷歌搜索会出现这样的文章 -> http://vikasrao.wordpress.com/2011/06/09/javascripts-call-and-apply -方法/

jQuery/Prototype/etc 也是同样的问题......,它们都很好,花哨且有用。但它们伤害了开发社区,因为每个人都依赖这些框架,而不是学习使任何语言有用的核心语言特性。

帮自己和开发社区一个忙,学习你的语言,而不是框架。如果您知道您使用的语言,那么您使用的框架是无关紧要的,使用它们或只是自己构建它们,因为那时您应该能够做到。

希望这会有所帮助而不是居高临下,这不是我的意图。:)

于 2012-03-03T17:25:34.547 回答