一個巨大的對象,而不是從硬盤提供文件有沒有任何優勢我很好奇,如果有我的網站加載到一個巨大的全球對象(包含文件內容,文件名和等等..)在啓動。從Node.JS
- 是否有速度優勢(考慮如此龐大的對象)?
- 是否有字符串或對象的最大尺寸?
- 是否需要對文件進行編碼?
- 這將如何影響我的服務器RAM?
我知道所有文件都會被緩存,每當文件被編輯時我都需要重新加載部分對象。
一個巨大的對象,而不是從硬盤提供文件有沒有任何優勢我很好奇,如果有我的網站加載到一個巨大的全球對象(包含文件內容,文件名和等等..)在啓動。從Node.JS
我知道所有文件都會被緩存,每當文件被編輯時我都需要重新加載部分對象。
將所有靜態資產加載到某種內存中的對象,然後從節點提供它們將需要很多編程工作。我不知道任何爲此設計的web框架,而且你可能會糟糕地重新發明一堆輪子......所以不是;你這樣做絕對沒有優勢。
像apache這樣的Web服務器可以很好地處理緩存文件,如果設置的話。您可以使用一個作爲節點的代理。它們也比節點更快地訪問文件系統。使用代理實質上實現了您感興趣的大部分內存解決方案。
正確使用到期頭文件將確保客戶端不會不必要地請求不變的資產。您還可以使用內容交付網絡(如akamai)向距離用戶較近的服務器提供靜態資產。這兩種方法都意味着客戶端甚至不會觸及您的服務器,但CDN會花費您的成本。
與將它們發送到網絡或執行查詢數據庫等操作相比,提供文件並不是非常昂貴。
使用Web服務器來代理您的靜態內容。然後確保客戶端緩存策略設置正確。最後,考慮內容交付網絡。不要重新發明輪子!
-2分這個答案?這似乎相當苛刻。 –
完全苛刻。但討厭的人會討厭。 –
1)是的,有一個明顯的好處:從RAM讀取比從磁盤(http://norvig.com/21-days.html#answers)
2)你看從節點的文件系統中的文件,每次讀取速度更快,你得到一個緩衝對象。緩衝區對象存儲在JS堆的外部,因此不受總v8堆大小的限制。但是每個緩衝區的大小限制爲1Gb(這是變化的:https://twitter.com/trevnorris/status/603345087028793345)。顯而易見,總限制是您的流程(請參閱ulimit)和您的系統總數的限制。
3)這取決於你。如果您只是將文件作爲緩衝區讀取,則不需要指定編碼。這只是原始內存
其他的想法:
你應該知道,文件緩存已經在內核的頁面緩存的方式發生。每次從文件系統讀取文件時,都不一定會發生磁盤查找/讀取。
您應該將您的想法與從文件系統中讀取的基準進行比較,並查看獲得的收益。如果你節省了10ms,但用戶通過網絡檢索網頁仍然需要> 150ms,這可能是浪費時間。
大多數網絡服務器(和操作系統文件系統)在第一次使用時會簡單地緩存網頁,這通常綽綽有餘,並且更簡單並自動管理內存。如果您使用的是模板系統,則通常會緩存模板。緩存而不是明確地將它們加載到內存中的優點是可以根據系統中的其他內存需求自動管理內存使用,而不是強制使用特定的內存。 – jfriend00
它應該更快。你應該基準它! –