我有一个具有Javascript前端的AngularJS WebAPI应用程序。前端调用后端WebAPI以获取数据。在未来,可能会有不止一个前端向后端发出呼叫。
我想将此应用程序更改为使用HTTP,并且正在研究如何最好地构建它。我看到它的方式有两种方式(可能更多)。
(1)在一个(或多个)Web角色上托管WebAPI C#应用程序,index.html,Javascript,Javascript库和其他HTML。
(2)在CDN上托管index.html,Javascript,Javascript库和其他HTML,并将WebAPI C#应用程序放在一个(或多个)Web角色的一个位置。
从性能的角度来看,当我使用SSL时,拆分解决方案(2)可能会出现任何问题。有什么我应该考虑的可能有助于改善启动时间(我的目标是尽可能快地实现)。
我还有一个问题。如果我使用Azure CDN,那么我仍然可以将我的网站索引作为www.mywebsite.com来解决,如果使用HTTPS,我需要SSL证书吗?
答案 0 :(得分:2)
选项2更为可取。
您必须认为,您的应用程序位于后端。前端只是一组建议的UI控件和交互,以使用您拥有的应用程序。然后,如果您可以单独托管它们,那么从一开始就不会创建UI依赖项。
这种方法就像创建thin client。
由于应用程序是基于AngularJS的,因此可能所有UI都是包含HTML,CSS和Javascript的静态文件。您可以host them in BLOB storage,并通过CDN进行扩展。您可以指向Azure Blob存储的custom domain name,例如www.yourdomain.com。它有许多好处,包括比Web角色更好的价格和扩展。撇开,无论你是否获得点击,你都要为网络角色付费。唯一的缺点是,据我所知,不可能使用HTTPS,但这应该不是问题,因为你只是托管包含占位符的静态内容和模板,没有实际数据。
在Blob存储上,您可以attach your own cache control headers,允许浏览器在本地缓存这些文件。然后,用户将下载这些文件一次,并在下次从浏览器缓存中恢复。此外,您可以将已压缩的内容存储在GZIP中,然后set the content encoding property to let the browser know it is compressed,从而实现更快的内容下载。不要忘记你应该捆绑你的资源。例如,您应该将所有JS代码捆绑在一个JS文件中,将所有CSS代码捆绑在一个CSS文件中,并将所有AngularJS视图捆绑在template.js
文件中(也捆绑到唯一的JS文件中)。
您需要在工作人员/ Web角色实例中托管后端应用程序。在这里你可以使用HTTPS,在HTTPS上使用AJAX也没有问题,尽管只要SSL / TLS证书由浏览器识别的CA签署(即:有效证书),页面就会加载到HTTP上。如果您使用自签名证书,浏览器将无法提示用户接受它。如果您计划从自签名开始,请记住这一点。
那么你将拥有所有非用户/状态依赖于blob存储的东西,这是便宜,快速和高度可扩展的;并且所有用户数据交互都可以通过您的工作人员/ Web角色通过紧凑型数据请求/响应(可能是JSON)进行。因此,您需要较少的Web /辅助角色来提供相同级别的服务。
现在,如果您有非常不对称的大量查询和数据更改请求,您应该考虑像CQRS这样的方法。