Apache可能會比node.js更高效。 Apache特別會有更多的開銷。通常我使用nginx來做這種事情。在你的情況下,由於你的資產是靜態的,它還可以將所有資產上傳到CDN。
從nodejs提供的靜態文件的一個問題是它不處理像緩存,緩存控制,url_rewriting和DoS攻擊提供的安全性。我真的推薦在生產中使用nginx來提供靜態資產,或者CDN,可能是2的組合。您不希望從您的API提供資產,它有一個明確的分隔線以便您可以擴展每個人單獨,因爲它的可能你的API將需要更快地擴展。
像Nginx這樣的東西肯定會在負載下表現更好。使用快遞的唯一好處是更容易設置。但是,您只需設置一次nginx,然後只需部署到配置的Web根目錄即可。 Apache可能也會更好地處理負載,但並不像輕量級,因爲它依賴於舊式的分叉處理方法來處理併發,其中Nginx非常像node.js異步。
最佳實踐是絕對靜態服務文件有一些像nginx,CDN或其他網絡服務器這樣的文件。在我看來,從node.js提供文件通常用於小型,低流量的網站。你可以完全按照你的描述。你可以在不同的端口上使用你的API。最常見的是你的「http://mywebsite.com/」你的UI和子域「http://api.mywebsite.com/」上的你的API。但是,如果您使用不同的端口運行同一臺計算機,則可能比嘗試將兩個域配置到同一個框更容易。在製作過程中,我一定會保留在端口80上,併爲api提供一個子域。
至於veggiesaurus的回答,我不同意。您通常會運行grunt/gulp/similar來縮小和構建您的資產。您可以簡單地將您的資產構建到特定的webroot。然後,您可以在配置文件或環境變量中指定此Web根目錄。我個人更喜歡在服務器上構建我的應用程序,因此我可以相應地將我的項目構建到其環境中。構建腳本還可以作爲應用程序的啓動程序,或者爲系統創建初始化腳本,以便確保應用程序繼續運行並在程序崩潰時重新啓動。把項目構建包含在你的倉庫中是很麻煩的,如果你的構建到你的項目目錄之外的路徑,那麼你不必擔心git忽略了你的構建。如果你想在那個目錄下構建,你可以簡單地在那裏配置你的web根目錄,但是我個人更喜歡不這樣做。
你要求最佳實踐。我有一個網站,它有一個NodeJS + Express後端和AngularJS + Angular-UI/UI-Router前端。我所有的視圖都是從Jade模板呈現並以HTML格式輸出。您可以在公用文件夾中創建'模板'文件夾,然後以.html格式存儲。這是你想要做的嗎?這些可以從youwebsite.com/templates/template.html訪問,或者像我一樣,可以從Jade文件生成模板,該文件通過控制器進行訪問驗證以及任何其他可能需要做的清理。 –
如果將它們存儲在公用文件夾中,則不必爲每個文件編寫不同的路由。 –