单击时,如果服务器速度慢,则重定向到另一个 URL?
Posted
技术标签:
【中文标题】单击时,如果服务器速度慢,则重定向到另一个 URL?【英文标题】:On click, redirecting to another URL if server slow? 【发布时间】:2011-02-19 09:56:48 【问题描述】:如果第一个 URL 响应缓慢(当他单击链接时),是否可以(在 javascript、ajax 或其他例如客户端站点上)将用户重定向到另一个 URL?
A href=URL1 但如果 1 秒后 server1 没有响应,则重定向到 URL2(另一台服务器)
我在考虑类似 onclick 事件: 重定向到 URL1,计时器,重定向到 URL2 但如果服务器 1 没有响应,则不会执行之后的代码...
或者然后使用 AJAX,但我不知道如何
案例;单击页面(a href=urltracking),urltracking 重定向到 URL2,但 urltracking 服务器可能很慢...
【问题讨论】:
负载均衡应该在网络层面做? 我无法控制服务器,只能在网站上(html) 【参考方案1】:恐怕这种方式是不可能的。如果目标 URL 位于您的域中,您可以使用虚拟 AJAX 调用通过“超时检查”来测量响应时间。类似于“发送测试 GET,如果服务器在 XX 秒内没有响应,则将 URL 重写到备份站点”。但不适合一般用途。
【讨论】:
感谢您的回答,我很害怕,但很高兴知道【参考方案2】:这两个网站都是您自己的吗?也许你应该买一个负载均衡器。这本质上是一个服务器,它监控两个网络服务器的性能并将请求重定向到最不忙的一个。
【讨论】:
这些网站都不是我自己的。一种是用于跟踪点击(跟踪公司);另一个是客户 --> 如果跟踪公司实验缓慢,他不想阻止他的用户 这种情况下最好使用AJAX。您可以同时发送这两个请求。 谢谢,你会怎么做?是否会考虑跟踪 URL? 通常跟踪网址只是一个带有特定代码的网址,不会返回任何有用的数据。该请求只是为记录而完成的,并且 url 中的代码用于识别。您可以使用 jQuery.Ajax 或 jQuery.Get 速记函数来检索该 url。 另一种更底层的方法是创建一个引用 url 的 1x1 隐藏图像。该图像将无效,但这没问题,因为它是隐藏的。至少在页面加载时会触发请求。通常一个浏览器会打开至少 4 个连接来同时下载图像,所以你的“跟踪像素”可以在你触发另一个请求的同时被加载。 Ajax 相对于像素的优势在于,Ajax 可以在页面加载后随时触发,而像素在 DOM 就绪后直接加载。【参考方案3】:我总是尽量避免出现第三方网站会降低我自己网站速度的情况。
也许您可以改为以某种异步形式进行调用?在 DOM 就绪事件中触发一段 javascript 来调用跟踪服务器,例如(在 jQuery 中):
$(function()
var tracker = new Image();
tracker.src = "http://tracker.com/path/to/tracker
);
其他可以工作的方法只是一个普通的旧标签,或者一个等。关键是它在你的页面之后加载,而不是在它之前。跟踪服务器永远不会知道其中的区别。
【讨论】:
感谢您,肯定会这样做以跟踪页面浏览量。这里不知道是否可以(使用异步调用);点击跟踪器(即 href="tracker.com/path/to/tracker" 重定向到最终到达网址) 这就是我的假设,它在技术上应该仍然可以工作。如果您只是直接链接到目标 URL,然后按照我的描述关闭跟踪器,它应该具有相同的净效果。我想如果您无法控制它们如何链接到您,这将无法正常工作。 当然需要注意的是,它会导致您的页面出现第二次页面查看,因为 IMG 或 IFRAME 也会跟随重定向。但如果这是您唯一的选择并且您的首要任务是性能,那么这可能是值得的。 我不太明白;您的选择是在目标页面上触发跟踪器?问题是跟踪器必须计算从第 1 页到第 2 页的点击次数(即使我不在第 1 页,我也可以转到第 2 页)。或者,如果我在点击后立即触发跟踪代码,它将不起作用;随着页面的变化,跟踪器将没有时间被触发【参考方案4】:花更多的钱购买更好的服务器,在极端情况下使用负载平衡器。你永远不需要做这样的客户端。
【讨论】:
当然可以,但是在客户端可以吗? 如果必须,我将启动一个超时函数,该函数将首先在正文标记中使用内联脚本进行重定向。然后我会在 DOM 准备好时清除超时。但这也会重定向连接速度较慢的人。如果可以的话,再做一次服务器端。 我的问题写得不正确(我编辑了它)。我想点击一下;用户点击 urltracking,如果 urltracking 服务器很慢,我不想阻止他...【参考方案5】:你可以使用javascript的setTimeout函数。
setTimeout("function()",1000);
在函数中你需要编写重定向代码。
另请参阅this question 以获取完整参考。
如果我错了,请纠正我。
【讨论】:
感谢您的回答。我考虑过这个功能,但有两个问题;似乎 Internet Explorer 对 setTimeOut 的定义不同,即使在 Firefox 中也不起作用。第一行:gotoURL1,第二行 setTimeOut --> 第二行不会被执行(因为浏览器会等待第一行执行) 我认为您的意思是使用setTimeout
而不是setTimeOut
。
不错的建议。但是,您也有编辑权限!以上是关于单击时,如果服务器速度慢,则重定向到另一个 URL?的主要内容,如果未能解决你的问题,请参考以下文章
如果用户点击停留在页面上,则重定向的 Javascript 警报
如果 url 包含使用 htaccess 的特定字符串,则重定向
如果 URL 在播放框架中无效,则重定向到错误页面。 1.25?