2008年9月20日星期六

PHP 能做什么?

PHP 能做任何事情,PHP主要用服务器端的脚本程序,因此可以用PHP来完成其它任何CGI程序完成的工作。 比如:收集表单数据,生成动态网页,发送/接收COOKIE,等等。PHP的功能不仅限于这些,还有其它好多功能。

PHP脚本主要用于下面三大领域:
1、服务端脚本
2、命令行脚本
3、编写桌面应用程序

服务端脚本。这是 PHP 最传统,也是最主要的目标领域。开展这项工作需要具备以下三点:PHP 解析器(CGI 或者服务器模块)、web 服务器和 web 浏览器。需要在运行 web 服务器时,安装并配置 PHP,然后,可以用 web 浏览器来访问 PHP 程序的输出,即浏览服务端的 PHP 页面。如果只是实验 PHP 编程,所有的这些都可以运行在自己家里的电脑中。请查阅安装一章以获取更多信息。
命令行脚本。可以编写一段 PHP 脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅只需要 PHP 解析器来执行。这种用法对于依赖 cron(Unix 或者 Linux 环境)或者 Task Scheduler(Windows 环境)的日常运行的脚本来说是理想的选择。这些脚本也可以用来处理简单的文本。请参阅 PHP 的命令行模式以获取更多信息。
编写桌面应用程序。对于有着图形界面的桌面应用程序来说,PHP 或许不是一种最好的语言,但是如果用户非常精通 PHP,并且希望在客户端应用程序中使用 PHP 的一些高级特性,可以利用 PHP-GTK 来编写这些程序。用这种方法,还可以编写跨平台的应用程序。PHP-GTK 是 PHP 的一个扩展,在通常发布的 PHP 包中并不包含它。如果对 PHP-GTK 感兴趣,请访问其» 网站以获取更多信息。

PHP 能够用在所有的主流操作系统上,包括 Linux、Unix 的各种变种(包括 HP-UX、Solaris 和 OpenBSD)、Microsoft Windows、Mac OS X、RISC OS 等。今天,PHP已经支持了大多数的 web 服务器,包括 Apache、Microsoft Internet Information Server(IIS)、Personal web Server(PWS)、Netscape 以及 iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd 等。对于大多数的服务器,PHP 提供了一个模块;还有一些 PHP 支持 CGI 标准,使得 PHP 能够作为 CGI 处理器来工作。

综上所述,使用 PHP,可以自由地选择操作系统和 web 服务器。同时,还可以在开发时选择使用面对过程和面对对象,或者两者混和的方式来开发。尽管 PHP 4 不支持 OOP 所有的标准,但很多代码仓库和大型的应用程序(包括 PEAR 库)仅使用 OOP 代码来开发。PHP 5 弥补了 PHP 4 的这一弱点,引入了完全的对象模型。

使用 PHP,并不局限于输出 HTML。PHP 还能被用来动态输出图像、PDF 文件甚至 Flash 动画(使用 libswf 和 Ming)。还能够非常简便的输出文本,例如 XHTML 以及任何其它形式的 XML 文件。PHP 能够自动生成这些文件,在服务端开辟出一块动态内容的缓存,可以直接把它们打印出来,或者将它们存储到文件系统中。

PHP 最强大最显著的特性之一,是它支持很大范围的数据库。用户会发现利用 PHP 编写数据库支持的网页简单得难以置信。目前,PHP 支持如下数据库:

Adabas D
dBase
Empress
FilePro(只读)
Hyperwave
IBM DB2
Informix
Ingres
InterBase
FrontBase
mSQL
Direct MS-SQL
MySQL
ODBC
Oracle(OCI7 和 OCI8)
Ovrimos
PostgreSQL
SQLite
Solid
Sybase
Velocis
Unix dbm
同时还有一个叫做 PDO 的数据库抽象扩展库使得可以自由地使用该扩展库支持的任何数据库。另外,PHP 还支持 ODBC,即 Open Database Connection Standard(开放数据库连接标准),因此可以连接任何其它支持该世界标准的数据库。

PHP 还支持利用诸如 LDAP、IMAP、SNMP、NNTP、POP3、HTTP、COM(Windows 环境)等不计其数的协议的服务。还可以开放原始网络端口,使得任何其它的协议能够协同工作。PHP 支持和所有 web 开发语言之间的 WDDX 复杂数据交换。关于相互连接,PHP 已经支持了对 Java 对象的即时连接,并且可以将他们自由的用作 PHP 对象。甚至可以用我们的 CORBA 扩展库来访问远程对象。

PHP 具有极其有效的文本处理特性,支持从 POSIX 扩展或者 Perl 正则表达式到 XML 文档解析。为了解析和访问 XML 文档,PHP 4 支持 SAX 和 DOM 标准,也可以使用 XSLT 扩展库来转换 XML 文档。PHP 5 基于强健的 libxm2 标准化了所有的 XML 扩展,并添加了 SimpleXML 和 XMLReader 支持,扩展了其在 XML 方面的功能。

另外,还有很多其它有趣的扩展库。例如 mnoGoSearch 搜索引擎函数、IRC 网关函数、多种压缩工具(gzip、bz2、zip)、日历转换、翻译……

由于在这里无法列出 PHP 所有的特性和可提供的便利,请参阅安装以及函数参考有关章节以获取关于这里提到的扩展库更多的信息。

2008年9月18日星期四

Killall的使用详解

先举例:
killall dumpHistory.sh php java
意思是:kill正在运行的文件名为dumpHistory.sh 和所有的php,所有的java程序.
注意:kill文件名字时一定要用全名字。

另外如果有杀不掉的情况,可以强止中止用kill -9 PID

================================================================
----------------------------下面详解----------------------------
================================================================
NAME (名称)
killall - 以名字方式来杀死进程

SYNOPSIS (总览)
killall [-egiqvw] [-signal] name ...
killall -l
killall -V

DESCRIPTION (描述)
killall 发送一条信号给所有运行任意指定命令的进程. 如果没有指定信号名, 则发送 SIGTERM.

信号可以以名字 (如 -HUP ) 或者数字 (如 -1 ) 的方式指定. 信号 0 (检查进程是否存在)只能以数字方式指定.

如果命令名包括斜杠 (/), 那么执行该特定文件的进程将被杀掉, 这与进程名无关.

如果对于所列命令无进程可杀, 那么 killall 会返回非零值. 如果对于每条命令至少杀死了一个进程, killall 返回 0.

killall 进程决不会杀死自己 (但是可以杀死其它 killall 进程).

OPTIONS (选项)

-e :对于很长的名字, 要求准确匹配. 如果一个命令名长于 15 个字符, 则可能不能用整个名字 (溢出了). 在这种情况下, killall 会杀死所有匹配名字前 15 个字符的所有进程. 有了 -e 选项,这样的记录将忽略. 如果同时指定了 -v 选项, killall 会针对每个忽略的记录打印一条消息.
-g :杀死属于该进程组的进程. kill 信号给每个组只发送一次, 即使同一进程组中包含多个进程.
-i :交互方式,在杀死进程之前征求确认信息.
-l :列出所有已知的信号名.
-q :如果没有进程杀死, 不会提出抱怨.
-v :报告信号是否成功发送.
-V :显示版本信息.
-w :等待所有杀的进程死去. killall 会每秒检查一次是否任何被杀的进程仍然存在, 仅当都死光后才返回. 注意: 如果信号被忽略或没有起作用, 或者进程停留在僵尸状态, killall 可能会永久等待.


FILES(相关文件)

/proc proc文件系统的存在位置

KNOWN BUGS (已知 BUGS)
以文件方式杀死只对那些在执行时一直打开的可执行文件起作用, 也即, 混杂的可执行文件不能够通过这种方式杀死.

要警告的是输入 killall name 可能不会在非 Linux 系统上产生预期的效果, 特别是特权用户执行时要小心.

在两次扫描的间隙, 如果进程消失了而被代之以一个有同样 PID 的新进程, killall -w 侦测不到.

2008年9月17日星期三

怎样删除显卡的右键菜单?

转载--作者:X-Force

前几天装系统时,遇到同样的问题,转一下以防再次遇到.

很多朋友曾经为显卡驱动的右键菜单拖慢速度而烦恼。X-Force 前天刚重装了系统,用上了最新的ATI催化剂驱动。发现其在我的右键上增加了一项 ATI CATALYST Control Center 的选项,令到我右键速度别得很不顺畅。。。

而且,X-Force用的台式机上的 Intel 显卡驱动也是一样在右键增加了菜单。。平时不怎么用到显卡的设置,这些菜单又老是拖慢了右键的速度,真的很烦恼。而且还不能在设置中方便地去掉的。

于是,今天 异次元の世界 就给大家带来一款小工具,和X-Force有相同烦恼的朋友们都推荐你们试一试。它可以方便地清除显卡驱动的右键菜单选项。



看!!这个菜单除了影响右键菜单的速度外还影响我的使用习惯,多不爽?!

呵呵,这个小工具来一键清除吧!

如果你不习惯于那个显卡的选项,不用想了,下载这个咚咚,还自己一个清净的世界吧!



============================================================================
------拷贝下面内容另存为(显卡右键菜单清除工具.cmd)文件,双击就可以----------
============================================================================
@ ECHO OFF
@ ECHO. 显卡右键菜单删除程序
@ ECHO -----------------------------------------------------------------------
@ ECHO 很多显卡在装了驱动之后,右键菜单中会多出一项或多项菜单,会拖慢右键
@ ECHO 本批处理将删除这个菜单,让你的右键速度恢复正常水平
@ ECHO -----------------------------------------------------------------------
PAUSE

regsvr32 /u /s igfxpph.dll
reg delete HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers /f
reg add HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers\new /ve /d {D969A300-E7FF-11d0-A93B-00A0C90F2719}
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v HotKeysCmds /f
reg delete HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v IgfxTray /f

============================================================================
============================================================================

2008年9月16日星期二

ssh-keygen 免输入密码登陆

懒得每次登陆时或是SCP远程COPY文件时输入密码,可以使用以下方法:
步骤如下:

# cd ~/.ssh/
# ssh-keygen -t rsa 或 ssh-keygen -d (dsa) => 生成文件 id_rsa, id_rsa.pub
# scp id_rsa.pub remote_server_hostname:~/.ssh/
# ssh user@remote_server_hostname
# cat .ssh/id_rsa.pub >> .ssh/authorized_keys

完成了,接下来你再次登陆和SCP文件时就可以不要密码了。

另外可能一些用户还不行,接下要看你的目录和文件权限是否正确,

# cd ~
# chmod 700 .ssh/ (安全机制考虑)
# chmod 600 .ssh/id_rsa (只读防止别人修改,安全机制考虑)
# ssh user@remote_server_hostnam
# chmod 600 .ssh/authorized_keys

现在完成了,确保可以正确使用了.

说明:

id_rsa: private key
id_rsa.pub: public key

将 public key(id_rsa.pub) 内容拷贝到远程的服务加到user 的 .ssh/authorized_keys 中.
完成之后登陆访问时,就会用本机的private key(id_rsa) 与远程服务器的public key(authorized_keys) 进行认证,认证通过就可以直接登陆或访问了,不用再输入密码,并且相对比较安全.

========================================================================
ssh-keygen 中文手册(来自网友)
========================================================================
名称
ssh-keygen - 生成、管理和转换认证密钥


语法

ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile]
ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
ssh-keygen -i [-f input_keyfile]
ssh-keygen -e [-f input_keyfile]
ssh-keygen -y [-f input_keyfile]
ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile]
ssh-keygen -l [-f input_keyfile]
ssh-keygen -B [-f input_keyfile]
ssh-keygen -D reader
ssh-keygen -F hostname [-f known_hosts_file]
ssh-keygen -H [-f known_hosts_file]
ssh-keygen -R hostname [-f known_hosts_file]
ssh-keygen -U reader [-f input_keyfile]
ssh-keygen -r hostname [-f input_keyfile] [-g]
ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point]
ssh-keygen -T output_file -f input_file [-v] [-a num_trials] [-W generator]


描述
ssh-keygen 用于为 ssh(1)生成、管理和转换认证密钥,包括 RSA 和 DSA 两种密钥。
密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。

ssh-keygen 还可以用来产生 Diffie-Hellman group exchange (DH-GEX) 中使用的素数模数。
参见模数和生成小节。

一般说来,如果用户希望使用RSA或DSA认证,那么至少应该运行一次这个程序,
在 ~/.ssh/identity, ~/.ssh/id_dsa 或 ~/.ssh/id_rsa 文件中创建认证所需的密钥。
另外,系统管理员还可以用它产生主机密钥。

通常,这个程序产生一个密钥对,并要求指定一个文件存放私钥,同时将公钥存放在附加了".pub"后缀的同名文件中。
程序同时要求输入一个密语字符串(passphrase),空表示没有密语(主机密钥的密语必须为空)。
密语和口令(password)非常相似,但是密语可以是一句话,里面有单词、标点符号、数字、空格或任何你想要的字符。
好的密语要30个以上的字符,难以猜出,由大小写字母、数字、非字母混合组成。密语可以用 -p 选项修改。

丢失的密语不可恢复。如果丢失或忘记了密语,用户必须产生新的密钥,然后把相应的公钥分发到其他机器上去。

RSA1的密钥文件中有一个"注释"字段,可以方便用户标识这个密钥,指出密钥的用途或其他有用的信息。
创建密钥的时候,注释域初始化为"user@host",以后可以用 -c 选项修改。

密钥产生后,下面的命令描述了怎样处置和激活密钥。可用的选项有:

-a trials
在使用 -T 对 DH-GEX 候选素数进行安全筛选时需要执行的基本测试数量。

-B 显示指定的公钥/私钥文件的 bubblebabble 摘要。

-b bits
指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。DSA密钥必须恰好是1024位(FIPS 186-2 标准的要求)。

-C comment
提供一个新注释

-c 要求修改私钥和公钥文件中的注释。本选项只支持 RSA1 密钥。
程序将提示输入私钥文件名、密语(如果存在)、新注释。

-D reader
下载存储在智能卡 reader 里的 RSA 公钥。

-e 读取OpenSSH的私钥或公钥文件,并以 RFC 4716 SSH 公钥文件格式在 stdout 上显示出来。
该选项能够为多种商业版本的 SSH 输出密钥。

-F hostname
在 known_hosts 文件中搜索指定的 hostname ,并列出所有的匹配项。
这个选项主要用于查找散列过的主机名/ip地址,还可以和 -H 选项联用打印找到的公钥的散列值。

-f filename
指定密钥文件名。

-G output_file
为 DH-GEX 产生候选素数。这些素数必须在使用之前使用 -T 选项进行安全筛选。

-g 在使用 -r 打印指纹资源记录的时候使用通用的 DNS 格式。

-H 对 known_hosts 文件进行散列计算。这将把文件中的所有主机名/ip地址替换为相应的散列值。
原来文件的内容将会添加一个".old"后缀后保存。这些散列值只能被 ssh 和 sshd 使用。
这个选项不会修改已经经过散列的主机名/ip地址,因此可以在部分公钥已经散列过的文件上安全使用。

-i 读取未加密的SSH-2兼容的私钥/公钥文件,然后在 stdout 显示OpenSSH兼容的私钥/公钥。
该选项主要用于从多种商业版本的SSH中导入密钥。

-l 显示公钥文件的指纹数据。它也支持 RSA1 的私钥。
对于RSA和DSA密钥,将会寻找对应的公钥文件,然后显示其指纹数据。

-M memory
指定在生成 DH-GEXS 候选素数的时候最大内存用量(MB)。

-N new_passphrase
提供一个新的密语。

-P passphrase
提供(旧)密语。

-p 要求改变某私钥文件的密语而不重建私钥。程序将提示输入私钥文件名、原来的密语、以及两次输入新密语。

-q 安静模式。用于在 /etc/rc 中创建新密钥的时候。

-R hostname
从 known_hosts 文件中删除所有属于 hostname 的密钥。
这个选项主要用于删除经过散列的主机(参见 -H 选项)的密钥。

-r hostname
打印名为 hostname 的公钥文件的 SSHFP 指纹资源记录。

-S start
指定在生成 DH-GEX 候选模数时的起始点(16进制)。

-T output_file
测试 Diffie-Hellman group exchange 候选素数(由 -G 选项生成)的安全性。

-t type
指定要创建的密钥类型。可以使用:"rsa1"(SSH-1) "rsa"(SSH-2) "dsa"(SSH-2)

-U reader
把现存的RSA私钥上传到智能卡 reader

-v 详细模式。ssh-keygen 将会输出处理过程的详细调试信息。常用于调试模数的产生过程。
重复使用多个 -v 选项将会增加信息的详细程度(最大3次)。

-W generator
指定在为 DH-GEX 测试候选模数时想要使用的 generator

-y 读取OpenSSH专有格式的公钥文件,并将OpenSSH公钥显示在 stdout 上。


模数生成
ssh-keygen 可以生成用于 Diffie-Hellman Group Exchange (DH-GEX) 协议的 groups 。
生成过程分为两步:
首先,使用一个快速且消耗内存较多的方法生成一些候选素数。然后,对这些素数进行适应性测试(消耗CPU较多)。

可以使用 -G 选项生成候选素数,同时使用 -b 选项制定其位数。例如:

# ssh-keygen -G moduli-2048.candidates -b 2048

默认将从指定位数范围内的一个随机点开始搜索素数,不过可以使用 -S 选项来指定这个随机点(16进制)。

生成一组候选数之后,接下来就需要使用 -T 选项进行适应性测试。
此时 ssh-keygen 将会从 stdin 读取候选素数(或者通过 -f 选项读取一个文件),例如:

# ssh-keygen -T moduli-2048 -f moduli-2048.candidates

每个候选素数默认都要通过 100 个基本测试(可以通过 -a 选项修改)。
DH generator 的值会自动选择,但是你也可以通过 -W 选项强制指定。有效的值可以是: 2, 3, 5

经过筛选之后的 DH groups 就可以存放到 /etc/ssh/moduli 里面了。
很重要的一点是这个文件必须包括不同长度范围的模数,而且通信双方双方共享相同的模数。


文件
~/.ssh/identity
该用户默认的 RSA1 身份认证私钥(SSH-1)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/identity.pub
该用户默认的 RSA1 身份认证公钥(SSH-1)。此文件无需保密。
此文件的内容应该添加到所有 RSA1 目标主机的 ~/.ssh/authorized_keys 文件中。

~/.ssh/id_dsa
该用户默认的 DSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/id_dsa.pub
该用户默认的 DSA 身份认证公钥(SSH-2)。此文件无需保密。
此文件的内容应该添加到所有 DSA 目标主机的 ~/.ssh/authorized_keys 文件中。

~/.ssh/id_rsa
该用户默认的 RSA 身份认证私钥(SSH-2)。此文件的权限应当至少限制为"600"。
生成密钥的时候可以指定采用密语来加密该私钥(3DES)。
ssh(1) 将在登录的时候读取这个文件。

~/.ssh/id_rsa.pub
该用户默认的 RSA 身份认证公钥(SSH-2)。此文件无需保密。
此文件的内容应该添加到所有 RSA 目标主机的 ~/.ssh/authorized_keys 文件中。

/etc/ssh/moduli
包含用于 DH-GEX 的 Diffie-Hellman groups 。文件的格式在 moduli(5) 手册页中描述。

2008年9月7日星期日

神族的魔法与科技


召唤执政官
消耗:
  

  在极度危险的情况下,高级圣堂武士可以牺牲自己然后融合成一个强有力的精神实体:执政官。
  

  只要选中了两个圣堂武士,就会出现一个召唤执政官的选项。一旦圣堂武士开始形成执政官了,这个过程就无法逆转了。

召唤黑暗执政官
消耗:
  

  黑暗圣堂武士和它们的高级圣堂武士兄弟们一样,也可以牺牲自己通过精神融合形成黑暗执政官。这些等离子体的化身的能力远远超过了普通的执政官,虽然它们无法进行物理攻击,但是别的能力足以弥补这个不足有余。

  同时选中两个黑暗圣堂武士后,就有选项可以召唤黑暗执政官了。一旦黑暗圣堂武士开始形成黑暗执政官,过程就无法逆转了。

离子风暴
消耗: 75
范围: 9
  

  神族的精神能力极强,它们甚至可以利用精神力量去影响别的生物形态。只要经过严格的训练,高级圣堂武士就可以学会把精神能量形成的小块能量合成为完全由精神能量酿成的风暴,这场风暴可以让低等生物的精神发生分裂。一次离子风暴可能会消灭所有范围之内的生命。

  离子风暴对建筑没有效果。
  如果高级圣堂武士选择在自己头顶施展这个法术,那连自己都可能被消灭。
  离子风暴的作用不能互相叠加,在同一区域,同一时间没有必要施展好几次离子风暴。
  离子风暴无法伤害处于静态力场内的部队。
幻觉
消耗: 100 范围: 7   

  曾经谣传有些高级圣堂武士学会了一种神奇的能力,它们可以复制别的生物。但是这些幻象并不是实际存在的,它们可以用来吸引对手的火力或者迷惑敌人的部队。

   幻觉能力制造的幻象和真实的生物是完全一样的——不管这个生物是友军或者别的部队——但是幻象除了五种基本能力外(移动,停止,攻击,巡逻,降落)什么 都不能干。你可以命令幻象进行攻击,但是它的攻击并不能给对方带来任何伤害。幻象最多能存在180秒,而且无法使用支援和控制的命令。如果对幻象施展了任 何一种特殊能力,它就会立即消失。但是,如果对它们进行普通攻击,它们在生命点耗尽之前始终都不会消失,一旦生命点耗尽,它们就消散了。

召唤
消耗: 150

  运输机是神族地面部队的主要运输工具,但是近来神族又发现有一种能力可以快速地传送更多的部队到战场上。召唤能力可以在时空中形成一个裂缝,而只要是己方的部队都可以进入这个时空漩涡中,然后在出现在使用召唤能力的仲裁者边上。

  召唤可以打开一个5*5大小的虫洞,然后把所有这个范围内的友军部队召唤到别的地方。

  你不能召唤盟军的部队。

  你不能把地面部队召唤到它们无法站住的地形上。也就是说,你不能把地面部队召唤到水上,岩浆等地形上。 静止力场
消耗: 100 范围: 9   除了可以使时空变形传送部队之外,一些仲裁者还可以拉长时空中的离散空间产生静止的力场。任何被这些静止力场困住的部队都无法和外界进行交流,无论对友军还是敌军,效果都是同样的。陷入静止力场的部队无法移动,也无法攻击。而且不受任何伤害和特殊能力的攻击。

  所有处于3*3范围内的部队都会被静止力场困住。一旦被困住了,这些部队就不会再受到伤害,也无法移动,攻击或者使用特殊能力。效果可以持续大约40秒。

反馈
消耗: 50 范围: 10   

  所有的黑暗执政官的能力都来自于对精神能量的操纵。它们对这种技术的掌握非常精通,甚至可以影响到别的生物的能量。黑暗执政官可以产生一种反方向的效果,使得敌人的攻击反击到自己身上。

  反馈的法术需要确定一个目标,一旦对某个部队施展了这个法术,这个部队就首先失去所有的魔力点数,并且受到和失去的魔力点数同样大小的伤害。

精神控制
消耗: 150 范围: 8   

黑暗执政官可以施展这个法术来控制任何生命单位。这个法术消耗150点魔法,使用这个法术的时候会消耗黑暗执政官的能量护罩。

大漩涡
消耗: 100 范围: 10   

  所有的生物都有思想,这些思想就可以被黑暗执政官用来改变和重塑。黑暗执政官的强大精神能量可以让一群攻击者瞠目结舌。

  只要处于这个法术的影响区域(和诱捕能力的影响范围一样)之内,所有的有机体单位都会眩晕几秒钟。

Javascript compressed压缩

Javascript压缩工具(Javascript compressed,Js压缩)
====================================================
2007年08月01日 星期三 上午 11:50




怎么压缩Js?为什么要压缩Javascript? Javascript compressed/crunched

开发Ajax除了自己要写js代码外,同样也免不了要使用其它第三方js库,是否该为JavaScript减肥?

当你提高了用户体验,做出了很绚丽的效果而欣喜的时候,是否想过优化一下JS的效率,比如微软的live,其中的js做了压缩处理。JS的速度分为两种, 下载速度和执行速度。今天就先来说说下载速度。要想js的下载速度快,就需要尽量减小js文件的大小。这里我们可以使用一个工具 ESC(ECMAScript cruncher)来帮我们完成这个工作,不过这个工具只能在Windows下使用。到 http://www.saltstorm.net/depo/esc/introduction.wbm?pod=js 下载 ESC.zip ,解压后看看它的帮助文档。很简单。



ESC Introduction

ESC is an ECMAScript pre-processor written in JScript, enabling an unlimited number of external scripts to be compressed/crunched into supertight, bandwidth-optimized packages. Featuring several compression-techniques such as comment removal, whitespace stripping, newline stripping and variable substitution ESC can reduce the overall size of your code with up to ~45%. Single, multiple scripts and even directories with scripts can be merged together at the compression level you decide. The processed output can later be appended or written to a file, or piped to another application for further processing via STDOUT.



ESC do NOT support crunching of inline scripts. So any attempt passing HTML, ASP, JSP, PHP or other equivalent documents to ESC is done at your own risk.



ESC supports four levels of compression, where a higher level equals higher compression. Beware though that levels >2 requires your code to be syntaxically perfect or ESC will punish you by producing a broken and useless output.



The compression ratio should hit around 25% using the default compression level on a vanilla looking script, but results as high as ~45% can be achieved depending on the script's design / your style of writing code.



ESC's compression engine is intelligent in the meaning that it has language syntax, statement and keyword awareness and it *knows* about native objects and members provided by the most common scripting hosts. This knowledgebase can easily be extended by pluggin in userdefined maps with additional information to further gain control of the crunching procedure. During processing following things are taken into account :



String and RegExpression read-ahead

Jscript Conditional compilation statements and variables

ECMA-262 Core language definitions (ECMAScript)

Intermediate DOM's (level 0) and DOM level 1

MS Jscript specific objects/methods

Netscape/Mozilla/Opera specific objects/methods/properties

MS WSH (Windows Scripting Host) 1+ native objects



压缩级别分为5种,从0到4



Level 0 :: No compression



Level 1 :: Comment removal



Level 2 :: Whitespace removal



Level 3 :: Newline removal



Level 4 :: Variable substitution



在WINDOWS命令行下执行



cscript ESC.wsf -ow menu2.js menu.js将会把menu.js按照js压缩级别2来压缩(默认js压缩级别为2)为menu2.js



cscript ESC.wsf -l 3 -ow menu3.js menu.js将会把menu.js按照js压缩级别3来压缩为menu3.js



需要注意的是,js压缩级别4会把变量名修改,如果你的js中用到了全局变量或者类的话,就不能使用该压缩级别了,否则其它使用你的js的文件可能会无法正常运行。



试了一下,把yui的menu.js压缩了一下,对应的级别和压缩率分别如下:



js压缩级别1:压缩率44.41%



js压缩级别2:压缩率62.82%



js压缩级别1:压缩率64.93%



原来130多K的js文件压缩后也就40多K,看来还是挺有用处的。





另外还有一个小工具 jsmin 也可以压缩,不过没有ESC的level选项,看了一下好像压缩效果类似于ESC的level3.济南大学的一些老师写了个jsmin的图形界面程序 JsMinGUI ,使用起来更加方便。:-)



Dojo项目组也提供了一个工具,shrinksafe可以通过 http://alex.dojotoolkit.org/shrinksafe/ 在线的上传要压缩的文件,处理完毕后可以保存到本地,另外shrinksafe还提供了一个本地运行的版本,需要jre1.4的支持。



Ps:对于一些压缩的代码,在阅读时可以用 JavaScript Code Improver 来进行格式化。看看它主页上的一个例子:

javascript压缩代码示例

原来的代码:

程序代码 程序代码 <script language="JavaScript">var i=0,s="",k=0;function foo(){for(j=0;j<10;j++){for(i=0;i<10;i++){s="string1";k=Math.floor(Math.random()*10);}for(i=20;i>9;i--){s="string2";k=I;}}}</script>



格式化后:

程序代码 程序代码 <script language="JavaScript">

var I = 0, s = "", k = 0;

function foo()

{

for(j = 0; j < 10; j++)

{

for(I = 0; I < 10; i++)

{

s = "string1";

k = Math.floor( Math.random()*10 );

}

for(I = 20; I > 9; i--)

{

s = "string2";

k = I;

}

}

}

</script>





js压缩,巨NB的dHTML特效. 来自:

http://hometown.aol.de/_ht_a/memtronic/MemTronic_CruncherCompressor_v09g.html



JS压缩示例样本: JS压缩示例样本





更多的JS压缩器以及混淆器

http://dean.edwards.name/packer/ 在线Js压缩

A Online JavaScript Compressor/Obfuscator version 2.0.2

Also available as a .NET application

开源下载: http://dean.edwards.name/download/#packer

JS压缩器帮助: http://dean.edwards.name/packer/usage/

http://dean.edwards.name/packer/usage/sample.html



http://hometown.aol.de/_ht_a/memtronic/



JavaScript Compressor/Obfuscator Demo:

http://www.brainjar.com/js/crunch/demo.html



JavaScript Code Improver:

JavaScript Code Improver Download





前面提到的Javascript压缩,都是采用删除注释,删除多余空格,替换字符等方式进行的,还有一种通过服务器的配置来实现Js静态压缩的方法:

关于JavaScript的gzip静态压缩方法

传统的JS压缩(删除注释,删除多余空格等)提供的压缩率有时还是不尽不意,幸亏现在的浏览器都支持压缩传输(通过设置http header的Content-Encoding=gzip),可以通过服务器的配置(如apache)为你的js提供压缩传输,或是appfuse中使 用的GZipFilter使tomcat也提供这种能力



现在的问题是这种动态的压缩会导致服务器CPU占用率过高,现在我想到的解决辨法是通过提供静态压缩(就是将js预先通过gzip.exe压缩好)



一.下面描述在tomcat中的应用



1.将prototype.js通过gzip.exe压缩保存成prototype.gzjs

2.设置header,我编写了一个简单的AddHeadersFilter来将所有以gzjs结尾的文件增加设置header Content-Encoding=gzip

web.xml中的配置

引用内容 引用内容 <filter>

<filter-name>AddHeaderFilter</filter-name>

<filter-class>

badqiu.web.filter.AddHeaderFilter

</filter-class>

<init-param>

<param-name>headers</param-name>

<param-value>Content-Encoding=gzip</param-value>

</init-param>

</filter>



<filter-mapping>

<filter-name>AddHeaderFilter</filter-name>

<url-pattern>*.gzjs</url-pattern>

</filter-mapping>



测试prototype.js是否正常的代码

程序代码 程序代码 <html>

<head>

<!-- type="text/javascript"不可少,有的浏览器缺少这个不能运行 -->

<script src="prototype.gzjs" type="text/javascript"></script>

</head>

<body>

<input id="username" name="username" value="badqiu"/><br />

<input id="email" value="badqiu@gmail.com"/>

<script>

<!-- 测试prototype的方法是否正常-->

alert($F('username'))

</script>

</body>

</html>



在Apache httpd中可以直接通过在httpd.conf增加AddEncoding x-gzip .gzjs来映射.gzjs文件的header



二.相关压缩率数据

1. prototype.js 1.5.0_rc0原始大小56KB,未经任何处理直接使用gzip压缩为12KB,总压缩率79%

2. 通过js压缩工具压缩过的protytype.js为20KB,使用gzip压缩为10KB,总压缩率为83%

3. 实际项目中的多个js合并成的文件 439KB,直接通过gzip压缩为85KB,总压缩率81%

4. 439KB经过js压缩为165KB,再经过gzip压缩为65KB,总压缩率86%



基本上你都可以忽略js压缩工具的压缩率,直接使用gzip压缩



gzip下载地址 http://www.gzip.org

tomcat的压缩配置示例下载地址: http://www.blogjava.net/Files/badqiu/gziptest.rar



其主要是利用服务器自带的动态压缩功能 传输时压缩数据流.



Javascript compressed,Js压缩,javascript压缩,js压缩工具,js压缩合并,js文件压缩