Обслуживание JavaScript на основе User-Agent

Мне любопытно узнать о преимуществах и недостатках использования обнаружения агента пользователя на веб-сервере, чтобы определить, какая версия ресурса JavaScript будет отправлена ​​клиенту.

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

Какие проблемы могут возникнуть с этим вторым подходом и могут ли они перевесить преимущества меньших ответов для поддерживающих браузеров?

Ответ 1

Вы можете загружать "необязательные" вещи по требованию с помощью RequireJS (или аналогичного).

1) На странице load... test для функции с небольшими тестами (Modernizr)

2) Если тест преуспевает, используйте native, если не удается, используйте RequireJS для загрузки других ресурсов.

3) Прибыль.

Это предполагает, что вы не возражаете против дополнительных HTTP-запросов.... слишком многие из этих тестов, загрузки, повторения процессов могут замедлить работу, а не только один большой (r) файл, поэтому он зависит от случая, но там определенно разумная средняя точка...

Ответ 2

Как правило, это лучшее решение для отправки одной копии вашего javascript всем клиентам, а сам javascript выполняет функцию обнаружения объектов, чтобы решить, как лучше всего обращаться с каждым браузером. Это имеет следующие преимущества:

  • Обнаружение функции гораздо более точной и передовой, чем обнаружение браузера, даже с браузерами, которые вы даже никогда не видели.
  • Вы получаете одну копию своего javascript для всех браузеров, которые, как правило, намного проще тестировать и деактивировать и не требуют логики распространения на стороне сервера.
  • Разработка одного общего набора javascript, который адаптируется к условиям клиента, обычно намного проще, чем разработка N отдельных версий javascript сайта.

Ответ 3

Это ни в Pro, ни в Con, но с точки зрения SEO вы должны учитывать, что робот Googlebot всегда будет видеть "обходную" версию. (который я принимаю по умолчанию, когда не был распознан агент-пользователь)

Я говорю об этом, потому что я видел, как несколько сайтов занимались погружением при внедрении пользовательских правил JS на основе user-agent/cookie.

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

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

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

Ответ 4

Другая возможность (без дополнительного http-запроса) - использовать заголовок пользовательского агента для отправки разных версий контента. Взгляните на статью об атласе устройства на эту тему или посмотрите на статью об использовании этой техники в дикой природе.

Я вижу как плюсы

  • Любое количество контента, отправляемого клиенту (специально для мобильных устройств это приятно)
  • браузер будет использовать ресурсы любовника без кода, который ему не нужен

Минусы:

  • необходимо поддерживать различное количество версий JavaScript
  • пользовательский агент разбирает движущуюся цель