Hello, I’ve also been facing this issue. WWW. is ridiculously slow. Also I tried the new substitution for www, unity "
using UnityEngine.Networking;" namespace, same ressults, I’m sure there is a bug because it can take like 10 seconds and some other times a minute or so, or even almost “fast” for very same scene loading very same tank skin, its all pretty random, I’ve been reading, some people say is a network adapter issue in unity blablabla, dunno, whatever, I found the way to fast load textures.
In some other threads people suggest texture2d.LoadImage(yourByetArray), but while this is faster, it is still some some seconds freeze, the problem is not in the reading the
fileData = File.ReadAllBytes(fullpath);
the delay takes place in converting the byte array into a texture, so, the tex.LoadImage(byte[ ]).
Some peopla said that that .loadRawTextureData(byte[ ]) was the fastest so I had tro try, and yes it is VERY fast. I think, from hwat I did read that you can load even a non raw saved textures by striping parts of the byte[ ] but that I’ve not yet tested. I’ve an skin editor and hwat I do is that before saving the texture, witch is already a texture2D type
if (rt)
{
Texture2D tx = new Texture2D(rt.width, rt.height, TextureFormat.ARGB32, false);
RenderTexture.active = rt;
tx.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
tx.Apply();
//byte[] bytes = tx.EncodeToJPG(95);
//byte[] bytes = tx.EncodeToPNG();
byte[] bytes = tx.GetRawTextureData();
//file
string fullPath = dirPath + textName;
//Debug.Log("fullPath" + fullPath);
System.IO.File.WriteAllBytes(fullPath, bytes);
}
you can see how I was encodign to jpg or png before, notice ARGB32 texture format, you need same when loading texture. false is I for mipchain, set it true if when loading you’re going to set true otherwise it will say it lacks info.
when loading do this:
public static Texture2D LoadSkin(string fullpath)
{
Texture2D tex = null;
byte[] fileData;
if (File.Exists(fullpath))
{
fileData = File.ReadAllBytes(fullpath);
tex = new Texture2D(4096, 4096,TextureFormat.ARGB32,false);
//tex.LoadImage(fileData); //..this will auto-resize the texture dimensions.
tex.LoadRawTextureData(fileData); //.no longer.this will auto-resize the texture dimensions.
tex.Apply();
}
return tex;
}
notice you need to feed the texture size, as theese are skins I’ve hardcoded but you could feed this as a param I guess, also mip generation in this example is false but when I’ve all running will set to true. In my first attemp I miss put texture format with RGBA32 and colors where glitched, naming so similar 
hope this help. This aint ASYNC, but is fast enough. I found an async method posted in forums BUT it relies in too much thir party libs, good luck doing multyplatform with that.
Further, I was making a mistake, if you are applying theh skin (in my case a tank) to all objects, same texture is a different instance on each part because LoadSkin() is called for each material, this is poorly coded, I’ve checked and each have a texture with a different id, instead, you should load the skin in a sort of SkinDispatcher with something like a dictionary like <string SkinID, texture2D skin> and you feed the material with that single instance of the skin. I’ve yet to do that part.
Hope this helps to others.
side note, may be textureload now is async behind scenes now, how to read more about this
https://docs.unity3d.com/Manual/AsyncTextureUpload.html