我正在写一个基本上是一系列连续页面的网站。非限定URL指向最后一页,限定URL指向特定页面。所以我们有:
我有以下要求:
- 我希望AJAX动态加载页面。用户可以在短时间内顺序浏览大量连续页面,我希望避免重新加载和重绘(并添加某些JavaScript预取相邻页面以加快导航速度)。
- 我希望这些网页可以加入书签
- 我希望网页可以抓取
- 我希望它适用于大多数用户。
所以,我想出了以下方案:
这里的一切看起来都不错,但接下来,让我们看看所有可能的情况:
1。没有JavaScript浏览器
1.1。没有JavaScript浏览器访问根URL
按预期工作。
1.2。没有JavaScript浏览器访问规范网址
按预期工作。
1.3。没有JavaScript浏览器访问shebang URL
(http://example.com/#!3)
默默地失败了!用户获取最后一页而不是第3页。
2。履带
2.1。抓取工具访问根网址
按预期工作。
2.2。抓取工具访问规范网址
按预期工作。
2.3。爬虫访问shebang URL
http://example.com/#!3
抓取工具实际请求http://example.com/?_escaped_fragment_=3,并向该规范网址发出重定向。这是对Web服务器的一个额外请求,但这没什么大不了的(没有从数据库中获取额外的页面并返回给用户)。
3。旧浏览器
3.1。旧浏览器访问根URL
其他页面的链接被其shebang版本取代。然后由AJAX顺利完成导航。
3.2。旧浏览器访问规范URL
向用户发送重定向到shebang URL。问题:服务器实际上将获取并提供3次页面服务!
- http://example.com/3< - 完全由服务器提供
- JavaScript会将重定向发送到http://example.com/#!3
- 服务器只能看到http://example.com/,并提供最后一页
- JSON用于获取(再次)第3页并替换页面上的内容。
醇>
3.3。旧浏览器访问shebang URL
不需要重定向,但最后一页有额外的负载!
- 用户转到http://example.com/#!3
- 服务器只能看到http://example.com/,并提供最后一页
- JSON用于获取第3页并替换页面上的内容。
醇>
4。现代浏览器
4.1。现代浏览器访问根URL
4.2。现代浏览器访问规范URL
这2例没问题。导航由AJAX完成,规范URL被推送到历史记录。
4.3。现代浏览器访问shebang URL
将URL修改为规范URL。内容由AJAX加载。像以前一样,问题是导致从服务器到最后一页的额外负载。
所以,总结一下:
- 此解决方案基本上可以正常工作
- 但是当使用shebang URL时,在大多数情况下会导致最后一页的不必要的负载,因为服务器永远不会知道它是否需要服务于最后一页,或者是否这实际上是shebang请求的一部分。
我的问题是:有人对如何避免这些额外的页面加载有一个好主意吗?有什么好的做法可以解决这个问题吗?