2016-09-11 6 views
0

JSがどのようにケースを処理しているかについて質問があります。長いキーのJSハンドリングオブジェクト

var object = {}; 

、文字列としてメモリ内のXML::あなたができるよう

var xml = '<node1><node2>blah blah....'; 

は今、あなたは、いくつかの情報とそのXMLを関連付ける

レイさんは、あなたが空のオブジェクトを持っていると言います次のようなものです:

object[xml] = 'extra info'; 

オブジェクトがN propを持つように複数のXMLがあるとします長い文字列をキーとし、他のオブジェクトを値として持つ可能性があります。

質問は、JSがキーを使ってこれらのプロパティへのアクセスを処理する方法(これはXMLを知ることを意味します)と、パフォーマンスがどのようになっているかです。それは文字列を比較するキーの反復ですか、それとも何か他のことが起こっていますか?

ありがとうございます!

編集:明確にするために、これは私がやりたいことではありませんが、hereのように私が使っているライブラリ(Moustache.js)がやっていることです。私はこれがアプリケーションのパフォーマンスにどのような影響を与えるかを知りたい。

+0

おそらく、キーと値を保存して再び参照できるハッシュマップです。 XMLの文字列をキーとして使用することは、その文字列の長さに関係なく、**恐ろしい**アイデアのように見えます。 – adeneo

+0

これは私がやりたいことではありませんが、Moustache.jsのコードで[this](https://github.com/janl/mustache.js/blob/master/mustache.js#L441-L453)私はそれ以来不思議だった。 – jlavera

答えて

2

キーを追加するか、値をルックアップする必要があるたびにXMLをハッシュできます。これにより、メモリの所要量は削減されますが、ルックアップを実行する際の処理時間が長くなります。

var xml = '<node1><node2>blah blah....'; 
object[hash(xml)] = 'extra info'; 

var info = object[hash(xml)]; 

あなたが鍵をループにより、たとえば、再びXMLを引き出すことができるようにする必要がある場合は、あなたの代わりにサイズを小さくするためのシリアル化技術を使用することができます。

var xml = '<node1><node2>blah blah....'; 
object[serialize(xml)] = 'extra info'; 

for (var key in object) { 
    var originalXml = deserialize(key); 
    var info = object[key]; 
} 
+0

こんにちはブランドン。私はこのコードが自分のライブラリにあるので、自分のアプリケーションに与える影響についての質問であることを明確にした記事を編集しました。しかし、とにかくあなたの答えに感謝します。 – jlavera

+0

しかし、エンジンはすでにあなたのためにハッシングしています。 –

+0

どういう意味ですか?私はそれがプレーンXMLをキーとして使用しているのを見ます – jlavera

関連する問題