我已经阅读了一些关于angularjs html5Mode
的帖子,其中包括this one,我仍然感到困惑:
有什么好处?我可以看到我可以使用http://example.com/home
代替http://example.com/#/home
,但保存的两个字符不值得一提,是吗?
这与HTML5有什么关系?
答案链接到page showing how to configure a server。似乎这种重写的目的是使服务器返回始终是相同的页面,无论URL是什么样的。但它不会读到不必要的流量增加吗?
我开始在评论中做出反应,但它变得太长了。他冗长而有价值的答案引出了我的一些问题。
渲染实际" / home"
的选项
是的,但这意味着很多工作。
疯狂逃脱片段黑客
是的,但是这个hack很容易实现(我几个小时前做过)。在html5mode的情况下,我实际上不知道应该做些什么(因为我还没有读完this seo article。
这是一个演示
它既不适用于我的Chromium 25也不适用于我的Firefox 20.当然,它们都是古老的,但我需要的其他一切都适用于它们。
不,这是相反的。当用户首次单击时,服务器仅获取完整页面请求
但同样适用于hashbang。此外,关注http://example.com/#!/home
的外部链接,然后是指向http://example.com/#!/foreign
的其他链接的用户将始终通过相同的网址提供相同的网页,而在html5模式中,他们是&#39 ;将提供相同的页面(除非你提到的繁琐的优化完成)通过不同的URL (这意味着它必须再次加载)。
答案 0 :(得分:2)
但保存的两个字符不值得一提,是吗?
许多人认为没有哈希的URL更“漂亮”或“用户友好”。另外,一个非常大的区别是当你浏览到带有散列(“片段”)的URL时,浏览器不会在其对服务器的请求中包含片段,这意味着服务器可用的信息少得多。正确的内容立即。与没有任何片段的常规URL相比,完整路径“/ home”包含在对服务器的HTTP GET请求中,因此服务器可以选择直接呈现实际的“/ home”内容而不是发送通用“index.html”内容并等待浏览器上的javascript加载后更新它并看到片段是“#home”。
HTML5模式也更适合搜索引擎优化,没有任何疯狂的escaped fragment黑客攻击。我猜这可能是推动HTML5模式的最大因素。
这与HTML5有什么关系?
HTML5引入了必要的JavaScript API来更改浏览器的位置栏URL,而无需重新加载页面而不使用URL的片段部分。 Here's a demo
似乎这种重写的目的是使服务器返回始终是相同的页面,无论URL是什么样的。但它是不是会读到不必要的流量?
不,这是相反的。当用户首次单击链接到站点或手动浏览器重新加载时,服务器仅获取完整页面请求。否则,用户可以点击疯狂地浏览应用程序,在某些情况下,服务器将看到来自该应用程序的ZERO流量。更常见的是,每次点击都会向API发出至少一个AJAX请求以获取JSON数据,但总体而言,该方法用于减少浏览器的服务器流量。如果您看到应用立即响应点击并且网址正在发生变化,那么您需要HTML5来感谢,与传统应用相比,每次点击都包含一定的最小延迟,整页重新加载时闪烁,输入表单丢失焦点等。
它既不适用于我的Chromium 25也不适用于我的Firefox 20.当然,它们都是古老的,但我需要的其他一切都适用于它们。
一个好的实现将在可用时使用HTML5,否则回退到片段,但在任何浏览器中都可以正常工作。但无论如何,网络是一个移动的目标。有一次,一切都是整页加载。然后是AJAX和带有片段的单页应用程序。现在HTML5可以使用无碎片URL进行单页面应用。这些不是绝对不同的方法。
我的这种来回感觉就像你希望有人为你宣布其中一个在规范上比另一个更合适,而且就是这样。这取决于应用程序,用户,他们的设备等.Twitter长时间关注片段,然后他们意识到他们的移动用户看到了太多的延迟,“第一次推文的时间”太长了,所以他们去了回到服务器端呈现HTML,其中包含真实数据。
关于在服务器上呈现“大量工作”的另一点,这是真的,但有些人认为它是Web应用程序开发的“圣杯”。看看airbnb对他们做了什么 rendr框架。另见Derby JS。我的观点是,如果您决定要在浏览器和服务器中进行渲染,那么您选择一个提供该框架的框架。并不是说你现在有很多选择可供选择,但是我不建议你自己一起黑客攻击。