anchor.diff:  .l-main-section
   :marked
     ## Simulate the web API
  -
  -  We recommend registering app-wide services in the root
  -  `!{_AppModuleVsAppComp}` *providers*.  <span if-docs="dart">Here you're
  -  registering in `main` for a special reason.</span>
   
     Until you have a web server that can handle requests for hero data,
     the HTTP client will fetch and save data from
     a mock service, the *in-memory web API*.
  -  <span if-docs="dart"> The app itself doesn't need to know
  -  about this, so you can slip the in-memory web API into the
  -  configuration above the `AppComponent`.</span>
   
     Update <span ngio-ex>!{_appModuleTsVsMainTs}</span> with this version, which uses the mock service:
   
  
positive.code: :marked
    #### Search terms
  
    Focus on the `!{_priv}searchTerms`:
  
  +makeExcerpt('src/app/hero-search.component.ts', 'searchTerms', '')
  
  
negative.code: 
      * `debounceTime(300)` waits until the flow of new string events pauses for 300 milliseconds
      before passing along the latest string. You'll never make requests more frequently than 300ms.
      * `distinctUntilChanged()` ensures that a request is sent only if the filter text changed.
      * `switchMap()` calls the search service for each search term that makes it through `debounceTime()` and `distinctUntilChanged()`.
      It cancels and discards previous search observables, returning only the latest search service observable.
  
    .l-sub-section
  