Help with dynamic page cache
Your question has two different topics:


  
  How can I get the dynamic page cache to cache the product info
  section?
  


Set cache keys:

'productinfo' =&gt; [
    // ...
    '#cache' =&gt; [
        'keys' =&gt; ['mymodule', 'product', '1234'],
        'tags' =&gt; ['product:1234'],
    ],
],


Sections of a render array are only cached, if they have cache keys. The keys are used to build the unique cid for the cache render table.


  
  However, if a session has not yet been started (i.e. first page view),
  the entire html page is cached
  


Anonymous traffic is cached by the Internal Page Cache. If you start a session, the next request will be able to pass the Internal Page Cache and is handled by the Dynamic Page Cache.