Reputation: 321
I am curious about the pros and cons of using user agent detection in a web server to determine which version of a JavaScript resource to send to the client.
In particular, if some web browsers support a feature natively while others require a verbose JavaScript workaround, is it better to serve the workaround to everyone and run it only if it's needed client-side, or to serve the workaround only to the browsers that require it and send a thin wrapper around native features to the rest?
What problems could arise with that second approach, and might they outweigh the benefit of smaller responses for the supporting browsers?
Upvotes: 10
Views: 1246
Reputation: 1827
Another possibility (without additional http request) is to use user agent header for sending different versions of content. Have a look at device atlas article on this topic or have a look at referenced article about usage of this technique in wild.
I see as pros:
Cons:
Upvotes: 0
Reputation: 1146
This in neither Pro or Con, but speaking from SEO point of view, you should consider that Googlebot will always see the "workaround" version. (which I`m assuming is the default one, when no User-Agent was recognized)
I`m saying that here because I saw several sites take a dive, when implementing user-agent/cookie based custom JS rules.
Going back to your original question, I would suggest using a single version approach - simply because its much more manageable and does not require you to keep track of several versions of the script.
@BLSully also raised an excellent point here (+1) about the extra HTTP requests this will cause. Chances are that your overall site speed will plummet or any gains will be greatly diminished.
There are many better things you could do for acceleration - if this is indeed your goal here...
Upvotes: 1
Reputation: 707456
Usually, it is a better solution to send one copy of your javascript to all clients and have the javascript itself do feature detection to decide how to best treat each browser. This has the following advantages:
Upvotes: 2
Reputation: 5929
You could load "optional" stuff on demand using RequireJS
(or similar).
1) On Page load... test for feature with small tests (Modernizr)
2) If test succeeds, use native, if fails, use RequireJS to load your other resources
3) Profit.
This does assume you don't mind extra http requests....too many of these test, load, repeat processes can slow things down more than just including one large(r) file, so it's case dependent, but there is definitely reasonable middle ground...
Upvotes: 3