Обслуживание 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
- пользовательский агент разбирает движущуюся цель