我害怕我已经知道答案了,但我还是想冒险问一下:是否有任何方法可以测试访问网站的客户端是否为瘦客户机(桌面终端)?问题在于,如果您甚至考虑使用JavaScript(动画),瘦客户机就会开始严重滞后。
基本上,我想提供“轻量级”网站版本,根据客户端禁用所有特殊效果。我已查看用户代理,但似乎没有提供任何有用信息。有办法识别吗?
基本上,我想提供“轻量级”网站版本,根据客户端禁用所有特殊效果。我已查看用户代理,但似乎没有提供任何有用信息。有办法识别吗?
由于细客户端或远程桌面没有HTTP头,因此没有真正干净的解决方法。
但是如果您确实需要解决慢客户端的问题,可以尝试以下方法。这类似于Google在Maps上使用的方法,以确定客户端是否能处理Maps。
在这种方法中,您将使用一块嵌入的JavaScript代码来提供HTML页面。这个代码块执行一个资源密集型操作,应该类似于你的实际代码所做的操作。
您测量此操作消耗的时间,并决定它是否表现良好。
现在,您加载实际的JavaScript,可以通过创建带有document.write
的脚本标签并传递参数来告诉脚本运行模式,或者通过使用适当的参数初始化已经加载的代码。
快速且简单的示例实现如下(使用jQuery,但也可以用纯JS实现):
<script type="text/javascript">
var
$elem,
now = new Date(),
isFast,
counter = 0;
while (new Date() - now < 100)
{
$elem = $('<div style="display: none">');
$('body').append($elem);
$elem.remove();
++counter;
}
alert(counter);
isFast = (counter > 100);
// now, either embed the actual script ...
document.write('<scr'+'ipt type="text/javascript" src="http://www.example.com/js/test.js?fast=' + isFast + '"></scr'+'ipt>');
// ... or initialize the already loaded code
var myControllerInstance = new MyController(isFast);
myControllerInstance.makeStuffHappen();
</script>
关键的部分是定义“快”的含义,因为计时代码运行缓慢可能有不同的原因。你可能会出现太多的假阴性或假阳性。
编辑:更新了JS示例,如@fero所建议的。谢谢!
div
元素,例如100毫秒,然后计算浏览器创建了多少个div
可能会更好。否则,您可能会得到一个持续时间过长的性能测试 - 请记住,在较慢的客户端上执行耗时的测试操作也会增加页面加载时间,这可能已经比通常情况下更长。 - ferovar start = new Date(), counter = 0; while (new Date() - start < 100) { createStuff(); counter++ }
然后查看 counter
来衡量性能。 - ferosetTimeout
搞晕了。;) 非常感谢你! - lxg没有直接的方法可以找到页面是否在桌面终端中打开,但有一个巧妙的方法...你总是可以找到用户使用的移动设备,你可以用JavaScript和PHP来实现。如果没有检测到任何移动设备,那么就可以假设它是桌面端。我已经在PHP和JS中发布了示例代码。
PHP:
function is_mobile() {
if (preg_match("/Mobile|Android|BlackBerry|iPhone|Windows Phone/", $_SERVER['HTTP_USER_AGENT'])) {
return true;
}
}
if(is_Mobile){
// Mobile!
} else {
// Not mobile
}
JS:
var isMobile = {
Android: function() {
return navigator.userAgent.match(/Android/i);
},
BlackBerry: function() {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS: function() {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
},
Opera: function() {
return navigator.userAgent.match(/Opera Mini/i);
},
Windows: function() {
return navigator.userAgent.match(/IEMobile/i);
},
any: function() {
return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
}
};
if(isMobile.any()){
// Mobile!
} else {
// Not mobile
}