Размеры функций
Привет всем. Надеюсь, не стоит спрашивать, зачем строить уровни абстракций и вообще дробить задачи на мелкие подзадачи.
у меня на повестке дня другой вопрос. Все мы знаем, что наш код (JavaScript'овый) сначала компилируется в медленный (относительно) байткод, который при определённой доле статичности компилируется в машинный код (как C++ :) ) Так вот, помните в спецификации были описаны процедуры, которые проводятся при вызове каждой функции? Если писать очень много функций, каждый вызов будет проводиться эта долгая операция по проверке, вообще функция ли смеет в коде вызываться, какие аргументы она берёт формально и фактически и т.д. Логично же сказать то, что JavaScript'овые движки будут inline'ить функции? Конечно. Но не все. Мой вопрос связан с тем, какие условия проверяются при том проверке того, можно ли заинлайнить вот эту (сферическую в вакууме функцию в любом вашем коде) функцию? Среди срача отладочных сообщений V8 мне удалось вытащить некоторые (по любому не все же, верно?) условия, при которых inline'ить функцию нельзя ни в коем случае и следует замедлять её вызов с помощью "полосы препятствий", предложенных спецификацией. Итак , функцию нельзя inline'ить, если :
И вот последнее мне не даёт покоя. Сколько кода нужно иметь в функции? Каких объёмов они должны быть? |
Цитата:
если не совру: если при инлайне меняется контекст, то функция не может быть заинлайнена. ещё она не инлайнится при вызове функции через call\apply. Цитата:
Примеров кода надо найти на просторах винта, так что пока верьте на слово :) Цитата:
тут я сам хз . но можно чуть попоже порыться в сорцах V8 так то насчёт производительности инлайна помнится мне, что оптимизация (компиляция в машинный код) кода функции давало прироста поболее, чем её инлайн. походу, тут нужны тесты и пруф линки ) |
Часовой пояс GMT +3, время: 10:04. |