2011-01-17 3 views
13

Есть ли хорошие учебники о том, как быстро писать эффективный код для v8 (в частности, для node.js)?Сжатие производительности из v8

Какие структуры следует избегать использовать? Каковы идиомы, которые оптимизируют v8?

+0

Просто интересно, но почему вы спрашиваете? Разве вы не должны больше беспокоиться о вытеснении производительности из самых медленных (но широко используемых) двигателей рендеринга, чем самый быстрый? Кажется, самый быстрый позаботится о себе. – mVChr

+0

Я просто хочу знать, что V8 не нравится. Мне нужен эффективный код. – nornagon

+0

Хороший ответ nornagon - его невероятно расстраивает, когда вопрос игнорируется, а ответы не связаны. Меня тоже интересует просто ради интересов! –

ответ

18

Из моего опыта:

  • Это встраивание
  • над головой Вызова функции минимальна (встраивание)
  • Что дорого пройти огромным строки для функций, так как они должны быть скопированы, и по моему опыту V8 не всегда так умен, как это могло бы быть в этом случае.
  • Объем поиска ive (сюрприз)
  • Не делайте трюков, например. У меня есть двоичный кодер для JS Object, который выдает некоторую дополнительную производительность с перемещением битов там (вместо Math.floor). Crankshaft (да, но все же) работает на 30% медленнее.
  • Не используйте магию. eval, arguments.callee и т. д. Они почти убивают любую оптимизацию, поскольку код больше не может быть встроен
  • Некоторые из новых материалов ES5, например. .bind() является действительно медленно V8 на данный момент
  • Как-то new Object() и new Array() немного быстрее, в настоящее время (MICROoptimization, если вы не пишете какой-то сумасшедший кодер палку с {} и [])

Мои правила:

  • написать хороший код
  • Написать рабочий код
  • Написать код, который работает в строгом режиме (поддержка до сих пор to land, но когда это делает дальнейшую оптимизацию может быть применен V8)

Если вы эксперт JS и ваш уже применяет все good practices в код, есть вряд ли все, что вы можете сделать для повышения производительности.

При возникновении проблем с производительностью:

  • Проверьте их
  • Изменить код/​​алгоритм
  • И в качестве последнего средства: Написать расширение C++ (и смотреть каждый совершить RY/узел на GitHub, поскольку никто не заботится о том, что некоторые внутренние изменения нарушают вашу сборку)
+0

Спасибо - Javascript Garden выглядит потрясающе :) – nornagon

+0

Это старое сообщение, но я недавно наткнулся на какое-то хорошее видео (от Google IO 2012) о точной вещи. Он был опубликован в 2012 году, поэтому все немного изменилось, но я думаю, что не так много: http://youtu.be/UJPdhx5zTaw – Pijusn

0

Документы дают большой ответ: http://code.google.com/apis/v8/design.html

+0

Документов недостаточно. например: делает ли v8 встраивание? Как дорого стоит вызов функции? Насколько дорого стоит создание объекта? Я хочу знать, как умный v8 находится в самых разных случаях, а не только в доступе к ресурсам. – nornagon

0

Understanding V8 представляет собой набор слайдов из decamp.eu и дает очень интересные советы. В частности, я нашел заметки о том, что полезно избегать «режима словаря», то есть помогает, если вы сохраняете «фигуру» объектов постоянными и не добавляете к ним произвольные свойства.

Вы также должны запустить узел с --crankshaft --trace-opt --trace-bailout (--crankshaft необходим только на 64-разрядных платформах, например OS X), чтобы увидеть, «V8» «поручился» при JIT определенных функциях. Существует тонна других параметров трассировки, включая --trace-gc и различные другие трассировки GC, которые могут быть полезны для оптимизации.

Дайте мне знать, если у вас есть какие-либо конкретные вопросы о слайдах выше, поскольку они немного кратки. :-) Они не мои, но я провел некоторое исследование в областях, которые они покрывают.

Смежные вопросы