From the development of the second assignment, I've learnt at least four things.
Never completely trust the framework.
The framework we choose is sencha touch, which has plenty of nice features and it seems that almost everything can be done via the interfaces it provides. We naively trust it first but later tons of weird bugs pissed us off. It was quite painful to implement the same features as it provides just because it has bugs. And the process of finding where is broken was really time-consuming. Next time if we need to use a framework which is in its early version, we must prepare ourselves for alternative choices or DIY.
Caching issue.
In Chrome, most of the time caching is done before the web page is shown, whereas in Safari, it will display whatever it has cached first. Since we have a lot of files to cache, even when you are able to use the application, the caching is still not done. If you add it to the home screen and turn off the WiFi, it will become unusable. Therefore we finally added a caching indicator to let users know that the application is being cached and they should not go offline currently.
Reduce the amount of time loading the app.
Even we ourselves feel annoyed when the browser needs to spend 1min+ caching the applicatioin. For the users, they seldom want to wait for 1 min to make the application compleletly usable. Therefore we finally packed most of the js and css source files, cutting down the number of files from 78 to 18 to make the loading faster.
Compatibility
Even if HTML5 is supported by most of the modern browsers, there are many issues on compatibility. The framework we use is based on WebKit, which means that it is not usable in IE, Firefox and Opera. To be more specific, it targets to mobile devices running WebKit such as iOS and Android devices, which significantly reduces its range of usage. Moreover, layout issue is very nasty. Things may get messed up if I run the web app designed for iPad on an iPhone. Of course I can detect the device and choose the correct layout, but that is a large amount of work since I need to do two different layouts for tablets and phones. Finally, even I can run the mobile app in a desktop browser, the UI is hard to use because it is for touch devices but not for mouse-based PCs. Currently solving these kinds of problems is very time-consuming and in some cases not doable. I hope there will be some tools that can deal with it automatically.
Overall, I find this second assignment quite fun. And to be honest, the development time is much less than doing a native application with the same functionalities. :)