2017-07-30 19 views
3

私は現在、エクスプレスエンジンとejを使って、魅惑的なエンジンにノードサーバーを書いています。私の.ejsファイルの中には、それらの内部にネストされた部分的なもののための7 - 8個のインクルードステートメントがあります。私はこれがリソース集中型か、それがうまくいくかどうか疑問に思っていました。ステートメントを含むとパフォーマンスが低下しますか?

+0

Profile it。パフォーマンスは絶対的な特性ではありません。 – zerkms

+1

インクルードはおそらくキャッシュされています(少なくともOSによって、おそらくはejsによって)ので、最初にロードされたときにヒットするかもしれませんが、それ以降はほとんどないでしょう。 – jfriend00

+0

ejsがインクルードをキャッシュするかどうかはどのように知ることができますか? – Programmer

答えて

2

EJSメンテナーはこちら

まず、同じファイルを複数回連続して読み込んでいる場合、ファイルシステムはそのファイルをそのレベルでキャッシュします。

ただし、パフォーマンスを最大限に高めるには、オプションにcache: trueと設定します。 (docs)これを有効にするには、renderFile()を使用するか、ファイル名を渡す必要があります。 Expressを使用している場合、NODE_ENVproductionに設定すると、cache: trueが自動的に設定されます。

これは、ファイルが変更されないことを前提としています。つまり、ファイルを変更した場合、EJSはサーバープロセスを再起動するまで古いキャッシュバージョンを使用します。

+0

ありがとうございます。 – Programmer

1

I 29のパーシャルのロード時間を含んでテストした:

<!DOCTYPE html> 
<html lang="en"> 

<? console.time('ejsIncludeTime') ?> 
<?include ../partials/head ?> 

<body> 

    <? include ../partials/header ?> 

     <? include ../partials/a ?> 
     <? include ../partials/b ?> 
     <? include ../partials/c ?> 
     <? include ../partials/d ?> 
     <? include ../partials/e ?> 
     <? include ../partials/f ?> 
     <? include ../partials/g ?> 
     <? include ../partials/h ?> 
     <? include ../partials/i ?> 
     <? include ../partials/j ?> 
     <? include ../partials/k ?> 
     <? include ../partials/l ?> 
     <? include ../partials/m ?> 
     <? include ../partials/n ?> 
     <? include ../partials/o ?> 
     <? include ../partials/p ?> 
     <? include ../partials/q ?> 
     <? include ../partials/r ?> 
     <? include ../partials/s ?> 
     <? include ../partials/t ?> 
     <? include ../partials/u ?> 
     <? include ../partials/v ?> 
     <? include ../partials/w ?> 
     <? include ../partials/x ?> 
     <? include ../partials/y ?> 
     <? include ../partials/z ?> 

    <? include ../partials/footer ?> 

    <? console.timeEnd('ejsIncludeTime') ?> 

</body> 

</html> 

-Zから各部分は、HTMLの120個の以上の行を含みます。ここではそれが行く方法は次のとおりです。

  • 最初のヒットは、サーバの再起動ejsIncludeTime: 0.175ms
  • 結果的にはejsIncludeTimeヒット後:再び0.078ms0.068ms0.058ms0.067ms0.077ms
  • サーバーを再起動するとejsIncludeTime: 0.157ms
  • 後件が0.168msにヒットを打ちます(数分後にヒット)、0.044ms,0.052ms

したがって、あるレベルではキャッシュが行われているようです。最初のヒットは常に0.150 + msのインクルード時間を要します。結果として得られるヒットは、0.168msのようなときどきのピークを除いてはるかに時間がかかります(実際になぜキャッシュミスが起こるか説明できません)。

関連する問題