【问题标题】:Speed comparison of Cappuccinos obj_msgSend() vs. normal JavaScript-call avaiable?Cappuccinos objc_msgSend() 与普通 JavaScript 调用的速度比较可用吗?
【发布时间】:2010-11-11 16:41:17
【问题描述】:

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

[someObject someMethodToInvocate: aParameter];

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

someObject.someMethodToInvocate(aParameter);

【问题讨论】:

  • 也许有区别,但问题是:这有关系吗?浏览器中不同的 javascript 引擎之间可能存在更多差异。做一些分析,看看你的代码大部分时间花在哪里,看看你是否可以优化它。 “过早的优化……”
  • 这是一个普遍的问题,所以是的,这很重要。这也不是过早的优化,因为我想评估可行性,而不是优化某些代码。特别是因为 obj_msgSend 经常被调用。

标签: javascript performance cappuccino objective-j


【解决方案1】:

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

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

【讨论】:

  • 实际上我说的是“一般”,而不是在卡布奇诺应用程序的上下文中。我确实尝试了大多数可用的卡布奇诺咖啡示例,但正如您自己所说:您总是可以放下金属。因此 objj_msgSend 的速度影响并不是真正可评估的。由于似乎没有人为此准备好答案,因此我必须自己做一些基准测试。不过还是谢谢。
【解决方案2】:

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

考虑到它可以实现的高级功能,这实际上相当不错。

【讨论】:

    【解决方案3】:

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

    Javascript 一直都有这种能力。

    查找:call() 和 apply() 方法...(快速 google 搜索会找到类似这样的文章 -> http://vikasrao.wordpress.com/2011/06/09/javascripts-call-and-apply-methods/

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

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

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

    【讨论】:

    • ...现在我觉得有点愚蠢,看看你的标题,它确实说'vs call'。所以你是有意识的。不过,我的观点仍然有效,如果您担心该方法的速度,为什么不直接使用内置语言功能... :)
    • 你不会构建。没有像卡布奇诺这样的框架的卡布奇诺类应用程序。框架很重要。
    • 耶反对票(讽刺)。我只是要忽略我的答案与投票最高的答案并没有什么不同......实际上,如果没有像卡布奇诺这样的框架,模仿 Cocoa 并不难。大多数最有用的东西(AppKit/UIKit)都可以用几百行编写良好的代码来模拟。我知道,我已经做到了。更重要的是您正在构建 Web 内容,它与“普通”应用程序域不同。 Capp 很可爱,但它迎合了与网络不同的世界。是的,它的 MVC,但是你失去了 HTML/CSS,浏览器中最有用的部分。
    • 如果你不了解为什么在一个领域使用某些模式而在另一个领域使用某些模式,你就不会构建一个(好的)Cappuccino Class 应用程序——看看大多数 Java 程序员代码,当你所做的一切都是 iHammerFactory 的时候,一切都开始看起来像一个 iNail,但是在其他领域使用这种模式,你就会开始遇到麻烦
    猜你喜欢
    • 2017-05-17
    • 2010-11-30
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    相关资源
    最近更新 更多