Max, do we still plan to detect javascript support for mobile devices, or do you want to fold that into "isWAP" ?
Non-js-supporting devices need very different handling, as all HTML has to be pre-built for them on the server.
On Fri, Mar 29, 2013 at 2:45 AM, Max Semenik maxsem.wiki@gmail.com wrote:
Hi, we at the mobile team are currently working on improving our current hit rate, publishing the half-implemented plan here for review:
== Current status ==
- X-Device header is generated by frontend Varnish from user-agent.
- There are currently 21 possible X-Device values, which we decreased to 20
this week.
- X-Device is used for HTML variance (roughly, Vary: X-Device).
- Depending on X-Device, we alter skin HTML, serve it full or limited
resources.
- Because some phones need CSS tweaks and don't support media queries, we
have to serve them device-specific CSS.
- Device-specific CSS is served via separate ResourceLoader modules e.g.
mobile.device.android.
== What's bad about it? == Cache fragmentation is very high, resulting in ~55% hit rate.
== Proposed strategy ==
- We don't vary pages on X-Device anymore.
- Because we still need to give really ancient WAP phones WML output, we
create a new header, X-WAP, with just two values, yes or not[1]
- And we vary our output on X-WAP instead of X-Device[2]
- Because we still need to serve device-specific CSS but can't use device
name in page HTML, we create a single ResourceLoader module, mobile.device.detect, which outputs styles depending on X-Device.[2] This does not affect bits cache fragmentation because it simply changes the way the same data is varied, but not adds the new fragmentation factors. Bits hit rate currently is very high, by the way.
- And because we need X-Device, we will need to direct mobile load.php
requests to the mobile site itself instead of bits. Not a problem because mobile domains are served by Varnish just like bits.
- Since now we will be serving ResourceLoader to all devices, we will
blacklist all the incompatible devices in the startup module to prevent them from choking on the loads of JS they can't handle (and even if they degrade gracefully, still no need to force them to download tens of kilobytes needlessly)[3]
== Commits == [1] https://gerrit.wikimedia.org/r/#/c/32866/ - adds X-WAP to Varnish [2] https://gerrit.wikimedia.org/r/55226 - main MobileFrontend change [3] https://gerrit.wikimedia.org/r/#/c/55446/ - ResourceLoader change, just a sketch of a real solution as of the moment I'm writing this
Your comments are highly appreciated! :)
-- Best regards, Max Semenik ([[User:MaxSem]]) _______________________________________________ Wikitech-l mailing list Wikitech-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/wikitech-l