2016-01-04 13 views
23

BluebirdライブラリのwikiにはOptimization killersという記事があります。複合let/const代入は何を意味しますか?

現在、最適化可能ではない:この記事ではフレーズがある化合物のconstの割り当てが含まれている割り当て
機能を聞かせて化合物を含んでい
...
機能は何

複合代入と複合const割り当てはどういう意味ですか? ECMAScript 5.1にはcompound assignmentという概念がありましたが、ECMAScript 2015では、通常の割り当てだけがあるような化合物の割り当ての概念はないようです。

私は化合物letとconstの割り当てを疑う、それは宣言後の複合代入です。例:

let n = 1; 
n += 4; 

私はそうですか?

+0

化合物の定義から:「2つ以上の別個の要素からなるもの;混合物」。それで、 'let n = 1 + someval'は複合代入で、' let n = 1'はそうではないと思いますか?しかし、絶対的な信頼をもって言うことができませんでした... – AdamJeffers

答えて

15

はい、それはまさにそれが意味するようです。私は(無関係な追加の行は削除)次のコードを持っていた:Chromeのプロファイルタブでは、サポートされていないのlet複合代入を、私は= ... +代わりの+=を試してみましたが、得た:

function updatePlayer(player) { 
    let direction = player.getDirection(); 
    if (player.isPressingLeft()) { 
     direction += angleChange; 
    } 
    if (player.isPressingRight()) { 
     direction -= angleChange; 
    } 
    player.setDirection(direction); 
} 

updatePlayerが最適化されていない、警告を生成しました重大で一貫したパフォーマンスの向上。

jsPerf shows that let compound assignments are indeed extremely slow in Chrome 49.0.2623+ ... =またはvarと比較して! FirefoxやIE11、Edgeは影響を受けていないし、Googleが明らかにこの問題について知っているので、これは将来のバージョンで修正されるだろう。

+11

これは正しいようですが、 'const'宣言は再割り当てできないので、 "複合' const'代入は何ですか? –

+0

パーティーに遅れることもありますが、 'let x = 1、y = x;' let x = 1; y = x;とする。ちょうど推測。 – Josh

+4

なぜこれはやっている*まだ*最適化を殺す?これは '--trace_opt --trace_deopt'の中で常に見られます。 "+ ="のような複合代入文はあまりにも単純で使い勝手が悪いです。 – TylerY86