Why the Facebook iOS app is so terrible

by Ed Sparks

Found this the other day, and thought it was interesting.  As Facebook's shares continue to tumble.
This does point to a larger issue thought, how Apple is increasingly becoming the Microsoft of old, and artificially limiting third party products to ensure they don't work as well as native.  

Hopefully Apple and Facebook make nice soon.

So what is wrong with the iOS app?

  1. App is slow 
  2. Inconsistent information notification icons say there are new messages or responses, actual window does not show anything new.
  3. App is slower than mobile web site while everybody is used to speedy apps, the Facebook mobile web site is faster than iOS app, and offers almost the same functionality.
  4. Tons of other bugs scrambled views, photo upload, text boxes disappear, no sharing.

What is the origin of these issues?

1. HTML and UIWebViews without Nitro JavaScript engine
I did some network sniffing (I like sniffing  ) and found out that the data that the iOS app downloads from facebook.com is a mixture of REST (XML format, no JSON) and HTML. The HTML is used for your personal timeline, and profile and groups timelines. See for yourself, go to https://m.facebook.com/home.php and see that it is the initial view of the iOS app. Also from the screenshot above, you can see something went wrong while downloading the html and images/stylesheets/JavaScript. To display HTML in an app, a developer uses a Safari component called UIWebView. Very convenient, but also dangerous. The HTML downloaded is pretty big (15kb), and contains links to images, stylesheets and JavaScript. For a starter, caching of unchanged content cannot be controlled by the developer. The FB app downloads the whole timeline HTML every time, and it is up to the UIWebView to determine whether it needs to download images, stylesheets etc. again. Second, performance of UIWebViews is less than in mobile Safari. This has a lot to do with the absence of the new Nitro JavaScript engine in UIWebViews, apparently for security reasons. I ran some tests on my iPhone 4 with iOS 5.1.1, theJavaScript benchmark Sunspider running in Mobile Safari was 3 x as fast as running in anative app with a UIWebView. Also, to communicate from the UIWebView to the native app, a JavaScript bridge is needed. This is tricky stuff, slow and not really thread safe.

Read more: 
http://blog.mobtest.com/2012/05/heres-why-the-facebook-ios-app-is-so-bad-uiwebviews-and-no-nitro/

No Nitro on iOS

Source: http://blog.mobtest.com/2012/05/heres-why-...