Доступно ли сравнение скорости капучино obj_msgSend() с обычным JavaScript-вызовом?
Как вы знаете, Cappuccino реализует механизм диспетчеризации Objective-C / Smalltalk для отправки сообщений объектам (вызова их методов) в специальном методе objj_msgSend.
[someObject someMethodToInvocate: aParameter];
Очевидно, что это приводит к некоторым накладным расходам и, следовательно, к потере скорости. Я хотел бы знать, может ли кто-нибудь обеспечить сравнение скорости между отправкой сообщений и обычным способом выполнения метода в JavaScript…
someObject.someMethodToInvocate(aParameter);
3 ответа
objj_msgSend
для моих простых тестов чистого вызова метода примерно в 2–2,5 раза медленнее, чем прямой вызов.
Это на самом деле довольно хорошо, учитывая расширенные возможности, которые это делает возможным.
В ваших комментариях вы говорите, что вам интересно "в целом" в контексте приложений для капучино. В этом случае проверка проста: запустите любое приложение Cappuccino, например, GitHub Issues, и убедитесь сами, работает ли оно медленно или нет. Попробуйте прокрутить основную таблицу, выбрать несколько записей и так далее. Это скажет вам, является ли Cappuccino быстрым или медленным "в целом", поскольку objj_msgSend широко используется в любом случае использования, о котором вы можете подумать в таком приложении.
Если вы на самом деле думаете о чем-то более конкретном, обратите внимание, что ничто в Cappuccino не заставляет вас использовать передачу сообщений. Как и в Objective-C, вы всегда можете "упасть до метала" - в данном случае - на чистый JavaScript - когда вам нужно сделать что-то более интенсивное. Если у вас узкий цикл, и вам не требуются дополнительные функции, предоставляемые objj_msgSend, просто вызовите функции напрямую. Объектив-J не будет возражать.
Это будет на два года позже, но это немного неверный вопрос (ни в коем случае не говорите, что это плохой вопрос). В действительности нет смысла подвергать сомнению скорость 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..., все они хороши, хороши и полезны. Но они наносят вред сообществу разработчиков, потому что все полагаются на эти структуры вместо того, чтобы изучать основные языковые функции, которые делают любой язык полезным.
Сделайте себе и сообществу разработчиков услугу и ИЗУЧИТЕ СВОИ ЯЗЫКИ, НЕ РАМКИ. Если вы знаете языки, которые используете, используемые вами фреймворки не имеют значения, используйте их или просто создайте их самостоятельно, потому что на этом этапе вы должны это делать.
Надеюсь, что это оказалось полезным и не снисходительным, это не мое намерение.:)