有這麼一個場景,當你的網頁頁面效果過多就會造成了打開頁面的速度變得緩慢,長時間處于加載的狀态,這樣的效果通常會讓使用者感到不友好,通常的處理方法是先加載基本的html,然後再加載其他的網頁效果,讓使用者感覺到頁面一下子就出來了,然後其他的網頁效果再慢慢的展現出來。
這裡通過JSLoader元件來實作這種前端的效果
using System;
class XXTEA
{
public static Byte[] Encrypt(Byte[] Data, Byte[] Key)
{
if (Data.Length == 0)
{
return Data;
}
return ToByteArray(Encrypt(ToUInt32Array(Data, true), ToUInt32Array(Key, false)), false);
}
public static Byte[] Decrypt(Byte[] Data, Byte[] Key)
return ToByteArray(Decrypt(ToUInt32Array(Data, false), ToUInt32Array(Key, false)), true);
public static UInt32[] Encrypt(UInt32[] v, UInt32[] k)
Int32 n = v.Length - 1;
if (n < 1)
return v;
if (k.Length < 4)
UInt32[] Key = new UInt32[4];
k.CopyTo(Key, 0);
k = Key;
UInt32 z = v[n], y = v[0], delta = 0x9E3779B9, sum = 0, e;
Int32 p, q = 6 + 52 / (n + 1);
while (q-- > 0)
sum = unchecked(sum + delta);
e = sum >> 2 & 3;
for (p = 0; p < n; p++)
{
y = v[p + 1];
z = unchecked(v[p] += (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));
}
y = v[0];
z = unchecked(v[n] += (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));
return v;
public static UInt32[] Decrypt(UInt32[] v, UInt32[] k)
UInt32 z = v[n], y = v[0], delta = 0x9E3779B9, sum, e;
sum = unchecked((UInt32)(q * delta));
while (sum != 0)
for (p = n; p > 0; p--)
z = v[p - 1];
y = unchecked(v[p] -= (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));
z = v[n];
y = unchecked(v[0] -= (z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z));
sum = unchecked(sum - delta);
private static UInt32[] ToUInt32Array(Byte[] Data, Boolean IncludeLength)
Int32 n = (((Data.Length & 3) == 0) ? (Data.Length >> 2) : ((Data.Length >> 2) + 1));
UInt32[] Result;
if (IncludeLength)
Result = new UInt32[n + 1];
Result[n] = (UInt32)Data.Length;
else
Result = new UInt32[n];
n = Data.Length;
for (Int32 i = 0; i < n; i++)
Result[i >> 2] |= (UInt32)Data[i] << ((i & 3) << 3);
return Result;
private static Byte[] ToByteArray(UInt32[] Data, Boolean IncludeLength)
Int32 n;
n = (Int32)Data[Data.Length - 1];
n = Data.Length << 2;
Byte[] Result = new Byte[n];
Result[i] = (Byte)(Data[i >> 2] >> ((i & 3) << 3));
}
調用方法示例:
先在頁面上加載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);
本文轉自linzheng 51CTO部落格,原文連結:http://blog.51cto.com/linzheng/1078557