Можно ли сравнить скорость капучино obj_msgSend () с обычным вызовом JavaScript? - PullRequest
0 голосов
/ 11 ноября 2010

Как вы знаете, Cappuccino реализует механизм диспетчеризации Objective-C / Smalltalk для отправки сообщений объектам (~ вызова их методов) в специальном методе objj_msgSend.

[someObject someMethodToInvocate: aParameter];

Очевидно, что это приводит к некоторым накладным расходам и, следовательно, к потере скорости.Я хотел бы знать, может ли кто-нибудь обеспечить сравнение скорости между этой отправкой сообщений и обычным способом выполнения метода в JavaScript…

someObject.someMethodToInvocate(aParameter);

Ответы [ 3 ]

4 голосов
/ 11 ноября 2010

В ваших комментариях вы говорите, что вам интересно «в целом» в контексте приложений для капучино. В этом случае проверка проста: запустите любое приложение Cappuccino, такое как GitHub Issues , и убедитесь сами, работает ли оно медленно или нет. Попробуйте прокрутить основную таблицу, выбрать несколько записей и так далее. Это скажет вам, является ли Cappuccino быстрым или медленным «в целом», поскольку objj_msgSend широко используется в любом случае, о котором вы можете подумать в таком приложении.

Если вы на самом деле думаете о чем-то более конкретном, обратите внимание, что ничто в Cappuccino не заставляет вас использовать передачу сообщений. Как и в Objective-C, вы всегда можете «упасть до метала» - в данном случае - на чистый JavaScript - когда вам нужно сделать что-то более интенсивное. Если у вас узкий цикл, и вам не требуются дополнительные функции, предоставляемые objj_msgSend, просто вызовите функции напрямую. Объектив-J не будет возражать.

1 голос
/ 12 ноября 2010

objj_msgSend для моих простых тестов чистого метода, вызывающего примерно в 2–2,5 раза медленнее, чем прямой вызов.

Это действительно неплохо, учитывая расширенные возможности, которые оно делает возможным.

0 голосов
/ 03 марта 2012

Это будет на два года позже, но это немного неверный вопрос (ни в коем случае не говорите, что это плохой вопрос). В действительности нет смысла подвергать сомнению скорость 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 ..., они все хороши и замечательны и полезны. Но они наносят вред сообществу разработчиков, потому что все полагаются на эти структуры вместо того, чтобы изучать основные языковые функции, которые делают любой язык полезным.

Сделайте себе и сообществу разработчиков услугу и ИЗУЧИТЕ СВОИ ЯЗЫКИ, НЕ РАМКИ. Если вы знаете языки, которые используете, используемые вами фреймворки не имеют значения, используйте их или просто создайте их самостоятельно, потому что в этот момент вы сможете это сделать.

Надеюсь, что это оказалось полезным и не снисходительным, это не мое намерение. :)

...