Ответ 1
Из моего опыта:
- Он делает вложение
- Накладные расходы на функционирование минимальны (inlining)
- Что дорого стоит передать огромные строки для функций, так как они должны быть скопированы, и из моего опыта V8 не всегда настолько умен, насколько это возможно в этом случае
- Сфера поиска дорогая (сюрприз)
- Не делайте трюков, например. У меня есть двоичный кодер для JS Object, который выдает некоторую дополнительную производительность с перемещением битов там (вместо Math.floor) последним Crankshaft (да alpha, но все же) запускает код на 30% медленнее
- Не используйте магию. eval, arguments.callee и т.д. Они почти убивают любую оптимизацию, поскольку код больше не может быть встроен
- Некоторые из новых материалов ES5, например.
.bind()
на самом деле медленнее в V8 в данный момент - Как-то
new Object()
иnew Array()
в данный момент немного быстрее (MICROoptimization, если вы не пишете сумасшедший кодер с{}
и[]
)
Мои правила:
- Напишите хороший код
- Записать рабочий код
- Напиши код, который работает в строгом режиме (поддержка по-прежнему чтобы приземлиться, но когда дальнейшая оптимизация может быть применена V8)
Если вы эксперт JS и уже применяете все хорошие практики к своему коду, вряд ли что-нибудь вы можете сделать для повышения производительности.
Если вы столкнулись с проблемами производительности:
- Проверить их
- Измените код/алгоритм
- И в крайнем случае: напишите расширение С++ (и следите за каждой фиксацией на ry/ node на GitHub, так как никто не заботится о том, что некоторые внутренние изменения нарушают вашу сборку)