Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SBJson 4: Don't make me wait!

SBJson 4: Don't make me wait!

How SBJson 4 can help you get happy users.

Stig Brautaset

March 05, 2014
Tweet

More Decks by Stig Brautaset

Other Decks in Programming

Transcript

  1. Fun facts 7 years on • 1012 commits • 4

    major releases • 30 contributors • 3247 “stars” • 688 “forks”
  2. What’s more important to your users? • Time until they

    see the last record? • Or until they see the first?
  3. The trouble with pagination • Repeated connection overhead • Records

    fall in the cracks between pages • Records appear on two consecutive pages
  4. Relative time to first record 0 1.25 2.5 3.75 5

    1 record 2 records 3 records 4 records 5 records Chunked delivery Traditional
  5. SBJson 3 • Chunked delivery since June 2011 :-) •

    But it was confusing and cumbersome to use… :-/ • …requiring multiple delegates chained together :-(
  6. SBJson 4 • Drops category & OO interfaces • Focus

    on chunked delivery • Introduces a block-based interface • Built specifically for two primary use cases
  7. Multi-root JSON [parser parse:data("[]{")];
 // calls block(@[]) [parser parse:data("}[]"]; //

    next part of stream
 // calls block(@{})
 // calls block(@[])
  8. Multi-root JSON [parser parse:data("[]{")];
 // calls block(@[]) [parser parse:data("}[]"]; //

    next part of stream
 // calls block(@{})
 // calls block(@[])
  9. Unwrap the root array! [parser parse:data("[[],{")];
 // calls block(@[]) [parser

    parse:data("},true]")];
 // calls block(@{})
 // calls block(@(YES))
  10. Unwrap the root array! [parser parse:data("[[],{")];
 // calls block(@[]) [parser

    parse:data("},true]")];
 // calls block(@{})
 // calls block(@(YES))
  11. SBJson’s Blocks SBJson4ValueBlock block = ^(id obj, BOOL *stop) {


    if (some_condition) {
 *stop = YES;
 } else {
 // do something with obj
 }
 };
  12. SBJson4ParserStatus switch ([parser parse:data]) {
 case SBJson4ParserStopped:
 case SBJson4ParserComplete:
 NSLog(“Done!");


    case SBJson4ParserWaitingForData:
 break;
 case SBJson4ParserError:
 NSLog(@"Ouch, I'm hurt!");
 break;
 }