2016-09-27 58 views
6

我建立使用aspnetcore水療反應,Redux的樣板(可在http://blog.stevensanderson.com/2016/05/02/angular2-react-knockout-apps-on-aspnet-core/可以看出)如何禁用asp.netcore-spa應用程序上的服務器端呈現?

但是在服務器端渲染需要大量的時間(約30秒),我想將其禁用我的應用程序。你能告訴我如何禁用服務器端渲染而不破壞代碼嗎?

+1

您確定服務器端渲染處於活動狀態?在Firefox中點擊F12,進入網絡標籤,查看下載的文件。聽起來更像是服務器端渲染沒有啓用,你的角度應用下載每一個文件(而不是捆綁),這導致發送到服務器的400-800個請求,這需要大約30-60秒。當啓用調試器時,從ASP.NET Core獲取文件的速度也很慢,所以需要更長的時間。也許在這裏發佈你的'System.config.js'文件 – Tseng

+0

感謝@Tseng,我在Release模式下運行我的應用程序,實現只有第一個請求花了很長時間,因爲webpack在約16秒內生成了捆綁包。之後,它運行得很快。 – Hasan

回答

17

該模板將asp-prerender-module標籤助手添加到Home\Index.cshtml中的<div id="react-app"...>標籤。如果你刪除標籤助手,你將禁用服務器端渲染。

標記輔助導入在/Views/_ViewImports.cshtml

@addTagHelper "*, Microsoft.AspNetCore.SpaServices"

您運行的應用程序之前,你可以做的命令行捆綁...

> webpack --config webpack.config.vendor.js 
> webpack 

在悉尼國家會議中心,史蒂夫桑德森給了presentation

aspnet-prerender-module標記助手是SpaServices的一部分,它是Yeoman aspnetcore-spa模板生成的所有項目的基礎。因此,您可以在任何模板中啓用/禁用預渲染,其中包括Angular 2AureliaKnockoutReact (with Redux)。這同樣適用於您使用Nodeaspnet-prerendering和上述標籤助手創建的任何自定義項目或模板。

+0

我已經關注了Steve Sanderson的博客,併爲數據表添加了primeng,但只有在我的index.cshtml文件中從元素中刪除了「aspnet-prerender-module」屬性時,數據表模塊才起作用。可以保持兩者嗎?我想保留這個預渲染模塊和任何第三方node_module。當我嘗試安裝kendo數據tablea節點模塊時也是如此。有沒有兼容性問題,或者我做錯了什麼?我們有任何解決辦法嗎? –

+0

@sohaibjaved你的情況可能值得自己的問題。我有一些解決方法,但我不認爲他們會適用於特定的libarary。有些庫現在不兼容同構渲染。我遇到了幾種不同的情況,其中服務器預渲染看起來不太可能,但已設法找到涉及以下一種或多種組合的解決方法: –

+0

@sohaibjaved 1.'angular2-universal''的import {isBrowser}(應該可能現在來自核心),並有條件地允許/推遲某些功能,直到您知道您處於客戶端環境中。 2.如果您需要爲副作用加載npm包(不適用於您的情況),您可以在'boot-client.ts'中執行此操作。 3。聲明一個對象來保存你想要使用的符號。然後,不是使用'import',而是有條件地使用'require'來覆蓋之前聲明的內容。不幸的是,我不認爲其中的任何一種都適用於您的特定情況。 –

7

對於Angular 2項目,我通過從Index.schtml中的<app>標記中刪除asp-prerender-module屬性來解決此問題。

相關問題