Skip to content

Best practice to load multiple times (LoadQueue reuse?). #232

Open
@xpol

Description

@xpol

I have a single page application (SPA) use PreloadJS for resource loading.

I have different screens (pages) in my SPA (have different url using react-router).
I need load resources for each view when user navigate to. And if previous loading is not complete I need just stop all loading before new loading.

Should I create a new LoadQueue for each loading process or reuse the LoadQueue?

I first tried to reuse the queue:

const queue = new createjs.LoadQueue()
createjs.Sound.alternateExtensions = ['mp3']
queue.installPlugin(createjs.Sound)
queue.setMaxConnections(8)

const preload = (manifest) => {
  // console.log(manifest)
  manifest = unique(manifest).filter(i => i)
  console.log(`Loading ${manifest.length} assets...`)

  queue.removeAll()
  queue.removeAllEventListeners()
  queue.reset()

  return new Promise((resolve, reject) => {
    queue.on('complete', () => resolve({ok: true}))
    queue.on('error', (error) => reject({error}))
    queue.loadManifest(manifest)
  })
}

But it sometimes fires 'complete' when some resources not loaded.

Then I tried:

let queue

const preload = (manifest) => {
  if (queue) queue.destroy()

  queue = new createjs.LoadQueue()
  createjs.Sound.alternateExtensions = ['mp3']
  queue.installPlugin(createjs.Sound)
  queue.setMaxConnections(8)

  console.log(manifest)
  manifest = unique(manifest).filter(i => i)
  console.log(`Loading ${manifest.length} assets...`)

  return new Promise((resolve, reject) => {
    queue.on('complete', () => resolve({success: true}))
    queue.on('error', (error) => resolve({error}))
    queue.loadManifest(manifest)
  })
}

My question is which is the best practice to load different set of resources, create a new LoadQueue for each set or reuse one single LoadQueue?
If reuse is OK, how to correct reset LoadQueue for next loading request.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions