2016-11-16 9 views
2

JavaScript V8エンジン(Chrome、ノード)は、内部的にConsString構造体を使用して連結された文字列を表します。V8 ConsStringをフラット化する方法は?

この構造体を単純なStringにフラット化する方法の1つは、オンラインで言及したところではstring.charCodeAt(0)を使用することです。しかし、これはもはや機能しないようです(Chrome 54でテスト済み)。

V8でConsString構造をフラット化する別の方法はありますか?

作成後にこれらの文字列を使用する方法は、平坦化された文字列(たとえば、メモリ使用量の削減)の恩恵を受けます。

+0

ノードの内部動作についてはわかりませんが、連結された文字列から新しい 'String'を作成することはできません。例えば。 '新しい文字列(myConcatString)'。それともパフォーマンスに影響が出るのですか? – watzon

+0

@ChrisW - いいえ、 'new String()'は平坦化を実行しません。代わりに、ソースと同じ内部表現を囲むラッパーを作成するだけです。 –

+0

ああそうです。私は役に立つ入力がないと思います:/ – watzon

答えて

1

Number(str)は、依然として内部文字列を平坦化します。正確にはnpmモジュールflatstrがあります。あなたのコードは一見無作為の​​がいっぱいではありませんこのように。 https://www.npmjs.com/package/flatstrを参照してください。

+0

これは確かに 'ConsString'インスタンスを平坦化するように見えますが、潜在的な欠点もあります。私のテストでは、文字列が内部的に' InternalizedString'として格納されている場合、 'Number(str)'を呼び出すと、単純な 'String'や' OneByteString'を使うとメモリ使用量が増える可能性があります。回避策が悪い結果をもたらさない場合は、それぞれのユースケースを個別に調査する必要があります。 –

関連する問題