node.js-高效的javascript evented I/O framework
node.js是最近时期比较热门的主题。
这个基于V8的javascript io framework,由于是evented,性能很高,符合当前低炭高效的主旋律。
对于那些有大量并发链接的场景,不妨尝试一下。
node.js上手非常容易,因为javascript估计几乎每个web开发人员都或多或少知道。
node.js也证明了server side js是大有前途。当然,这里的所指的js开发者应该是那些真正熟悉
javascript的开发者,对于那些仅仅当作前端脚本的人来说,需要补课的地方还是非常多的。
在node.js基础上,派生了很多的framework和许多有趣的东西,这里列出一些node.js相关的资料:
Non-blocking I/O, Event loops and node.js
Firefox memory.cache的烦恼
今天用jQuery作一个界面发现了firefox的一个问题,操作过程很简单:
1个form,用户先填写一些基本信息,保存,服务器返回taconite的response,会打开原来隐藏的
扩展属性面板,这样用户可以填写那些关联的属性,上传附件等等。当保存时,服务器端返回的taconite
会设置一个hidden field(id)的值为刚才保存的记录的主键,这样,当提交其他的关联数据时可以
附带这个id。
一切都很好,但是当我刷新的时候发现了奇怪事情,id值没有被复位,仍然是刚才传回的id,我用firebug发现,
html中的value是空的,但是用$(‘#id’).val()返回的值竟然非空!
这个现象上周作passport时候也出现,不过我是在document.ready里清空了这个值。也就没在意。
今天又出现,不由让我奇异,此外,由于使用的smarty模板和js是复用的(新建和编辑用的是同一个),
没有办法全部重置为空。
我作了下测试,当装载时调用form的reset方法,其他的field都被重置回去了,但是id这个hidden field
没有变化。
反复测试,发现:
如果是command+R,或者点击刷新,上面现象重复。
如果是shift+command+R,或者地址栏旁边的点击转到,上述现象消失。
googling 了一下,发现很多人有同样的困惑,尤其是一些flash,进度条经常无法正常显示。
很多人给出了各种答案,但是很多人又都否定了那些答案的有效性。
不过在一个老外的blog上,发现了一个线索,他指出,这是FF1.5的一个“特性”,即所谓的memory cache。
FF1.5以后增加了一个特性,它将当前页面很多东西都缓存到内存中,当你back-forward操作的时候,直接
会从内存中恢复。这也就是为什么虽然html的value是空,但是dom树中的值非空。
如何解决呢?
根据FF的说明,以下情况下不会使用memory cache:
1.定义了unload事件处理
2.设置了”cache-control: no-store”
3.设置了”cache-control: no-cache” 且站点为HTTPS.
4.页面未完全载入,用户就离开当前页面
5.使用页面所属的frameset不允许缓存
6.the page is in a frame and the user loads a new page within that frame (in this case, when the user navigates away from the page, the content that was last loaded into the frames is what is cached)
严重后果:
如果页面是从cache中载入的,那么所有的Inline script和onload事件将不被运行。
如何解决呢?为了使用这个所谓的新特性,FF1.5中为此增加了2个新的event:
###pageshow event
pageshow event同onload事件,不过即使从cache中load的,也会执行。
当第一初始化时,pageshow会在onload后触发,不过带有一个event.persisted=false的参数用户指示
当前是第一次运行。
###pagehide event
同unload一样,不过由于定义unload后无法使用memory cache,因此你可以定义pagehide来作同样的事情,这样还能
保证cache有效。
以上就是FF1.5的这个新特性。
最后的结论,是否该使用这个特性?
我的回答是NO!
整这么多特性,还不够累的。何况,这种违反W3C的特性实在是不可取。
所以,我干脆用:
“cache-control: no-store”
直接将它扼杀掉,
于是,世界终于太平了。
Google gears
http://gears.google.com/
http://code.google.com/apis/gears/
Google gears 可以让你离线状态下使用web 程序,比如google reader,notebook,
原先的web程序可以通过gears api读取、存储数据到本地,并且存储的内容是一个数据库,可以检索的,
同时完全支持异步执行操作。
当安装gears扩展后,在使用支持的程序比如 google reader时,会出现一个绿色的小箭头,点击会进入脱机
模式,此时gear会自动下载相应的数据和代码。无需网络,你也可以查看你订阅的rss了。
gears的发布,感觉google越发挑战ms的地位,当即便脱机也可以使用google的office产品,还需要安装ms office吗?
对于我们开发者来说,gears可以和applo联合使用,或者直接应用在你的web程序中,很快,你的web app可以支持offline了,我会近期尝试一下。gears可以让你的web应用直接扩展到桌面,听起来很酷啊。
jQuery的2则重要新闻
- jQuery支持OpenAjax标准,jQuery将可以和其他支持该标准的lib良好协作 – yui-ext的作者和jQuery作者将协作,yui-ext 1.0将支持jQuery! 最后一条新闻是最让人兴奋的,有了Ext的组件支持,加上jQeury的简介强大的特性,几乎没有人能抗拒这种诱惑,呵呵,本来我在doggy中将使用jQuery,那时还羡慕Ext,有点犹豫是否该用yui,后来最终还是选中jQuery,现在看来,选择是没错的。 http://jquery.com/blog/2007/02/19/jquery-and-jack-slocums-ext/
Firebug1.0beta
一直用firebug0.4,由于T41崩溃,重装系统后我把FF升级到了2.01,firebug还是0.4x,刚才偶尔访问了它的主页,发现已经升级到1.0beta,下载后发现改进很大,简直是一个可以当可视化的编辑器了,调试css非常爽了。1.0增加了很多实用的功能,比如net面板,可以查看当前页面各个元素的下载时间,每个图片、文件的请求的Http的Request和Response,哎,有了firebug,可以省去原来要装的一大堆extension。
此外,还有一个firebug lite,用于在IE,opera,safari上面模拟实现firebug的功能,正好今晚上要在safari上测试一下,挺及时的。
UPDATE:
Firebug1.0已经正式发布
JQuery之美
Jquery是我所见过最简洁和优雅的ajax框架。相比prototype,我更喜欢jquery。
现在对dojo已经逐渐厌烦,虽然dojo的mailinglist仍然关注,不过后面的项目我不会再用了,当然dojo是非常非常优秀,
我也用它作了很多有趣的事情。但,当发现了jquery,一切都变了,哈哈。
JQuery可以让我不再到页面中增加更多onclick等的js代码,真正做到了逻辑和页面的分开。尤其是在采用xhtml/css的模版后,
页面中可以没有js代码的痕迹,页面制作和代码编写可以分开了。在SEO上也可以做的很好,让程序支持REST方式更加简单。
我做了个小测试,用户点击可以用ajax返回页面的局部,直接输入链接则返回整个html页面。ajax应用中bookmarks的问题也
可以解决的比较好。
2个js相关的项目
javaeye的这个帖子引出2个有趣的项目,和js相关的:
http://jsvm.org/
2个项目的作者都是国人,而且都具有java和js的多年经验,很不错的。
相对而言,我对后者颇有兴趣,不过暂时不会在eps中使用。jsvm看起来也不错,已经把yahoo ui库移植进去了,但是目前dojo已经足够我们使用了,也不会考虑的。即便如此,如果做快速的东西,可以考虑jsvm版本的yahoo ui.