2014-09-08 8 views
4

Я боюсь, что я уже знаю ответ, но я мог бы также рискнуть: кто-нибудь знает, есть ли способ проверить, является ли клиент, который обращается к веб-сайту, тонкий клиент (настольный терминал) или нет? Проблема здесь в том, что тонкий клиент начинает сильно страдать, если вы даже рассматриваете использование JavaScript (анимация).howto: проверить, является ли клиент «настольным терминалом»

Я в основном хочу служить «легкой» версией веб-сайта, где я отключу все спецэффекты в зависимости от клиента. Я посмотрел на пользовательский агент, но это, похоже, не дает ничего полезного.

Есть ли способ рассказать?

+0

Настоящая настоящая проблема здесь; У меня есть анимация JavaScript на сайте, и ее полностью отключить нельзя. – Reborn

+0

Вы правы, и я сделал именно это. Все еще надеемся на положительный ответ :) – Reborn

+0

Вы можете определить, есть ли у них javascript, например. –

ответ

2

Существует нет действительно чистого способа решить эту проблему, потому что нет такой вещи, как HTTP-заголовок для тонких клиентов или удаленных рабочих столов.

Но если вам действительно нужно решение для определения медленных клиентов, вы можете попробовать следующее. Это похоже на то, что Google использует на Картах, чтобы определить, может ли клиент обрабатывать Карты.

В этом подходе вы предоставили бы HTML-страницу с фрагментом встроенного JavaScript. Этот кусок выполняет тяжелую операцию с ресурсами, которая должна быть аналогична действию вашего реального кода.

Вы измеряете время, затраченное на эту операцию, и решаете, хорошо ли оно работает.

Теперь вы загружаете фактический JavaScript либо путем создания тега сценария с помощью document.write и передачи параметра, который сообщает сценарию, в каком режиме запускаться, или инициализируя уже загруженный код соответствующим параметром.

quick'n'dirty пример реализации будет выглядеть следующим образом (с помощью 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> 

Деликатная часть заключается в определении того, что является «быстрым», потому что могут быть разные причины, по которым временной код работает медленно. У вас может быть слишком много ложных негативов или ложных срабатываний.

EDIT: Обновленный пример JS, предложенный @fero. Благодаря!

+2

Я думаю, что было бы лучше использовать инвертированный подход и создать элементы 'div', скажем, 100 мс, а затем подсчитать, сколько' div 'создается браузером.В противном случае вы можете завершить тест производительности, который длится слишком долго - имейте в виду, что выполнение длительной тестовой операции на более медленном клиенте также увеличивает время загрузки страницы, которое может быть уже более продолжительным, чем обычно, только потому, что оно является более медленным клиентом. – fero

+0

Это хороший момент, но реализовать его гораздо сложнее. Вам нужно будет создать фоновый цикл и убить его через определенное время, что довольно сложно сделать с JS. (Вы также можете использовать Performance API, но только на нескольких браузерах.) Или я что-то упускаю? – lxg

+2

Да, я думаю, что тебе что-то не хватает. :-) Вы могли бы просто сделать это, как 'var start = new Date(), counter = 0; while (новая дата() - начало <100) {createStuff(); counter ++} ', а затем посмотрите на' counter' для измерения производительности. – fero

-3

нет прямого способа найти, если страница открыта в настольном терминале, но есть сложный способ. Вы всегда можете найти, какие пользователи мобильных устройств просматривают, вы можете сделать это как в javascript, так и в php, используя это if любой из мобильного устройства не обнаружено, то и можно предположить, что это рабочий стол, я отправил пример кода в 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 
} 

Надеюсь, это поможет вам всем, кто хочет определить, открывается ли пользователь на странице рабочего стола

+0

Извините, это совсем не помогает. Речь идет не о обнаружении настольных/мобильных устройств. –

+0

@SalmanA Я использую то же самое, чтобы найти рабочий стол порта или мобильного телефона. Это работало для меня как шарм. Как это совсем не помогает – Khaleel

+0

Пожалуйста, прочитайте вопрос еще раз. OP хочет знать, запущен ли браузер на веб-сайте, например, сеанс удаленного рабочего стола или Teamviewer. –