0

ExpressFrameworkのcookieParserミドルウェアを使用しているNode.jsアプリにCookieを保存していると考えてください。

app.use(express.cookieParser());

app.get('/setCookie', function(req, res){
   res.cookie('String_cookieName', 'String_value', { expires: new Date(Date.now() + 18000000), httpOnly: true }); // +5 Hours expiry
});

そしてそれらを読み返している間、私は2つの選択肢に出くわしました:

  1. request.cookies['String_cookieName']
  2. request.cookies.name

どちらもstring_value、Cookie('String_cookieName')に設定したを返します。それ以外の場合は、有効期限が切れた場合undefinedに返されます。

しかし、私の質問は、パフォーマンスの点でどちらがより高速で効率的かということです。

4

3 に答える 3

3

Request.cookiesは単なるオブジェクトです。作成したメソッドのいずれかを使用して、オブジェクトの任意のメンバーにアクセスできます。object.xxxは通常、アクセスしているフィールドの名前がす​​でにわかっている場合に使用されますが、フィールド名が動的な場合は通常、角かっこが使用されます。例えば:

var variable = "foo";
object[variable] = "bar";

variable = "test";
object[variable] = "qwax"

console.log(object.foo); //"bar"
console.log(object.test); //"qwax"

私の知る限り、どちらも他よりも大幅に高速ではないため、静的フィールドにアクセスしている場合は、それらを交換して使用できます。

于 2013-01-24T11:18:54.373 に答える
1

パフォーマンスは実質的に同じです。jsperfを参照してください。

多くのCookieの例では、ドット表記を使用して直接アクセスできない文字が含まれていることが多いため、プロパティを文字列として角かっこで囲んでいます。

例:

cookies['connect.sid']  // OK
cookies.connect.sid     // error
于 2013-01-24T18:17:39.777 に答える
0

違いはありません。JavaScriptには、オブジェクトのフィールドにアクセスする2つの方法があります。

私の意見では、オブジェクトの多くのフィールドをループしてそれぞれに同じアクションを適用する場合を除いて、request.cookies.name、request.cookies['name']のような単純な表記を使用することをお勧めします。

//lets say you have object like one below: var someObj = {};
someObj.x1 = 1; 
someObj.x2 = 2; 
someObj.x3 = 3; 
someObj.x4 = 4;
someObj.x5 = 5; 
... 
someObj.x20 = 20;

//And if you want to output properties 3 to 12 
//you can do like that
for(var i = 3; i<12; ++i)
{
   console.log(someObj['x' + i]); 
}

それ以外の場合は、単純な表記を使用するだけです。そうすれば、コードを読みやすくし、他の開発者が理解しやすくなります。

于 2013-01-24T12:33:59.947 に答える