优化网站速度的几种方式
- 2009年04月7日
因为在重做自己的部落格,所以稍微研究了下关于网站速度优化的技术
找到了一篇很棒的文章,来自于yahoo开发者社区
配套Firefox的YSlow和Firebug对网站进行全面的优化
原文: http://developer.yahoo.com/performance/rules.html
本文转载自虾米网。
按 ‘ 技术存档 ’ 分类归档
因为在重做自己的部落格,所以稍微研究了下关于网站速度优化的技术
找到了一篇很棒的文章,来自于yahoo开发者社区
配套Firefox的YSlow和Firebug对网站进行全面的优化
原文: http://developer.yahoo.com/performance/rules.html
本文转载自虾米网。
前几天收到了谢大发来的关于入学第一周的安排,很明显我将miss掉所有的节目,因为航班的原因。
当然大学那边我也已经联系好,我将在我抵达后再去报道。
不过,收到了一份我比较感兴趣的资料,关于第一周的一个机器人比赛的准备文档。
这个就是所谓的机器人。
从文档中我能了解到,这个机器人名叫Lego Mindstorm NXT robot,机器人通过蓝牙技术与计算机进行交互。
除此之外,机器人控制程序采用JAVA语言编写,这点让我很大吃一惊,JAVA我可以说是从来没有接触过的。
不过看了文档中的介绍,还是对机器人程序编写有了一定的认识。
控制机器人行走的为两个马达,motor B与motor C,左边为B,右边为C
控制速度与方向的程序代码如下
Motor.B.setSpeed(50);
Motor.C.setSpeed(50);
Motor.B.forward();
Motor.C.forward();
此段代码是让机器人以半速前进。
如此类推,机器人还有backward和stop的子程序
至于转向,则可以设置两个马达不同的速度以及不同的运行模式来进行转向。
例如可以
Motor.B.setSpeed(50);
Motor.B.forward();
Motor.C.stop();
则是让机器人向C马达方向进行转向。
除此之外,机器人还有传感器来感应自己与物体的距离。
传感器分为distanceSensor,leftDistanceSensor,rightDistanceSensor,touchSensor,ultrasonic sensor
这是文档中介绍过的传感器
对于distanceSensor,在java程序中有一个已存在的子程序getDistance,可以直接调用
distanceSensor.getDistance()返回一个最近的物体与机器人的距离,cm为单位,整数型。
通过这个子程序,我们可以很好的控制机器人的速度,因为是比赛,所以需要机器人达到最优,所以可以通过判定语句来使控制机器人的速度和运行状况
例如
int dist = distanceSensor.getDistance();
if (dist <10){
Motor.B.stop();
Motor.C.stop();
}
如此一来,可以让机器人在距离一个物件小于10cm时停下
当然,程序中还有leftDistanceSensor,rightDistanceSensor,通过这两个子程序,我们可以让机器人做到智能转向。
int leftdist = leftDistanceSensor.getDistance();
int rightdist = rightDistanceSensor.getDistance();
while (leftdist<=10){
Motor.C.setSpeed(10);
Motor.B.setSpeed(50);
Motor.B.forward();
Motor.C.forward();
int leftdist = leftDistanceSensor.getDistance();}
除此之外我们还可以再编写一个子程序NormalForward()包含机器人正常速度前进的代码
然后在控制自动转向完毕后调用,机器人就会自动前进了。
对于touchSensor,包含一个isPressed的子程序,返回值为布尔型。
这个传感器位于机器人前方,可以感触是否接触到物件,如果是,则返回true,如果假则返回false
调用方式很简单
boolean touch = touchSensor.isPressed()
文档中要求说如果机器人传感器触碰到什么东西,则后退
那么所应该的代码即
boolean touch = touchSensor.isPressed()
if (touch = true){
motor.B.setSpeed(50);
motor.C.setSpeed(50);
motor.B.backward;
motor.C.backward;
}
机器人包含了ultrasonic sensor来精确测量机器人与最近的物体的距离,但是传感器可能会受到周围噪音的影响,所以如何处理这些从传感器中所接收到的噪音数据呢?
我个人感觉,其他的噪声与超声有着不同的频率,超声波的频率至少大于20000HZ。
计算机能发出10-60000HZ的声波,我们可以定义一个特殊的频率来发射,即
int soundFrequency = 30000;
然后通过程序分析所采集到的声波的频率,只有获取到特定的频率的声波才进行分析,这样就能解决其他噪音的干扰了。
至于如何通过程序来解决,虽然简单的if判定可以解决,但是我不知道所需要的子程序和具体方式,代码只有搁置了。
说实话蛮想参加那个活动,毕竟是开学,能有个展示自己的地方,不过也罢,因为有人说,今后的机会还会有很多的。 Because she is important in my heart.
虽然没参赛,但我已经学会了不少,嘿嘿。
P.S.文中程序代码部分为自己原创,部分为文档中附带。或许部分程序会有错误,如果您发现,请指出,谢谢。
额- -再怎么说自己也是个学计算机的
再怎么贪玩也总该有点东西写吧
所以说
闲来无聊
就写了这篇文章- –
==================================
首先呢,要说说Base64编码。
Base64编码是一种加密/解密字符串的算法
他可以把一段字符串A通过特定的加密算法变成字符串B
并且单凭你的肉眼是无法通过B来反推出A来
但通过逆推算法便能很迅速的将字符串B转换为字符串A
这就是加密/解密字符串的算法。
简单的来说,Base64编码的特点就是
加密解密速度快,并且须通过特定算法解密。
下面这段代码就是一段通过Base64加密后的字符串
5qyi6L+O5p2l5Yiw5LuY552/55qE6YOo6JC95qC844CC
通过肉眼你根本无法知道这段代码的意义,以下则是解密后的字符串
欢迎来到付睿的部落格。
下面开始说说实质性的东西。
Base64是较为常见的一种用于传输8Bit字节代码的编码方式之一,他要求把3个8Bit的字节转换为4个6Bit的字节,既3×8=4×6=24,然后把6Bit高位用0补成8Bit,使得3个8bit原文变成4个8Bit字节的代码,所以说转换后的字符串会比原字符串长。
举个例子(仅仅是个例子e113)
原文为 qweqweqw asdasdas zxczxczx
转换后 00qweqwe 00qwasda 00sdaszx 00czxczx
转换后的字符串对应一个编码表,即Base64编码的码表(摘自RFC2045)
Table 1: The Base64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
如此一来便能使4个8Bit的译文有对应的字符代表。
那么再来看一个实际的例子(2进制表示)
转换前 10101101 10111010 01110110
转换后 00101011 00011011 00101001 00110110
十进制 43 27 41 54
对应值 r b p 2
所以说编码后字符串为 rbp2
如此也可以逆向推算出原文。
但是,我们也可能遇到一个问题
就是如果原文字节数是10,11或者13该怎么办?(非3整数倍)
Base64编码是这样来解决的:
原文字节不够的地方全部用0来补足,转换时用=代替。
但是编码后的字符串不会含有2个以上的=,因为等号个数=原文字节数 mod 3
ok,这就是简单的Base64编码的介绍。
当然,我是看了老罗的文章后才了解到的。
接下来,说说专用链和Base64的关系。
其实呢,说白了专用链就是使用了Base64编码,因为我之前提到的Base64的特点,他的高速的加密以及解密。
接下来我将是用一个软件的下载地址来做示范,讲解3种程序的专用链。
例子的下载地址是(此链接不存在,仅作为演示)
http://www.free-z.net/1.rar
迅雷专用链
迅雷的专用链是在原地址的前面加”AA”,最后加”ZZ”后再是用Base64加密
即使用Base64编码如下字符串
AAhttp://www.free-z.net/1.rarZZ
编码后字符串为
QUFodHRwOi8vd3d3LmZyZWUtei5uZXQvMS5yYXJaWg==
迅雷专用链即在此字符串前加thunder://,即
thunder://QUFodHRwOi8vd3d3LmZyZWUtei5uZXQvMS5yYXJaWg==
快车专用链
快车的专用链是在原地址的前面和后面都加上”"后再是用Base64加密
即使用Base64编码如下字符串
http://www.free-z.net/1.rar
编码后字符串为
W0ZMQVNIR0VUXWh0dHA6Ly93d3cuZnJlZS16Lm5ldC8xLnJhcltGTEFTSEdFVF0=
快车专用链即在此字符串前加Flashget://,尾部加&freeznet,即
Flashget://W0ZMQVNIR0VUXWh0dHA6Ly93d3cuZnJlZS16Lm5ldC8xLnJhcltGTEFTSEdFVF0=&freeznet
腾讯旋风专用链
腾讯旋风专用链是最为简单的,直接将原地址Base64编码即可,即
对字符串http://www.free-z.net/1.rar直接编码,可获得
aHR0cDovL3d3dy5mcmVlLXoubmV0LzEucmFy
然后在此字符串之前加qqdl://即可,即
qqdl://aHR0cDovL3d3dy5mcmVlLXoubmV0LzEucmFy
原理就是这样的,够简单吧 – -e113