Pergunta

Isso é uma questão aleatória, mas eu estava me perguntando por que um retorno de chamada nomeado estava piorando, para um evento de clique, em relação a uma função anônima.

Aqui está o link para o JSPERF Testes que executei no Firefox e Chrome no Mac.

Acho que minha suposição era que os retornos de chamada nomeados sempre tenham um desempenho melhor. Por exemplo, ao usar .each o retorno de chamada nomeado é um pouco mais rápido.

Obrigado pelo seu tempo!

Editar Eu editei o .each Teste jsperf porque (a) eu não estava testando o que eu quis dizer e (b) eu estou tentando para imitar mais eventos.

Editar 2 Minha configuração de teste estava incorreta desde o início, pois @eseilija aponta abaixo. Esta questão é um tanto inútil, mas pelo menos pode ajudar alguém com testes JSPERF.

Foi útil?

Solução

O JSPERF está quebrado porque você acumula manipuladores de eventos nos limites de teste. Em outros Wrods, qualquer teste que seja executado primeiro será o "mais rápido".

E toda a premissa do teste é ridícula, não há diferença entre uma função que tenha um nome e uma função que não tenha um nome se todo o resto for igual. Você só verá uma diferença quando estiver configurando o JSPERF incorretamente. Quando você constantemente obtém resultados iguais para eles, você sabe que o configura corretamente - mas você já saberia disso do bom senso :)

Outras dicas

A função anônima é aprovada como um argumento; portanto, para resolver sua referência, a cadeia de escopo não chega à função pai que a criou - ela só existe como um argumento. Por outro lado, para resolver a referência à função nomeada, a cadeia do escopo é seguida até o fechamento da função pai em que a função nomeada foi criada.

Editar:Eu tentei provar isso, mas parece que a função anônima não é realmente resolvida mais rapidamente - http://jsperf.com/scope-chain-anonymous-function

Editar: Se você ligar a.off(); Para remover todos os manipuladores de eventos, a função nomeada será tão rápida ou mais rápida do que resolver a função anônima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top