Tests audit rules on a page without images.
Page reloaded.
 Network Utilization
    Combine external JavaScript (4)
     There are multiple resources served from same domain. Consider combining them into as few files as possible.
      4 JavaScript resources served from [domain].
 Web Page Performance
    Optimize the order of styles and scripts (2)
     The following external CSS files were included after an external JavaScript file in the document head. To ensure CSS files are downloaded in parallel, always include external CSS before external JavaScript.
       audits-style1.css
      1 inline script block was found in the head between an external CSS file and another resource. To allow parallel downloading, move the inline script before the external CSS file, or after the next resource.
    Put CSS in the document head (2)
     CSS in the document body adversely impacts rendering performance.
     1 style block(s) in the 
      audits-panel-noimages-functional.html
      body should be moved to the document head.
     Link node 
      audits-style1.css
      should be moved to the document head in 
      audits-panel-noimages-functional.html
    Remove unused CSS rules (4)
     4 rules (100%) of CSS not used by the current page.
      Inline block #1: 100% is not used by the current page.
       .unused
       audits-style1.css
      : 100% is not used by the current page.
       .some-style
      Inline block #2: 100% is not used by the current page.
       .violation
       audits-style1.css
      : 100% is not used by the current page.
       .some-style

