Vue

by antixrist

HTML

<div id="app">
  <h2>Pics ({{ pics.length }}):</h2>
  <main>
    <div v-for="(pic, idx) in pics" :key="idx">
      <img :src="pic.src"/>
      <div>Loaded in: {{ pic.loadTime }} ms</div>
    </div>
  </main>
</div>

CSS

body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

h2 {
  font-weight: bold;
  margin-bottom: 15px;
}

main {
  margin: 0 auto;
  width: min-content;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 16px;
}

Vue

new Vue({
  el: "#app",
  async created () {
  	this.pics = await this.loadPics(20);
  },
  data: {
    pics: []
  },
  methods: {
  	loadPics (picsNumber) {
    	//TODO: загрзузить требуемое количество src для картинок 
      return Promise.all(
      	(new Array(picsNumber))
        	.fill(null)
        	.map(async () => {
          	const tstart = Date.now();
          	const res = await fetch('https://picsum.photos/200/300');
            return { src: res.url, loadTime: Date.now() - tstart };
          })
      );
    }
  }
})