JS架构探讨-精彩討論进行中...
此前做过一个坦克大战小游戏,感谢大家热情回复,但从此中也发现前台开发人员水平参差,而且从接触到的同行可以看出,这方面大家的理解差距较大。
JS前景很好,2014年HTML5标准更新之后,在很长的时间内,她都会越来越流行,特别是在游戏横行,移动设备更新快,很多人又不愿意用各种软件把手机弄得半死不活的今天,JS在移动设备上可能可能首先打败flash,成为前端的一哥。
为什么要写此文?不可否认JS越来越流行,因为她灵活,什么样的水平都可以写出能实现功能的代码;这也突显出一个尖锐的问题:代码规范化。至于架构的重要性,我想不用多说,无非是规范代码、提高重用性、易扩展易维护。百度、新浪、豆瓣等都有自己的架构,今天在下分享一个DEMO,希望抛砖引玉,懂行的不要保留,分享是金;顺便把新浪架构PPT分享给大家。
个人对架构的理解,无非是分层和模块化,以下代码主要基于此理解。使用jQuery作为底层,模块为中层,功能为上层、模块的组合。我们的目的是用此框架,我们可以把注意力集中在模块开发上,以实现易扩展、易重用、规范化的目标。
待完善的地方有很多,比如针对每个页面独立一个配置文件(例如JSON),服务器端把此页面用到的JS合并压缩,以减少请求数,等,期待大家提出更多更好的建议。
切换用户引用登陆
高手!可不可以用异步请求的方式去请求js文件,回来之后eval一下。如下:不知道可行不?
该醒醒了.
,而是众生。
小弟再次提出呼吁,希望大家多多分享自己的想法,信息社会,分享是金,沉默是屎。 ,而是众生。
小弟再次提出呼吁,希望大家多多分享自己的想法,信息社会,分享是金,沉默是屎。
我曾经仔细的读过jsdk的源码。我只能说:如果他真的想把jsdk发展成一个通用的jdk的话。那么他第一步,应该摆脱对yui的依赖。第二步,我认为更重要的,是找一家有实力的民族企业。他的现状让我想起了5年前的html5。现在html5的成功除了他本身高质量的规范,更重要的是他的后台是google和apple。jdk之所以成功,不是因为一开始代码就写得很完美(java1的awt等组件可以看出来)。而是sun公司的整体战略,商业眼光及宣传造就了这一切。而投资者看到jsdk是必须依赖于yui的时候,还有谁有兴趣呢?没有人希望自己投资的产品受制于人。一个成功的产品,他本身的质量固然重要,但是更重要的是,他的商业运作手段。而商业运作并非靠个人就能完成。需要强大的后台。
p.s jsdk其他的代码的确是非常的优秀,是我看到过的最好的代码,虽然还有些思路上的问题。。 42 楼 fch415 2011-05-23 我作JSDK的思路,可以概述一下。
1)如果我在六年前就开始写JSDK的话,大概会考虑一切代码自己写。现在暂时不会打算改写YUI的dom-event体系,因为它写得已经足够好。没有必要所有轮子自己造。
而且,JSDK会集成更多优秀的第三方类库作为实现(只要我对外封装提供标准API即可)
2)JSGF只是JSDK的一小部分,只是为了实践我的JS2D才发展起来的。不论是写游戏还是写组件,JS2D这套图形绘制API才是核心API体系。
3)商业化推广确实可以做到:“把狗屎当作黄金卖”(转自销售语录)。但我认为更重要的是:产品质量 + 时间。
现在的API仍在高度发展变化中,哪怕我花三年时间稳定API也没关系,我不会急于正式发布JSDK或写文档推广。
我相信真正高质量的代码是来自于我充分的自由创造,而不是来自商业契约的约束与驱使。 43 楼 rainsilence 2011-05-23 fch415 写道我作JSDK的思路,可以概述一下。
1)如果我在六年前就开始写JSDK的话,大概会考虑一切代码自己写。现在暂时不会打算改写YUI的dom-event体系,因为它写得已经足够好。没有必要所有轮子自己造。
而且,JSDK会集成更多优秀的第三方类库作为实现(只要我对外封装提供标准API即可)
2)JSGF只是JSDK的一小部分,只是为了实践我的JS2D才发展起来的。不论是写游戏还是写组件,JS2D这套图形绘制API才是核心API体系。
3)商业化推广确实可以做到:“把狗屎当作黄金卖”(转自销售语录)。但我认为更重要的是:产品质量 + 时间。
现在的API仍在高度发展变化中,哪怕我花三年时间稳定API也没关系,我不会急于正式发布JSDK或写文档推广。
我相信真正高质量的代码是来自于我充分的自由创造,而不是来自商业契约的约束与驱使。
你太理想化了。要实现自己的目标,很多时候就需要折中,站在不同的角度,不同的高度。狗屎虽然能在短期内卖出黄金的价格,但是是没有生命力的。
我曾经参与过一些有潜力的framework的架构,也曾经看到过一大批代码写的很好的国产framework最后都没有得到推广。为什么现在struts仍然是用的最多的framework?为什么webwork的思想如此之好,最后改名为struts2?成功的案例背后无处不在的是成熟的商业运作。产品质量 + 时间是很重要的。但是现实是,时间永远是不够的,而质量是不能差的。机会是留给有准备的人,但是机会通常来临的时候,你的准备通常都不会太充分。那你怎么办?任机会溜走?
p.s. jsdk在google后,我很惊异的得出了两种查询结果。java sdk和js dk。而你起名为jsdk2毫无意义。。因为1)jsdk并不成功。2)容易和其他产品混淆。为了你的framework的生命力,建议你改名。我的话不好听,请见谅。 44 楼 danny.chiu 2011-05-23 fch415 写道我作JSDK的思路,可以概述一下。
1)如果我在六年前就开始写JSDK的话,大概会考虑一切代码自己写。现在暂时不会打算改写YUI的dom-event体系,因为它写得已经足够好。没有必要所有轮子自己造。
而且,JSDK会集成更多优秀的第三方类库作为实现(只要我对外封装提供标准API即可)
2)JSGF只是JSDK的一小部分,只是为了实践我的JS2D才发展起来的。不论是写游戏还是写组件,JS2D这套图形绘制API才是核心API体系。
3)商业化推广确实可以做到:“把狗屎当作黄金卖”(转自销售语录)。但我认为更重要的是:产品质量 + 时间。
现在的API仍在高度发展变化中,哪怕我花三年时间稳定API也没关系,我不会急于正式发布JSDK或写文档推广。
我相信真正高质量的代码是来自于我充分的自由创造,而不是来自商业契约的约束与驱使。
感謝fch415大哥抽时间与我们分享您的JSDK思路。
个人以为YUI的dom-event体系使用过于复杂,远不如jQuery,实际上YUI3也越来越像jQuery了。一个好的框架应该使用简单,学习成本低。
不知道您的团队有多少人,如何学习您的思路,期待您为我们大众分享下您的设计理念,既要出世,亦要入世嘛。
顺便问下,您的JS2D图形绘制API是基于canvas实现的吗?大概有哪些API,都可以做什么撒? 45 楼 fch415 2011-05-23 To rain:
——更重要的是,是找一家有实力的民族企业
都什么年代了,写开源项目还要投靠一家企业?直言:您的观点无法苟同。
另外,就算是找靠山,我也不看好国内任何一家大公司的框架领导力(我本人也在一家大的互联网公司待着),无论是Java框架还是JS框架。
他们能把自个的框架(主要就是些工具+小组件)写写好,就谢天谢地了。
如果让我去领导他们,他们思路和眼界足以让我头疼。罢了。
这也是为什么国内外很多优秀开源框架往往来自于个人而非企业的原因之一。
To danny:
1)YUI的dom-event最为精炼、简单好学,功能也最弱(相比于jQuery)但足够用了。YUI完全面向OO,最适宜搭建对象体系(这也是Ext作者的早期选择)。
而jQuery的思想注定了它的面向DOM编程的风格,也注定了它不适合搭建复杂对象体系,适合于作为一种工具库(而且是一种引诱低劣代码的工具库)。
要知道写游戏或写组件都是足够复杂之事,必然需要构建一套稳健的对象体系,最最需要框架层提供的完全面向对象的支持。jQuery这种工具库是难以胜任的。另外,YUI3并没有越来越像jQuery了,而是提供了更多的DOM+CSS操作API耳。
在我(以及众多Java工程师的)眼里,YUI的思想非常OO。这种在Java领域司空见惯的OO思想,在JS框架领域是如此的难得和耀眼。远远胜过jQuery(Prototype等)那种面向函数或DOM的框架。这可不是靠jQuery庞大Fans群所能得来的赞誉。
就像围棋一流国手们追求的是棋道,以留下名局(棋谱)为无憾,而不是以追求谁拿的奖金最多、谁的Fans多、谁的转播人数最高。
优秀的程序员追求的是编程之道,代码之美,而不是找个靠山、伙同风投、骗个名利。
2)——一个好的框架应该使用简单,学习成本低。
真正简单好学的是组件对象的使用,而不是如何复杂高超的操作DOM。
这就是面向对象和面向DOM的本质区别。
操作一个对象的API,而不是操作DOM+CSS(熟悉大量结构化的潜规则),哪一个封装性更好?更为易学?更易读易维护?
最后说一句,倒是很多jQuery的Web组件(的API)越来越像YUI/Ext的组件了。
3)JS2D图形绘制API不是基于HTML5的canvas实现的。虽然叫Canvas类。
如果未来要提供高级绘图能力,我可能要考虑集成canvas标签对象。
但目前矢量图形绘制与旋转外等,这些游戏用不到的功能,暂时没必要集成。 46 楼 rainsilence 2011-05-23 fch415 写道To rain:
——更重要的是,是找一家有实力的民族企业
都什么年代了,写开源项目还要投靠一家企业?直言:您的观点无法苟同。
另外,就算是找靠山,我也不看好国内任何一家大公司的框架领导力(我本人也在一家大的互联网公司待着),无论是Java框架还是JS框架。
他们能把自个的框架(主要就是些工具+小组件)写写好,就谢天谢地了。
如果让我去领导他们,他们思路和眼界足以让我头疼。罢了。
这也是为什么国内外很多优秀开源框架往往来自于个人而非企业的原因之一。
To danny:
1)YUI的dom-event最为精炼、简单好学,功能也最弱(相比于jQuery)但足够用了。YUI完全面向OO,最适宜搭建对象体系(这也是Ext作者的早期选择)。
而jQuery的思想注定了它的面向DOM编程的风格,也注定了它不适合搭建复杂对象体系,适合于作为一种工具库(而且是一种引诱低劣代码的工具库)。
要知道写游戏或写组件都是足够复杂之事,必然需要构建一套稳健的对象体系,最最需要框架层提供的完全面向对象的支持。jQuery这种工具库是难以胜任的。另外,YUI3并没有越来越像jQuery了,而是提供了更多的DOM+CSS操作API耳。
在我(以及众多Java工程师的)眼里,YUI的思想非常OO。这种在Java领域司空见惯的OO思想,在JS框架领域是如此的难得和耀眼。远远胜过jQuery(Prototype等)那种面向函数或DOM的框架。这可不是靠jQuery庞大Fans群所能得来的赞誉。
就像围棋一流国手们追求的是棋道,以留下名局(棋谱)为无憾,而不是以追求谁拿的奖金最多、谁的Fans多、谁的转播人数最高。
优秀的程序员追求的是编程之道,代码之美,而不是找个靠山、伙同风投、骗个名利。
2)——一个好的框架应该使用简单,学习成本低。
真正简单好学的是组件对象的使用,而不是如何复杂高超的操作DOM。
这就是面向对象和面向DOM的本质区别。
操作一个对象的API,而不是操作DOM+CSS(熟悉大量结构化的潜规则),哪一个封装性更好?更为易学?更易读易维护?
最后说一句,倒是很多jQuery的Web组件(的API)越来越像YUI/Ext的组件了。
3)JS2D图形绘制API不是基于HTML5的canvas实现的。虽然叫Canvas类。
如果未来要提供高级绘图能力,我可能要考虑集成canvas标签对象。
但目前矢量图形绘制与旋转外等,这些游戏用不到的功能,暂时没必要集成。
我以前和你的观点一样。
>写开源项目还要投靠一家企业?
您认为,是企业吗?
>这也是为什么国内外很多优秀开源框架往往来自于个人而非企业的原因之一。
优秀,但不成功吗? 47 楼 eyezgx 2011-05-24 lokinell2006 写道个人觉得现在dojo的整体架构做的不错
分为core, base, dijit 和 dojox
多看看dojo的源码相信对于面向对象的JS有莫大的帮助。
个人认为,DOJO的反应速度(加载速度)还是有待提高的! 48 楼 eyezgx 2011-05-24 lokinell2006 写道个人觉得现在dojo的整体架构做的不错
分为core, base, dijit 和 dojox
多看看dojo的源码相信对于面向对象的JS有莫大的帮助。
个人认为,DOJO的反应速度(加载速度)还是有待提高的! 49 楼 y14734817777 2011-05-31 if (AIS.modual[modual].ns)
{
cb.call(eval(AIS.modual[modual].ns));
}
else
{
AIS.getScript(AIS.modual[modual].url, function()
{
cb.call(eval(AIS.modual[modual].ns));
});
}
//你这种写法AIS.modual[modual].ns 外面有的还套个eval(), 可读性差