2015-04-01 182 views
0

我使用了Meteor和Iron-router,並設置了許多服務器路由來返回一些帶有Node.js響應對象的HTML。在流星和鐵路路由器中gzip和minify服務器路由響應

現在我想要minify並且還啓用gzip作爲迴應。 如何做到這一點?

這是我的路線代碼:

Router.route('/', function() { 
    var res = this.response; 
    var html = "<!DOCTYPE html>\n" + 
     "<html>\n" + 
     " <head>\n" + 
     " </head>\n" + 
     " <body>\n" + 
     "  test\n" + 
     " </body>\n" + 
     "</html>"; 
    res.end(html); 
}, { where: 'server' }); 

這是第結果:

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
     test 
    </body> 
</html> 

我想縮小的版本,象下面這樣:

<!DOCTYPE html><html><head></head><body>test</body></html> 

我在這個URL部署測試項目:

http://gzipminify.meteor.com/

而且您可以使用this tools測試gzip支持。

+1

你應該在你的Node應用程序前面使用nginx:https://www.yauh.de/do-i-really-need-nginx-with-my-meteornode-js-app/ – saimeunt 2015-04-01 11:03:34

回答

2

流星已經gzips和縮小(在生產模式)你的應用程序。

只是不引起混淆你的主應用程序文件根文件可在xxx.meteor.com不受此影響(包含HTML類似index.html中的一個)。

此外index.html LIKE文件是裸露的一個包含對您的js & css文件的引用。包含應用程序HTML的實際js文件實際上也是經過壓縮的。

其餘的靜態資產(CSS,JS,圖像等)都是gzipd。

在生產模式下,您的css & js也被縮小。

您在gzipminify.meteor.com的網站沒有靜態資產,也沒有CSS。

在另一方面

是Web頁面壓縮:爲http://test.meteor.com/5166d4fcc07e1605cbe979ef217942271d8badac.js

是被壓縮的網頁:否(http://test.meteor.com

對於鐵路由器定製的服務器端渲染路徑您可以通過包含中間件Router.onBeforeAction而不是app.use與您選擇的壓縮中間件(nodejs)進行gzip文件壓縮。

+0

謝謝你的注意,我從你的答案中學到了很多關於流星中gzip條件的事情,但是縮小呢?當我使用響應對象而不是普通的流星功能時,如何縮小我的html結果? – b24 2015-04-02 08:21:18

+0

@ b24 html是一個靜態資源。流星在構建過程中對這些進行了縮小。它可能不值得將它們「按需」縮小,因爲這會浪費您的服務器資源。在投入生產之前,在源代碼中將'var html'中的字符串縮小。這樣就不必在每個請求中都縮小。 – Akshat 2015-04-02 08:29:15

+0

是的,它是正確的,但上面的代碼只是一個例子。我的'var html'內容是動態的,我無法在生產之前將其縮小。我需要一個自動解決方案來縮小我的反應,因爲流星不會縮小這個。 – b24 2015-04-02 08:44:49