nodejsを風のように速くさせる10の小さい技巧
14515 ワード
英語のテキスト接続
1、同期を避ける方法
nodejsはシングルスレッドに基づいています.単スレッドが高合併の要求を処理できるようにするためには、スレッドの待ち時間、ブロッキング、同期、および長時間の動作を回避するようにしています.nodejsの一つの顕著な特徴は、徹頭徹尾の異歩である.この特性はイベント駆動に基づく応用において非常に優れている.
残念なことに、nodejsには、同期またはブロックコール方法が依然として存在する.例えば、多くのファイルシステムは非同期の方法もあります.fs.writeFileとfs.writeFileSyncのように.コード内での同期方法の使用は避けられますが、外部ライブラリを参照すると、ブロックを引き起こす方法が含まれています.このような状況が現れると、性能に大きな影響を与える.
1、同期を避ける方法
nodejsはシングルスレッドに基づいています.単スレッドが高合併の要求を処理できるようにするためには、スレッドの待ち時間、ブロッキング、同期、および長時間の動作を回避するようにしています.nodejsの一つの顕著な特徴は、徹頭徹尾の異歩である.この特性はイベント駆動に基づく応用において非常に優れている.
残念なことに、nodejsには、同期またはブロックコール方法が依然として存在する.例えば、多くのファイルシステムは非同期の方法もあります.fs.writeFileとfs.writeFileSyncのように.コード内での同期方法の使用は避けられますが、外部ライブラリを参照すると、ブロックを引き起こす方法が含まれています.このような状況が現れると、性能に大きな影響を与える.
// :
fs
.
writeFile
(
'message.txt'
,
'Hello Node'
,
function
(
err
)
{
console
.
log
(
"It's saved and the server remains responsive!"
);
});
// :
fs
.
writeFileSync
(
'message.txt'
,
'Hello Node'
);
console
.
log
(
"It's saved, but you just blocked ALL requests!"
);
2、 socket
nodejs http clientは自動的にsocket接続池を使います.デフォルトでは各ホストはsocket perを5つに制限します.socketが再利用された後の資源の成長は制御できなくなります.特に同じホストから大量の同時要求データを送信すると、深刻な性能のボトルネックを引き起こします.この場合、最善の解決策は、maxSocketsを追加するか、またはsocket接続池を無効にすることです.
var
http
=
require
(
'http'
);
var
options
=
{.....};
options
.
agent
=
false
;
var
req
=
http
.
request
(
options
)
3、 nodejs
css , web , nginx , CDNs.
:(1) nodejs (2)CDNs 。
4、
。 nodejs , html :
<html>
<head>
<title>LinkedIn Mobile
</title>
</head>
<body>
<div
class=
"header"
>
<img
src=
"http://mobile-cdn.linkedin.com/images/linkedin.png"
alt=
"LinkedIn"
/>
</div>
<div
class=
"body"
>
Hello John!
</div>
</body>
</html>
らかにユーザーの はダイナミックで、 は です.つまり じものを み むということです.もっと な は に ることです.
nodejsはダイナミックなjsonデータを します.
{「name」:「ジョン」}
りの なラベルはjavascriptのモダリティエンジンを うことができます.
<html>
<head>
<title>LinkedIn Mobile
</title>
</head>
<body>
<div
class=
"header"
>
<img
src=
"http://mobile-cdn.linkedin.com/images/linkedin.png"
alt=
"LinkedIn"
/>
</div>
<div
class=
"body"
>
Hello
<%= name %>!
</div>
</body>
</html>
javascriptモデルは、nginxエージェントを することができますが、 には、CDNに くと、より いです.
また、テンプレートの の でブラウザキャッシュに したり、ローカルストレージに したりすることができます.その 、ページ が しました.
ダイナミックなjsonデータのインタラクションが っています.cpu とio は に した.
5、gzipを く
ウェブサーバやクライアントの をサポートすることが えています.
このメリットは に さないでください.クライアントに しても、 してもいいです.
6、
リモートサービスの 、データベースの び し、ファイルシステムのアクセスなどを して してみます.これらの が の で される
の の は の と じです.おすすめ
Step
あなたのcalbackプロセスを します.
7、sessionはなるべく わない
エクスプレスフレームワークは、request/reponseのライフサイクルを し、 くのexpressの は、 の を む.
app.use(express.session);
デフォルトでは、Seesionはメモリに されています.これはサーバの オーバーヘッドを させ、 にユーザ が するときに されます.
sessionをデータベースに できます. えば、MongoDBやRedisなどです.
しかし、 は、データベースからsession を することによって、 の オーバーヘッドを させる.
できれば、サーバーに を しないほうがいいです.expressにはこのような はありませんが、 の は らかです.
8、バイナリモジュールを する
できれば、javascriptのモジュールをバイナリモジュールに させ、
えば、javascriptでSHAを くモジュールからバイナリモジュールにコンパイルするに り わると、 きな が を させることが かります.
//
var
crypto
=
require
(
'crypto'
);
var
hash
=
crypto
.
createHmac
(
"sha1"
,
key
).
update
(
signatureBase
).
digest
(
"base64"
);
9、クライアントライブラリではなく v 8 javascriptを する
くのjavacriptライブラリはウェブブラウザに に われています.
これらのブラウザのjavascriptエンジンは しません. のブラウザはforEach、mapとreduceのようないくつかの をサポートしています.
しかし、 のブラウザにはこれらの がない.
として、クライアントライブラリは、 の を するために、 くの のコードを んでいる.
ところで、 にnodejsのどの が えますか?nodejsはv 8エンジンを って、v 8が しました.
ECMA-262,5 thエディション
v 8 を すると、 きな が します.
10、コードを に つ
お のコードを に します.お でもサービスします.「 たちは にこのモジュールが ですか?」「なぜこのフレームが ですか?」「 の は がありますか?」「もっと な がありますか?」シンプルなコードはより になりがちです.