Paul Sowden of meebo talked about client-side storage options at the JS Meetup last night.
Great info! Here are my notes:

Client-side storage… more options than cookies
3 examples:

  • halfnote [Update: thanks Paul!]
  • gmail
  • sticky notes

… not too exciting, but we could do more exciting stuff if we can tackle the x-browser issues. Technology is different per browser, standard has variants.

  • Gears: sync’d db, SQL interface, search over the DB, unlimited storage (at least in the beta)
  • WHATWG, fr HTML5: Safari 3.1+, WebKit, at least two MB, bit more code,
  • FF2+ IE8, WHATWG Global Storage, when values change events are fired, in FF you get up to 5MB, in IE its XML, in FF its an SQLLite DB (allows potentially browser-desktop app) — pretty clean simple code
  • userData HTML Behaviors in IE 5.5+, up to 1MB per domain — simplest code
  • Flash Cookies, 100KB by default, but youcan ask the user for more (clunky little Flash interface), you’ll need to use SWF wrapper and Javascript bridge

On meebo, they checked out how many people had which available

  • 87% Flash (they checked for v8, but this has been available since Flash Player 6, so ymmv)
  • 74% have native storage
  • gears in the single digits

Note: 97% have one of those, 96% had cookies enabled!

Libraries available

  • Persist.js – normalize API, just key-value gears

Note: global storage has widest adoption, but global storage actually has been taken out of the specification!
[Update: slides from this talk have been posted on slideshare]

Jon Boutelle of spoke at the JS Meetup last night. He reported a refreshing perspective about the choice between Flash and Ajax on websites today: you quite possibly need both. He made the analogy to having a hammer and a saw — you need both to build a house. (By the way if you haven’t checked out slideshare is is way cool. See a collection of Jon’s presentations or mine). Notes below:

Keep Flash on a leash, only use it for what its really good at

  • you have to work extra to get SEO — slideshare puts the transcript of slides at the bottom of the page
  • Jon finds that load time on average is worse in Flash (He note: Javascript can be fat too. I find it depends what you are doing — raw script execution and http requests are much slower than the browser, but you can bundle up a bunch of code & graphics in a SWF and get better performance. Still I wouldn’t choose one or the other based on performance.)
  • advocates Flash nuggets — I love this term!
  • Full screen is nice — use it for good, not for evil
  • invisible Flash — you might not even know you are using Flash. Used in some Javascript libs
  • – graphics goodies: fonts, vectors, multimedia, recording audio/video, multimedia editing, widgets (don’t worry about layout, but SEO sucks)
  • – upload progress bars
  • – sockets! comet is cool, but server-side push — libraries w/ Ruby (443)
  • – local dataObjects “super cookies” — you can ask the user to save 1GB
  • – Flex: 125KB download for the framework

Javascript cheap tricks (not quite AJAX). Javascript 101 — you don’t even need to hit the server (although maybe you should if obscured stuff is seldom used)

  • tabs (conserve real-estate)
  • Accordians (aks Tab sliders) — like tabs only sideways
  • Microlinks – expando-tabs
  • One second mutation — animated transition: control the user’s attention, they see that the small thing becomes the big thing
  • Popups — use with discretion, since you occlude part of the screen

Javascript Cheap-ish Tricks

  • Malleable content (e.g. edit in place)
  • progress indicators
  • One second spotlight, famous yellow fade popularized from 37signals, tests well, makes people happy
  • Temp message: show message, fade away: don’t leave a permanent mark on the page (sometime doesn’t test well since people miss it)
    • Conclusion:
      What the world needs is Ajax/Flash cross-over artists. Flash doesn’t kill people, people kill people. Can’t we all get along?

      Q: — could that be done in Javascript?
      Answer from the audience: zooming would be hard in javascirpt