2017-07-30 29 views
3

我目前正在編寫一個節點服務器,使用express和ejs作爲誘人的引擎。我的一些.ejs文件包含7-8個包含嵌套在其中的部分的聲明。我想知道這是否是資源密集型的,或者它會沒事的。包括陳述會妨礙表現嗎?

+0

簡介它。表演不是絕對的財產。 – zerkms

+1

包括很可能緩存(至少由OS,也許是EJS),所以你可能會看到一擊它們加載的第一次,但可能並不多,在所有之後。 – jfriend00

+0

我如何知道ejs是否緩存了包含? – Programmer

回答

2

EJS維護者在這裏。

首先,如果你正在閱讀相同的文件多次連續,文件系統將緩存它在這一水平。

但是,如果你想要最大的性能,在選項中設置cache: true。 (docs)您必須使用renderFile()或傳入文件名以使其起作用。如果您使用Express,則當NODE_ENV設置爲production時,將自動設置cache: true

請記住,這假定您的文件永遠不會改變。即如果您更改文件,EJS將只使用舊的緩存版本,直到您重新啓動服務器進程。

+0

謝謝。我感覺好多現在舒服多了。 – Programmer

1

我已經測試了包括用於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> 

每個部分從A-Z包含120或更多條線的HTML。這是怎麼一回事呢:

  • 服務器重啓ejsIncludeTime: 0.175ms
  • 因之後首先命中命中ejsIncludeTime0.078ms0.068ms0.058ms0.067ms0.077ms
  • 重新啓動服務器再次命中ejsIncludeTime: 0.157ms
  • 因之命中0.168ms (在幾分鐘的間隙後命中),0.044ms0.052ms

因此,似乎在某個層面上涉及緩存。第一次命中總是需要0.150 + ms的包含時間。隨之而來的命中總是要少得多的時間消耗,除了偶爾的高峯如0.168ms(不能真正解釋爲什麼,也許緩存未命中)。