异步加载js文件并执行js方法:实现异步处理网页的复杂效果

有这么一个场景,当你的网页页面效果过多就会造成了打开页面的速度变得缓慢,长时间处于加载的状态,这样的效果通常会让用户感到不友好,通常的处理方法是先加载基本的html,然后再加载其他的网页效果,让用户感觉到页面一下子就出来了,然后其他的网页效果再慢慢的展现出来。

这里通过JSLoader组件来实现这种前端的效果

 

  
  
  
  
  1. using System;  
  2.  
  3. class XXTEA  
  4. {  
  5.     public static Byte[] Encrypt(Byte[] Data, Byte[] Key)  
  6.     {  
  7.         if (Data.Length == 0)  
  8.         {  
  9.             return Data;  
  10.         }  
  11.         return ToByteArray(Encrypt(ToUInt32Array(Data, true), ToUInt32Array(Key, false)), false);  
  12.     }  
  13.     public static Byte[] Decrypt(Byte[] Data, Byte[] Key)  
  14.     {  
  15.         if (Data.Length == 0)  
  16.         {  
  17.             return Data;  
  18.         }  
  19.         return ToByteArray(Decrypt(ToUInt32Array(Data, false), ToUInt32Array(Key, false)), true);  
  20.     }  
  21.  
  22.     public static UInt32[] Encrypt(UInt32[] v, UInt32[] k)  
  23.     {  
  24.         Int32 n = v.Length - 1;  
  25.         if (n < 1)  
  26.         {  
  27.             return v;  
  28.         }  
  29.         if (k.Length < 4)  
  30.         {  
  31.             UInt32[] Key = new UInt32[4];  
  32.             k.CopyTo(Key, 0);  
  33.             k = Key;  
  34.         }  
  35.         UInt32 z = v[n], y = v[0], delta = 0x9E3779B9sum = 0, e;  
  36.         Int32 p, q = 6 + 52 / (n + 1);  
  37.         while (q-- > 0)  
  38.         {  
  39.             sum = unchecked(sum + delta);  
  40.             e = sum >> 2 & 3;  
  41.             for (p = 0; p < n; p++)  
  42.             {  
  43.                 y = v[p + 1];  
  44.                 z = unchecked(v[p] += (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));  
  45.             }  
  46.             y = v[0];  
  47.             z = unchecked(v[n] += (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));  
  48.         }  
  49.         return v;  
  50.     }  
  51.     public static UInt32[] Decrypt(UInt32[] v, UInt32[] k)  
  52.     {  
  53.         Int32 n = v.Length - 1;  
  54.         if (n < 1)  
  55.         {  
  56.             return v;  
  57.         }  
  58.         if (k.Length < 4)  
  59.         {  
  60.             UInt32[] Key = new UInt32[4];  
  61.             k.CopyTo(Key, 0);  
  62.             k = Key;  
  63.         }  
  64.         UInt32 z = v[n], y = v[0], delta = 0x9E3779B9, sum, e;  
  65.         Int32 p, q = 6 + 52 / (n + 1);  
  66.         sum = unchecked((UInt32)(q * delta));  
  67.         while (sum != 0)  
  68.         {  
  69.             e = sum >> 2 & 3;  
  70.             for (p = n; p > 0; p--)  
  71.             {  
  72.                 z = v[p - 1];  
  73.                 y = unchecked(v[p] -= (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));  
  74.             }  
  75.             z = v[n];  
  76.             y = unchecked(v[0] -= (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));  
  77.             sum = unchecked(sum - delta);  
  78.         }  
  79.         return v;  
  80.     }  
  81.     private static UInt32[] ToUInt32Array(Byte[] Data, Boolean IncludeLength)  
  82.     {  
  83.         Int32 n = (((Data.Length & 3) == 0) ? (Data.Length >> 2) : ((Data.Length >> 2) + 1));  
  84.         UInt32[] Result;  
  85.         if (IncludeLength)  
  86.         {  
  87.             Result = new UInt32[n + 1];  
  88.             Result[n] = (UInt32)Data.Length;  
  89.         }  
  90.         else  
  91.         {  
  92.             Result = new UInt32[n];  
  93.         }  
  94.         n = Data.Length;  
  95.         for (Int32 i = 0; i < n; i++)  
  96.         {  
  97.             Result[i >> 2] |= (UInt32)Data[i] << ((i & 3) << 3);  
  98.         }  
  99.         return Result;  
  100.     }  
  101.     private static Byte[] ToByteArray(UInt32[] Data, Boolean IncludeLength)  
  102.     {  
  103.         Int32 n;  
  104.         if (IncludeLength)  
  105.         {  
  106.             n = (Int32)Data[Data.Length - 1];  
  107.         }  
  108.         else  
  109.         {  
  110.             n = Data.Length << 2;  
  111.         }  
  112.         Byte[] Result = new Byte[n];  
  113.         for (Int32 i = 0; i < n; i++)  
  114.         {  
  115.             Result[i] = (Byte)(Data[i >> 2] >> ((i & 3) << 3));  
  116.         }  
  117.         return Result;  
  118.     }  

调用方法示例:

先在页面上加载JSLoader.js文件

然后执行

JSLoader.load('js/test.js' , function () {a();})

表示异步加载test.js文件,并且加载完成后再执行a()方法,a()方法是test.js里面的方法,a()方法就是负责渲染一些前端页面的网页效果来的。

不过该方法在ie7下并不会产生异步的效果,在ie7下需要使用延时触发器来包装一下,如:

setTimeout(" JSLoader.load('js/test.js' , function () {a();})", 1);

你可能感兴趣的:(执行js方法,异步加载js文件,异步处理网页)