为什么Google搜索会使用客户端网址参数?

Kai*_*ver 4 parameters url hash

昨天早上我注意到谷歌搜索正在使用哈希参数:

这似乎与更常见的搜索相同(搜索?q =客户端+ URL +参数).(在使用他们的表单进行搜索时,似乎他们不再默认使用它.)

他们为什么要那样做?

更一般地说,我看到很多网站都出现了哈希参数.这是好事吗?这是一个黑客?它是否与REST原则背道而驰?我想知道我是否应该在Web应用程序中使用此技术,以及何时使用.

有一个由不同的使用情况W3C的讨论,但我没有看到哪一个将适用于上面的例子.他们似乎也对未来的建议犹豫不决.

Bli*_*ixt 5

Google有许多实时实验功能,可根据您的偏好,位置和其他因素打开/关闭(也可能是随机选择.)我很确定您提到的那个也是其中之一.

当使用散列而不是查询字符串参数时,后台发生的是它使用JavaScript 查询"真实"URL(http://www.google.com/search?q=hello),然后修改现有的包含内容的页面.这将对用户显得更加敏感,因为页面不必完全重新加载.哈希的原因是维护浏览器历史和状态.如果你去http://www.google.com/#q=hello你会发现,你实际上得到的搜索结果为"你好"(即使你的浏览器是真的只要求http://www.google. com /)关闭JavaScript后,它将无法正常工作,您只需获取Google首页.

随着动态网站成为常态,哈希越来越多.哈希值完全在客户端上维护,因此在更改时不会产生服务器请求.这使它们成为维护Web应用程序不同状态的唯一地址的绝佳选择,同时仍然在完全相同的页面上.

我最近越来越多地使用它们,你可以在这里找到一个例子:http://blixt.org/js - 如果你看一下那个页面上的"Hash"库,你会看到我的跨浏览器实现支持哈希.


这里有一个使用哈希来存储状态的指南:

怎么样?

在哈希中维护状态意味着您的应用程序(我将其称为应用程序,因为您通常仅在更高级的Web解决方案中使用哈希值)依赖于JavaScript.没有JavaScript,哈希的唯一功能就是告诉浏览器在页面的某个地方查找内容.

一旦实现了一些JavaScript来检测哈希的更改,下一步就是将哈希解析为有意义的数据(就像查询字符串参数一样).

为什么?

一旦你在哈希中获得了状态,你的代码(或你的用户)就可以修改它来表示应用程序中的当前状态.你想要这么做的原因有很多.

一个常见的情况是,当页面的一小部分基于变量而发生变化时,重新加载整个页面以反映该更改将是低效的(例如:您有一个带有选项卡的框.可以识别活动选项卡在哈希.)

其他情况是您在JavaScript中动态加载内容,并且您想要告诉客户端要加载哪些内容(例如:http://beta.multifarce.com/#?state = 7001,将带您到特定点文字冒险.)

什么时候?

如果您查看我的"JavaScript领域",您将看到边界线过度杀伤案例.我这样做只是因为我想尽可能多地将JavaScript动态加入到该页面中.在正常项目中,我会对何时这样做保守,只有当你看到以下一个或多个方面的积极变化时才会这样做:

  • 用户互动
    • 通常用户不会看到太多差异,但URL可能会令人困惑
    • 记得加载指标!如果需要时间,动态加载内容可能会令用户感到沮丧.
  • 响应能力(从一个州到另一个州的时间)
  • 性能(带宽,服务器CPU)

没有JavaScript?

这是一个很大的威慑力量.虽然您可以安全地依赖99%的用户使浏览器能够使用具有状态哈希值的页面,但仍有许多情况下您根本无法依赖此状态.例如,搜索引擎抓取工具.虽然Google一直在努力让他们的抓取工具使用最新的网络技术(你知道他们将Flash应用程序编入索引吗?),但它仍然不是一个人,也无法理解某些东西.

基本上,您处于兼容性和用户体验之间的十字路口.

但是你总能在中间建立一条道路,这当然需要更多的工作.用更少的隐喻术语:实现两个解决方案,以便为输出相关内容的每个客户端URL都有一个服务器端URL.对于兼容的客户端,它会将它们重定向到哈希URL.通过这种方式,Google可以为"硬"URL编制索引,当用户点击它们时,它们就会获得动态状态!