找回密码
 FreeOZ用户注册
楼主: ubuntuhk
打印 上一主题 下一主题

[IT技术] 讨论一下AngularJS和Node.js等Web技术

[复制链接]
121#
发表于 8-7-2014 03:50:08 | 只看该作者
本帖最后由 superopengl 于 8-7-2014 04:46 编辑

  • 缓存过期设为“永不过期”
  • js的URL带version或hash信息,like "http://.../v1/blah.js" or "http://.../2a09b162cff/blah.js"。要保证只要有代码修改就升版本或变hash。

这就保证只要代码不改变,就只load一次(用户自己强制删除缓存的情况就管不了了)

评分

参与人数 2威望 +80 收起 理由
karl.lee.2004 + 50 谢谢分享!
ubuntuhk + 30 你太有才了!

查看全部评分

回复  

使用道具 举报

122#
发表于 8-7-2014 03:54:12 | 只看该作者
本帖最后由 superopengl 于 8-7-2014 04:48 编辑
DDD888 发表于 7-7-2014 11:17
我感觉现在应该做thin client, fat server. 如果thin client 只需要用十行代码的话,那就最好了,对于clien ...

其实重写是保住Software Engineer市场蓬勃发展的主要动力。biz logic 10年变一次就算剧变了。那些法规政策哪有变那么快。都是IT新技术出来后,就用新技术重写一遍,然后咱们就不断的有工作。

谢谢Microsoft、Google、FaceBook、Oracle、Twitter这些技术引领者的大忽悠,咱么不断有饭吃。

评分

参与人数 2威望 +80 收起 理由
karl.lee.2004 + 50 不能同意更多,边笑边赞!
ubuntuhk + 30 我很赞同!

查看全部评分

回复  

使用道具 举报

123#
发表于 8-7-2014 04:02:33 | 只看该作者
ubuntuhk 发表于 7-7-2014 23:02
有点疑问,如果在client端和server端各跑一遍,为什么不索性放到server端跑?

client端run一遍是为了尽可能少post到server,是为了更好的用户体验和减少网络流量;server端跑一遍是为了校验。

另外,无client校验的情况下,server validation for good data占20%, for bad data占80%;如果有client校验的情况下,可能server validation for good data占95%, for bad data占5%(这5%来自hack)。通常Run正常系比异常系的快很多,因为没有throw exception, error message composition, stack trace.

评分

参与人数 1威望 +50 收起 理由
ubuntuhk + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

124#
 楼主| 发表于 8-7-2014 04:13:18 | 只看该作者
superopengl 发表于 8-7-2014 02:38
我的经验是这样的:现在大部分server端的code把biz logic和data logic混在一起,也就是做了很多
  • da ...


  • 嗯,你的解释让我的思路清晰了很多,赞
    回复  

    使用道具 举报

    125#
     楼主| 发表于 8-7-2014 04:16:07 | 只看该作者
    superopengl 发表于 8-7-2014 03:02
    client端run一遍是为了尽可能少post到server,是为了更好的用户体验和减少网络流量;server端跑一遍是为了 ...


    明白了,我很赞同你的观点

    server端用于校验的代码,应该也可以复用客户端的代码,所以开发的工作量应该不会增加太多,但是节省的client和server的交互开销还是非常客观的。
    回复  

    使用道具 举报

    126#
    发表于 8-7-2014 07:06:40 | 只看该作者
    本帖最后由 superopengl 于 8-7-2014 05:21 编辑
    ubuntuhk 发表于 8-7-2014 02:16
    明白了,我很赞同你的观点

    server端用于校验的代码,应该也可以复用客户端的代码,所以开 ...


    Right,所以JavaScript是现在唯一一种一次编写到处执行的语言,无论server还是browser,或是client device。

    当然JavaSript社区也注意到了JavaScript编写biz logic程序的弱点:
    • 缺少Type导致无法开发功能强大的IDE(这一点TypeScript处理的要好很多)。
    • 缺少native module和dependency的特性(AMD看起来太丑了)。
    • 缺少命名空间,即global scope太大。
    • 语言本身对语法错误或不良习惯太宽容(比如return \r\n;),即语法太灵活。
    • JS本身一些设计缺陷,比如float精度问题(0.1+ 0.2 === 0.30000000000000004)。这个在金融软件里是不可容忍的。

    上述这些都有望于JavaScript 2里得到解决。但我的观点是,其实根本不会有真正的JavaScript 2。在JavaScript “2”诞生前,各大公司都会抢占New JavaScript的工业标准。各种版本向下兼容,但有各有怪癖。最终只会是JavaScript 1.X + MS standard = MS JavaScript 2, JavaScript 1.X + Mozilla standard = Mozilla JavaScript 2, JavaScript 1.X + Google standard = Google JavaScript 2。或者干脆杀几种出像TypeScript一样,能完全兼容JavaScript的全新的语言。

    总之,上帝是不会让人类都说一种语言,建出通天塔的

    评分

    参与人数 1威望 +50 收起 理由
    ubuntuhk + 50 谢谢分享!

    查看全部评分

    回复  

    使用道具 举报

    127#
    发表于 8-7-2014 07:14:16 | 只看该作者
    我倒是挺喜欢JavaScript callback这种方式的变成方式。刚开始时觉得有些别扭,但习惯后觉得比c#这些命令式编程语言的逻辑性更强。
    当然,读code时找不到callback的真身是个很头疼的问题。
    回复  

    使用道具 举报

    128#
    发表于 8-7-2014 10:27:21 | 只看该作者
    ubuntuhk 发表于 8-7-2014 00:19
    我看到github上也有一个knot.js,应该不是你写得吧?
    https://github.com/keyle/knot.js/


    那个不是.  
    我得最近在补unit test, 然后还要写几个例子和介绍文字。到时候发出来

    现在Knot.js的设计和这贴末尾的情况差不多,就是加了些小改进:
    http://freeoz.org/ibbs/thread-1089308-4-1.html

    评分

    参与人数 1威望 +20 收起 理由
    ubuntuhk + 20 谢谢分享!

    查看全部评分

    回复  

    使用道具 举报

    129#
    发表于 8-7-2014 10:31:46 | 只看该作者
    superopengl 发表于 8-7-2014 02:50
  • 缓存过期设为“永不过期”
  • js的URL带version或hash信息,like "http://.../v1/blah.js" or "htt ...

  • 嗯,设为永不过期,写错了。
    在我的项目里采取直接改文件名的方式。因为我们的js都是打包压缩过的,由发布工具完成这些动作。和你们的做法基本上是一个原理
    回复  

    使用道具 举报

    130#
    发表于 8-7-2014 14:21:36 | 只看该作者
    DDD888 发表于 7-7-2014 12:17
    我感觉现在应该做thin client, fat server. 如果thin client 只需要用十行代码的话,那就最好了,对于clien ...

    这样做的话,我认为app就会严重依赖后端,而现在很多web app,比如游戏,可以离线照样愉快的玩耍

    我觉得是需求变了
    回复  

    使用道具 举报

    131#
     楼主| 发表于 8-7-2014 14:47:06 | 只看该作者
    superopengl 发表于 8-7-2014 06:06
    Right,所以JavaScript是现在唯一一种一次编写到处执行的语言,无论server还是browser,或是client dev ...


    关于JavaScript的版本问题,我的理解,目前各方还是在尽力遵循“ECMAScript”-- JavaScript提交到ECMA之后的标准名字。不过问题是各个浏览器的版本对ECMAScript的支持程度参差不齐,而且我们很难控制用户的设备到底是哪个版本,中国的很多用户可能还在运行老旧的Windows XP上的IE6,这个是导致兼容性问题的最大麻烦。

    http://zh.wikipedia.org/zh-cn/JavaScript
    http://en.wikipedia.org/wiki/ECMAScript
    回复  

    使用道具 举报

    132#
     楼主| 发表于 8-7-2014 14:49:28 | 只看该作者
    superopengl 发表于 8-7-2014 06:14
    我倒是挺喜欢JavaScript callback这种方式的变成方式。刚开始时觉得有些别扭,但习惯后觉得比c#这些命令式编 ...


    callback的调试对developer也是一个非常大的挑战,这也是我一直听说的问题,不过我目前还没有特别深刻的体会,只是感觉要放下原来的写程序思维,来开发JavaScript的程序。
    回复  

    使用道具 举报

    133#
     楼主| 发表于 8-7-2014 14:52:48 | 只看该作者
    woodheadz 发表于 8-7-2014 09:27
    那个不是.  
    我得最近在补unit test, 然后还要写几个例子和介绍文字。到时候发出来


    啊,埋没在数码版了,我还评过分,可是那时候对JavaScript一知半解,所以没有特别留意,我把这个帖子移到这个版面,以便大家继续讨论,你不介意吧
    回复  

    使用道具 举报

    134#
    发表于 8-7-2014 14:55:14 | 只看该作者
    ubuntuhk 发表于 8-7-2014 13:49
    callback的调试对developer也是一个非常大的挑战,这也是我一直听说的问题,不过我目前还没有特别深刻的 ...

    callback会导致逻辑被迫碎片化。 因此才会诞生了promise模式,还有老赵的wind js
    这个问题我认为解决得最完美的是c#的await 关键字,anders大神牛逼。

    评分

    参与人数 1威望 +20 收起 理由
    ubuntuhk + 20 谢谢分享!

    查看全部评分

    回复  

    使用道具 举报

    135#
     楼主| 发表于 8-7-2014 14:55:54 | 只看该作者
    simpledream 发表于 8-7-2014 13:21
    这样做的话,我认为app就会严重依赖后端,而现在很多web app,比如游戏,可以离线照样愉快的玩耍

    我觉 ...


    我觉得需求没变,离线运行肯定是一直以来的需求(特别是无线的网络随时可能掉线),而是以前的技术、平台对离线运行的需求基本无法支持,所以需求被压抑了
    回复  

    使用道具 举报

    136#
    发表于 8-7-2014 14:56:45 | 只看该作者
    ubuntuhk 发表于 8-7-2014 13:52
    啊,埋没在数码版了,我还评过分,可是那时候对JavaScript一知半解,所以没有特别留意,我把这个帖子移 ...

    噢,好的,谢谢。
    本来还想等正式发布再来开个贴打广告呢
    回复  

    使用道具 举报

    137#
     楼主| 发表于 8-7-2014 14:59:44 | 只看该作者
    woodheadz 发表于 8-7-2014 13:55
    callback会导致逻辑被迫碎片化。 因此才会诞生了promise模式,还有老赵的wind js
    这个问题我认为解决得最 ...


    谢谢分享,看起来也有人在尝试引入C#的await,来改善JavaScript的异步编程体验:
    http://bjouhier.wordpress.com/20 ... life-in-javascript/

    评分

    参与人数 1威望 +20 收起 理由
    woodheadz + 20 谢谢分享!

    查看全部评分

    回复  

    使用道具 举报

    138#
    发表于 8-7-2014 15:01:58 | 只看该作者
    ubuntuhk 发表于 8-7-2014 13:59
    谢谢分享,看起来也有人在尝试引入C#的await,来改善JavaScript的异步编程体验:
    http://bjouhier.wor ...

    没看源码,但看使用方式似乎和老赵的wind js差不多
    回复  

    使用道具 举报

    139#
     楼主| 发表于 8-7-2014 15:04:29 | 只看该作者
    woodheadz 发表于 8-7-2014 14:01
    没看源码,但看使用方式似乎和老赵的wind js差不多


    搜了一下你说的wind.js,找到一些link,放这里备份一下:

    http://www.infoq.com/cn/articles/interview-jscex-author-part-1
    http://windjs.org/cn/
    回复  

    使用道具 举报

    140#
    发表于 8-7-2014 15:45:49 | 只看该作者
    woodheadz 发表于 8-7-2014 12:55
    callback会导致逻辑被迫碎片化。 因此才会诞生了promise模式,还有老赵的wind js
    这个问题我认为解决得最 ...

    这个应该是编程习惯问题吧。我最开始也不适应callback这种异步编程方式,有些东西想不明白。可最后开窍了以后豁然开朗,反而觉得逻辑性更强了——callback就像一张流程图一样,一路指引你的思维跑下去。正如我反复强调的,社区对这种方式的抵抗也多少源于Functinal Language的IDE很难做强大(即便是WebStrom也需要下载相应类库的TypeScript Definiation做intelligence)。但这并不是说这种逻辑思考方式存在缺陷。只要是c#能实现的逻辑,JavaScript都能实现,就说明不是逻辑的问题,而是思维习惯的问题。

    Promises其实就是在多个异步调用时加个counter或hashtable,每完成一个task就couter++,当最后一个task结束后调用done callback。Promises只是做了语法糖封装。同样await也是语法糖。

    Imperative language到Functional language确实有个不大不小的learning curve,但想通了、适应了也就好了。

    评分

    参与人数 1威望 +30 收起 理由
    ubuntuhk + 30 谢谢分享!

    查看全部评分

    回复  

    使用道具 举报

    141#
    发表于 8-7-2014 16:02:08 | 只看该作者
    本帖最后由 woodheadz 于 8-7-2014 15:04 编辑
    superopengl 发表于 8-7-2014 14:45
    这个应该是编程习惯问题吧。我最开始也不适应callback这种异步编程方式,有些东西想不明白。可最后开窍了 ...


    逻辑方面当然没问题,其实只要是图灵完备,就不会有实现不了的逻辑。
    我倒不是说这种方式是缺陷,只不过不喜欢代码被强行分段包裹到一个个scope中罢了。现在干这么长时间js虽然也很习惯这么来,但依旧是不喜欢。 之所以为这个东西出了这么多解决方案,也说明这玩意让很多人也不爽。
    当然,这种不爽也许可以算成是一种来自其它编程语言的思维惯性。
    回复  

    使用道具 举报

    142#
    发表于 8-7-2014 16:15:09 | 只看该作者
    woodheadz 发表于 8-7-2014 12:55
    callback会导致逻辑被迫碎片化。 因此才会诞生了promise模式,还有老赵的wind js
    这个问题我认为解决得最 ...

    我到觉得await在C#里不伦不类。当然这个语法糖省了不少事。最开始C#的设计是紧跟Java,后来发现Functional Language是方向,又加入了很多Functional Lang的语言特性(var, dynamic, await/async, Roslyn),但都是在语法糖层面上的模拟。现在C#变得不伦不类,模拟这些特性的变得越来越复杂。就像一辆大拖车,发现走错路了,不是随便找个弯就能转过来的。

    当然,考虑到市场和兼容性,以及C#社区的习惯等现实问题,MS是不可能一下子放弃C#而推出全新语言取而代之,只能是更多的“模拟”Functional Lang的特征。

    我认为,Cloud时代编程语言的基本要求是
    • 弱类型,至少是运行时弱类型——适应频繁cloud上API变更,避免重编译
    • 支持eval——程序可做数据传输
    • Data既code,如JSON——数据可以直接被运行,避免serializatoin/deserialization
    • Module和Namespace支持
    • Native dependency loading mechanism
    • Package ecological system
    • 解释执行和Command line runnable——为了方便部署。
    • [Optional] 支持async。
    • [Optional] Client端和Server端都能跑,既都有虚拟机支持。

    至少现在C#在1、2、3、7、9上还很弱,或者说根本无法从根本上实现或高效实现。MS也发现了这一点,但改的C#越来越像怪猴。Google在开发语言上倒是一直不说上句,不知它是否有意强推Node.js,毕竟JavaScript是目前所有语言中在上述要求中得分最高的(1, 2, 3, 6, 7, 8, 9)
    回复  

    使用道具 举报

    143#
    发表于 8-7-2014 16:17:22 | 只看该作者
    woodheadz 发表于 8-7-2014 14:02
    逻辑方面当然没问题,其实只要是图灵完备,就不会有实现不了的逻辑。
    我倒不是说这种方式是缺陷,只不 ...

    hehe,还是那句话,根本原因是IDE不行。要是IDE像Visual Studio一样强大,那就会有更多的粉丝哩
    回复  

    使用道具 举报

    144#
    发表于 8-7-2014 16:34:34 | 只看该作者
    superopengl 发表于 8-7-2014 15:15
    我到觉得await在C#里不伦不类。当然这个语法糖省了不少事。最开始C#的设计是紧跟Java,后来发现Functiona ...

    umm, 着眼点不同,结论不同。

    我个人倒是一贯比较喜欢强类型语言。所以干了两年js依旧对js爱不起来。

    强类型固然限制会多一些,没那么灵活。但带来的优势在系统做大后还是很明显的。 至于你说的哪些问题,都可以通过技术手段解决掉,其实成本也不会增加太多。 C#新推的特性无非也就是让大家在在解决这些问题的时候少花点功夫罢了。你可以不用,这些问题一样能被解决掉。

    所以我不大同意“Functional Language是方向”, “C#走错路了”这样简单化的说法。技术的发展本来就是多面多向的,有融合也有分离。

    评分

    参与人数 1威望 +30 收起 理由
    ubuntuhk + 30 谢谢分享!

    查看全部评分

    回复  

    使用道具 举报

    145#
    发表于 8-7-2014 16:35:37 | 只看该作者
    superopengl 发表于 8-7-2014 15:17
    hehe,还是那句话,根本原因是IDE不行。要是IDE像Visual Studio一样强大,那就会有更多的粉丝哩:loveline ...


    我认为callback带来的逻辑上的强制割裂问题通过ide应该是解决不掉的吧。其实VisualStudio对javascript支持已经很不赖了。
    回复  

    使用道具 举报

    146#
    发表于 8-7-2014 17:18:37 来自手机 | 只看该作者
    提示: 作者被禁止或删除, 无法发言
    本帖最后由 black_zerg 于 8-7-2014 16:57 编辑

    Callbacks are not that bad in JavaScript because code in the callback function can access the outer scope freely. you can think them as statement like if else,  Only thing I want is the lambda syntax. One way to think about this is all functions are like statements in JavaScript, you can make your own statement freely. That is pretty powerful.

    so personally I don't see the need for await syntax. If you don't have problem with if inside if, then you shouldn't have problem with callback inside callback. But if you don't use anonymous function then sure it will look terrible. The Js way is using anonymous functions when possible. But I really wish there will be the lambda syntax like ->{}

    and I agree VS is pretty good. I am using the free version for my personal projects. Best IDE for JavaScript in my opinion

    评分

    参与人数 1威望 +30 收起 理由
    ubuntuhk + 30 谢谢分享!

    查看全部评分

    回复  

    使用道具 举报

    147#
    发表于 8-7-2014 20:42:06 来自手机 | 只看该作者
    提示: 作者被禁止或删除, 无法发言
    本帖最后由 black_zerg 于 8-7-2014 20:24 编辑

    http://strongloop.com/strongblog/node-js-callback-hell-promises-generators/

    alternatives if you don't like callbacks.

    The biggest problem of node js is still it's young and not really widely used. jumping to a node js server seems very risky for jee or .net team. pretty interesting but you don't know if it adds value to your resume.learning angular will be a good investment. It's pretty handy and flexible, easy to convince your boss or client as it is from Google. easy to get support from the team as well.

    评分

    参与人数 1威望 +30 收起 理由
    ubuntuhk + 30 谢谢分享!

    查看全部评分

    回复  

    使用道具 举报

    148#
    发表于 8-7-2014 21:00:05 | 只看该作者
    最近也在开JS和node.js,太多东西了,一下子消化不过来

    评分

    参与人数 1威望 +30 收起 理由
    ubuntuhk + 30 一起,加油!

    查看全部评分

    回复  

    使用道具 举报

    149#
     楼主| 发表于 8-7-2014 22:51:05 | 只看该作者
    superopengl 发表于 8-7-2014 15:15
    我到觉得await在C#里不伦不类。当然这个语法糖省了不少事。最开始C#的设计是紧跟Java,后来发现Functiona ...


    google在推的是AngularJS,nodejs和google好像没多大关系。google在server端推的是golang,但是好像大家不怎么买账,google推得也不积极。
    回复  

    使用道具 举报

    150#
     楼主| 发表于 8-7-2014 22:54:26 | 只看该作者
    black_zerg 发表于 8-7-2014 16:18
    Callbacks are not that bad in JavaScript because code in the callback function can access the outer  ...



    IDE方面,我参加了两次meetup,看到大多数人用的是webstorm和textlime,这两个IDE都是跨平台的。很多开发者用的是Macbook pro/air,没法用VS(文艺2b青年除外)。
    回复  

    使用道具 举报

    您需要登录后才可以回帖 登录 | FreeOZ用户注册

    本版积分规则

    小黑屋|手机版|Archiver|FreeOZ论坛

    GMT+11, 27-10-2024 04:22 , Processed in 0.080420 second(s), 59 queries , Gzip On, Redis On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表