Al operar en objetos, uno puede tener acceso a la propiedad ya sea en:
const f = (x, y) => x + y; , f(ox, oy) .const f = o => ox + oy; , f(o); (o similarmente, const f = ({ x, y }) => x + y; , f(o); ). Desde mi ingenuo entendimiento, el primero probablemente usa los cachés en línea del sitio de llamada, mientras que el último toma los de la función en sí. En un escenario, donde f se llama con todo tipo de objetos, siempre que tengan las propiedades x e y , esto en mi opinión podría conducir a un escenario megamórfico para este último, que ya no utiliza cachés en línea.
Algunas renuncias generales aquí:
f en el sitio de llamada, probablemente hacen que esto sea irrelevante en casos típicos.Con mi conocimiento actual, para parámetros desestructurados, parece que V8 podría potencialmente cambiar al primer caso, reemplazando todas las llamadas con los accesos de propiedad, seguido de una llamada a una función modificada que toma los valores directamente. Esto se debe principalmente a que, en primer lugar, el cuerpo de la función nunca tiene acceso al objeto en sí. En cierto modo, siempre se prefiere una "incrustación ligera", aunque tal vez completamente incrustada. Esto no parece estar hecho, pero no puedo asegurarlo.
¿Hay algo defectuoso en mi comprensión, la función en línea realmente resuelve esto casi por completo, o hay casos problemáticos? ¿Hay algún artículo que deba leer para fortalecer mi comprensión?