nodejsを風のように速くさせる10の小さい技巧

14515 ワード

英語のテキスト接続
 
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、コードを に つ
お のコードを に します.お でもサービスします.「 たちは にこのモジュールが ですか?」「なぜこのフレームが ですか?」「 の は がありますか?」「もっと な がありますか?」シンプルなコードはより になりがちです.