浏览模式: 标准 | 列表

 用过 gulp 的用户可能都知道 gulp-concat 和 gulp-uglify 这两个插件,一个用于合并文件,另一个用于对 js 进行语法压缩。虽然通过文件合并和语法压缩可以有效的减小 js 文件的体积,但是对于比较大的 js 文件仍然还有很大的空间可以继续进行压缩。为了达到这个目的,我做了这个 gulp-lzmajs 插件,并在实际应用中将仅使用 gulp-concat 和 gulp-uglify 压缩之后有 60 KB左右的 js 文件通过 gulp-lzmajs 进一步压缩到只有 20KB 左右。对于更大的文件,当然效果会更好。

» 阅读全文

10月
28

用Lazarus重写了JsMinGUI

原来用Delphi重写过JsMinGUI, 上个月用Lazarus又重写了一边,因为我现在多了一台MacBook,所以需要一个可以在Mac OS X上也可以用的版本,用Lazarus重写之后,可以编译成 Windows、Linux、Mac OS X 甚至 WinCE 上的版本,现在 JsMinGUI 也跨平台啦,呵呵。而且这个版本还增加了多国语言支持。

Linux版本下载:PHPRPC高级交流群(48855729)共享

WinCE 版本下载:PHPRPC高级交流群(48855729)共享

Mac OS X 版本下载:PHPRPC高级交流群(48855729)共享

» 阅读全文

最近要给 PHPRPC 站做文档,打算使用 Wiki 系统,为了便于网站搬家和方便用户下载文档,所以选择了 TiddlyWiki,TiddlyWiki 是一个纯 HTML 的 Wiki 系统,而且支持插件,超级棒!不过从网上找了 2 天,也没有找到合适的代码加亮插件,有一个 Plugin: Syntaxify 只支持 css,js 和 xml,而且效果还不是很理想。正好想到有个 dp.SyntaxHighlighter 项目是纯 js 实现的代码加亮库,于是就决定用它来做一个 TiddlyWiki 的代码加亮插件了。我搜集了目前我能找到的所有支持用 dp.SyntaxHighlighter 加亮的语言文件(shBrush*.js),所以这个插件支持的语言比 dp.SyntaxHighlighter官方提供的还要多,支持的语言(包含别名)有:

as, as3, actionscript, bash, sh, batch, dos, coldfusion, cf, cpp, c, c++, c#, c-sharp, csharp, css, delphi, pascal, java, js, jscript, javascript, lua, mxml, perl, php, py, python, ruby, rails, ror, sql, vb, vb.net, xml, xhtml, xslt, html

» 阅读全文

正式版:

修正了对于无 head 标签的网页无法跨域调用的问题。

Beta 10 Update:

增加了 getEncryptMode 方法。
纠正了几个 IE5 兼容处理的 bug。
并使用 JSA + LZ77 混合压缩方式,进一步减小了压缩版本的大小。
进一步优化了 base64 编码程序。
隐藏了 freeEval 函数。
修正了无法反序列化未声明类的对象的问题。
改善了对 Pocket IE 的支持。
将支持 IE 5 的和不支持 IE 5 的分开打包压缩。不支持 IE 5 的版本体积更小。
取消了对 VBScript 中的数组和日期的支持。
将 iecompat.js 改名为 compat.js。
增加了对 VBScript 中日期时间类型的支持。
不再需要给非 IE 浏览器提供 VBArray 对象。
序列化函数不再附加到对象上面。
将日期序列化和反序列化做了修改,使其跟 PHPRPC for PHP 中的 PHPRPC_Date 类兼容。
增加了对 PHP6 中字符串转义序列化的反序列化支持。
压缩版本使用了 JSA 1.0alpha 压缩,感谢金大为大大提供这么好的工具!
重构了几乎所有代码,实现了私有函数的封装,提高了执行效率。
优化了 Base64 编码实现。并且将它们改名为 btoa 和 atob,这两个是 Gecko DOM 中定义的名字。因此对于 Gecko 系列的浏览器(Firefox/Mozilla 等)直接使用内置的 Base64 编码方法,速度有了质的飞跃。
增加了对 Date 类型对象的序列化和反序列化,可以与最新版本的 PHPRPC for PHP、Java 等服务器直接交换该类型数据。
修改了方法编号的生成算法,速度更快,而且可以保证不会重复。
对公开方法增加了注释。
增加了加密传输过程中对 Cookie-less 会话支持。

Beta 9 Update:

对 IE 浏览器的特殊支持不再依赖条件编译,并将其单独放到 iecompat.js 文件中(压缩版本中已包含该文件,无需单独加载)。
暂时取消了对没有 Cookie 的会话支持,但同一个页面的不同的客户端对象仍然可以在共享会话的情况下正常加密通讯。
改用金大为提供的JSA对代码进行压缩。

Beta 8 Update:

修改了一些私有成员和私有方法的命名。
为 PHPRPC_Error 增加了 getMessage 和 getNumber 方法。
将 javascript 中的 Object 对象改为以 Array 方式序列化。

Beta 7 Update:

修正了 beta 6 中的一些小问题。
对部分代码进行了重构。
完善了错误处理。
完善了 url 中基本认证的用户名密码的处理。
增加了 setTimeout 和 getTimeout 方法,可以用来设置或获取方法执行的超时时间,单位为毫秒(1/1000 秒),超时以后将自动终止该调用。超时时间默认为 30 秒。如果要禁用超时,将参数设为 0 或 null 即可。
增加了 getReady 方法,与原来的 ready 属性作用相同。

Beta 6 Update:

当创建 PHPRPC_Client 对象时,可以通过设定第二个参数来设置远程方法列表,该参数为一个数组,数组的每一个元素为远程方法名。当设置该参数后,将不再从服务器上获取远程方法列表,可以减少一次跟服务器的通讯。同样,useService 也增加了第四个参数,该参数与创建 PHPRPC_Client 对象时的第二个参数功能相同。
修正了 beta 5 以及之前版本中,跨域加密传输的一个 bug。
对 IE 上创建 XMLHttpRequest 对象作了优化。
增加了不需要 Cookie 的会话支持,同一个页面的不同的客户端对象拥有各自独立的会话(该能力需要 PHPRPC 3.0 服务器的支持)。

Beta 5 Update:

增加了 abort 方法,当不带参数调用时,将结束所有的尚未完成的调用请求。
为 invoke 方法(或者直接通过远程方法名调用)增加了返回值,返回值为该方法的唯一标示,该标示可作为 abort 方法的参数,来结束掉指定的调用。

Beta 4 Update:

修正了大量连续发出请求时,引起 Firefox 产生 Exception… “Component returned failure code: 0×80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]” nsresult: “0×80040111 (NS_ERROR_NOT_AVAILABLE)”… 错误的问题。

Beta 3 Update:

当未指定 RPC 服务器而调用 useService 方法时,不再弹出错误,而是返回 PHPRPC_Error 对象。
当客户端无法使用 XMLHttpRequest 对象时,也不再弹出错误,而直接使用 js 方式。

Beta 2 Update:

修正了 Beta 1 中的多个 bug。
优化了部分代码。

Beta 1 Update:

实现了 PHPRPC 3.0 协议升级描述中的内容。
实现了 PHPRPC 3.0 for JavaScript Client API Draft 中的所有接口。
增加了对带 URL 参数的服务器地址的支持。
修正了同时发送多个请求时可能引起冲突的问题。
与 PHPRPC 2.1、2.0、1.1 的服务器端相兼容。

下载:http://www.phprpc.org/zh_CN/download/

» 阅读全文

以前发布的 PHPRPC 3.0 的 JavaScript 客户端 是通过 script 标签来支持跨域调用的,因此限制了参数的长度不可能太长,并且如果页面不是 UTF-8 编码时,也不能跟服务器进行交互,原因是 script 没办法指定单独的 HTTP 头。前些日子发布的 ActionScript 3.0 版本的 PHPRPC 3.0 客户端是 通过 POST 来提交数据的,Flash 的跨域调用机制跟浏览器中的 XMLHTTPRequest 对象的跨域机制不同,Flash 的跨域调用限制可以通过在服务器端部署一个 crossdomain.xml 文件来进行限制。因此 ActionScript 3.0 版本的 PHPRPC 3.0 客户端是可以跨域的,而且服务器端还可以限制跨域的条件。前几天有位朋友建议我 给 JavaScript 跨域调用增加无参数长度限制的能力,他给出的方案是对 GET 请求分包传送,不过因为这种方法需要修改 PHPRPC 协议,目前的客户端和服务器端实现也都要作出修改才可以支持,而且就算实现了效率方面也不会很高,因此我突发奇想,如果在 JavaScript 中调用 Flash 的 ActionScript 3.0 的 PHPRPC 3.0 客户端不就既可以支持跨域,又没有参数长度限制了吗?而且因为 ActionScript 3.0 的执行效率比 JavaScript 高,所以,加密传输也会更快!ActionScript 3.0 里面跟服务器端交互是单独指定的 HTTP 头,因此也不会有页面非 UTF-8 编码时不能跟服务器交互数据的问题了。

于是,花了 2 天时间终于搞了一个跟原来 JavaScript PHPRPC 3.0 客户端使用方法相同的通过 ActionScript 3.0 跟 JavaScript 交互来实现的支持跨域无参数长度限制的 JavaScript PHPRPC 3.0 客户端。实现中当然遇到了一些问题,不过我单独写了一篇关于这些问题和解决办法帖子,这里就不罗嗦了。下面说一下这个 JavaScript PHPRPC 3.0 客户端跟原来的那个有什么不同之处:

1、新的这个 JavaScript 客户端需要在 HTML 的 body 插入 phprpc_flash.js 脚本(通过 script 标签来引入该文件),这段脚本不能放在 head 中,也不能放在 form 中。另外,要保证 phprpc_flash.js 中引用的 phprpc_client.swf 文件的路径是正确的。

2、都支持目前常见的浏览器,如:IE, Mozilla/Firefox,Opera,Safari 等。但是在非跨域的情况下,原来的 JavaScript 客户端对手持设备(例如 Pocket PC,SmartPhone,iphone 等)支持的更好,而新的这个 JavaScript 客户端因为需要 Flash9 的支持,在目前的手持设备上都不支持。

3、新的这个 JavaScript 客户端不支持 abort、setTimeout 和 getTimeout 这三个方法。因为在 ActionScript 3.0 版本的 PHPRPC 客户端里面也没有提供这三个方法。不过还好,这三个方法都是不常用。

4、在 JavaScript 中定义的对象,通过这个客户端传给服务器时,可能会变成 Hash 表(比如 PHP 中的 Array,Java 中的 HashMap,.NET 中的 HashTable),因为 JavaScript 跟 ActionScript 3.0 交互时,会在内部进行一次序列化和反序列化(Flash 本身处理的,而不是 PHPRPC 的序列化和反序列化)。

5、JavaScript 中的递归定义的对象,无法通过该客户端跟服务器通信,原因同第 4 条。因为 Flash 内部的这种 JavaScript 跟 ActionScript 3.0 之间的序列化和反序列化不支持递归对象。

今天把整个代码重写了一下,这次只使用 AS3 中的 URLLoader 来实现 POST 数据,而不再直接使用 AS3 版本的 PHPRPC 客户端,并且在非跨域情况下,仍然使用 XMLHttpRequest 来提交数据,因此,原来列举的上面那些不同的问题,除了第一条之外,2、3、4、5 都已经解决,跟原来的纯 JavaScript 版本完全一致了。

下载地址请访问 PHPRPC 官方网站:http://www.phprpc.org

» 阅读全文