• crown
    2019-11-12
    老师好,我工作主要用node. js开发游戏服务器和web服务器的,按照我对操作系统的理解,单线程容易写对逻辑,非阻塞io如文件操作等+ epoll可以实现异步io,开多进程可以利用多核心。 可是大家都说node是单线程做游戏服务器不行,但是游戏逻辑不太好用多线程表达吧。。。 说node不适合写游戏服务器,主要说是js运行效率的缺陷?

    作者回复: 在涉及纯计算效率的问题上,js确实是要差一些的,要不然也不会专门再弄出一个BigInt类型出来,以及还有所谓的TypedArray。但是,如果仅仅是说能不能做游戏服务器,开发游戏应用代码,那么坦率的说:1、没问题,2、效率还错,3、开发挺快的;4、网络实现也很简洁……但是如果游戏需要处理传输层的编解码,等等与计算效率相关的情况,那么(前面已经说过了)就得换方案了。

    你提到多线程问题,对于最新的Node.js来说,原生多线程也是内置的了,但并不比传统开发工具下的简单。——所以除了语言或工具的习惯性之外,它也并没有什么优势。另外,在线程操作这个层级上,大家提供的都是差不多的核心操作或API,所以使用复杂度,面临的问题集之类的也差不多。只不过,相对于其它语言或应用环境,Node.js缺少在多线程基础上的开发库,这方面基本为0。

    最后,还是从纯语言的角度上来回答你的问题。事实上决定它合不合适写游戏的,根本之处(从语言的角度上来讲)与你所提的绝大多数特性都无关。如果游戏规模大一些,那么就不适合直接用JavaScript来开发了。在任何的、包括游戏开发在内的大型的应用开发中,JavaScript最大的缺陷其实是缺乏静态类型声明与检查。在动态类型体系下开发大型程序几乎是一种灾难,即使你再能控制类型的使用、团队的编码习惯等等,都很难避免。

    因此如果你非得在这种场景下使用JavaScript,我非常建议你考虑TypeScript,哪怕是Flow也行。当然,最终运行的执行环境仍然可以是Node.js,这就是个效率问题了,而与语言无关。

    
     12
  • 小伟
    2019-11-11
    js是我最早接触的语言,也是一直敬畏的语言,你以为掌握了,但在debug的时候,error会给你致命一击
    
     10
  • 烤迪
    2019-11-15
    老师可以推荐一些有利于洞悉语言本质的书吗,可以结合专栏阅读或者后面继续学习的书

    作者回复: 裂墙推荐。^^.
    https://github.com/aimingoo/my-ebooks#程序原本

    老实讲,比这里用js来讲的内容要易读得太多了。这里讲js吧,我还得注意“js/ecma到底如何实现”,或者这个特性那个特性什么的。而《程序原本》里只讲本质就好了。^^.

     1
     9
  • 温晓东
    2019-11-12
    爱民开课 支持 希望看见更多的课

    作者回复: 谢谢支持✊

    
     4
  • 余文郁
    2019-11-20
    老师,今天突然想到一个问题,就是为什么js中有高阶函数这个东西,可以把函数当参数,还可以返回一个函数,其他语言里没有,这跟js诞生有什么联系吗

    作者回复: 函数式语言特性并不是js独有的,它是一种被广泛认可的语言特性。但在函数式特性方面,Eich没有太强调他在早期语言设计中受到何种影响。

    现在的tc39中的成员们,从整体趋势上来看,是更认可js中的函数式特性,而否定其中的oop特性的。
    所以,有时候感觉这门语言(的特性)已经开始变得怪怪的了。:(

     1
     3
  • 张三
    2019-11-14
    老早就看了爱民老师的绿皮书。两个字“牛B”。
     1
     3
  • ssala
    2019-11-12
    接触的语言中,js是唯一一门让我头大的语言,打算跟随老师一起学习。
     2
     3
  • 余文郁
    2019-11-12
    function Foo() {

      getName = function() {

        console.log(1);

      }

      return this;

    }

    Foo.getName = function() {

      console.log(2);

    }

    Foo.prototype.getName = function() {

      console.log(3);

    }

    var getName = function() {

      console.log(4);

    }

    function getName() {

      console.log(5);

    }

    Foo.getName();

    getName();

    Foo().getName();

    getName();

    new Foo.getName();

    new Foo().getName();

    new new Foo().getName();
    老师,我做了一道网上的题目,发现做不出来,运行后,发现在node环境会报错,浏览器环境会依次输出2 4 1 1 2 3 3,老师可以帮我解释一下吗,确实有点懵了
    展开

    作者回复: 按浏览器上的执行效果理解就对了。

    NodeJS加载的文件是运行在一个模块中,因此function Foo()的代码中的"return this;"并不能得到global,从而导致“Foo().getName();”这一行不能得到global.getName出错。

     2
     3
  • 翅膀
    2019-11-12
    第n+1次,学js. 这次要坚持住

    作者回复: 加油!

    
     2
  • Jack Q
    2019-11-11
    掌控代码,而不是被代码掌控。

    作者回复: ^^.

    完全赞同楼上观点

    
     2
  • 一步
    2019-11-11
    JS这门语言成也灵活,败也灵活
    熟练的怎么写怎么舒服,不熟悉的人感觉没有规范太灵活了容易出错

    希望通过这个专栏形成语言的体系
    
     2
  • 潇潇雨歇
    2019-11-11
    上个月就在期待了,看了课程预告那会
    
     2
  • 勿闻轩外香
    2019-11-11
    今天立flag,没事儿的时候盘一盘 :)
    
     2
  • lunar
    2019-11-24
    小岳岳不仅会说相声,js还这么好?😱😱
    
     1
  • 鸡蛋火腿酥饼
    2019-11-14
    老师您好,我现在正在一家公司实习,使用JS为公司开发功能需求的外部库,但是总觉得自己的代码风格和效率差,不知从哪学起,也不知学您这个适合吗?

    作者回复: 如果是这个目的,那么不太适合。因为这个课程的内容,讲工程应用的较少,对代码风格也缺乏讨论。

    这个课程更多的是构建语言的学习与认知的体系,而不是提供应用开发的技能,二者目的不太相同。

    
     1
  • 翰弟
    2019-11-14
    早闻其名,以为老师曾已经输出过那么多,以为这次课可能没那么多真知,听了开篇词我先保证学完这个课。
    另外发现技术科程的订阅量和得到之类的课不同比。我决定让女票也看这开篇词,接收“新”东西。
    我是一个好不纯粹的程序员
    
     1
  • T T
    2019-11-14
    对于一个0基础的小白从何入手才能进入这个大前端行业!

    作者回复: 写一个项目,或者重构一个项目。从实际工作下手,是最有效果的。

    另外,你的头像超亲切。呵呵,我曾用这个图做桌面约一两年~ :)

    
     1
  • 高飞
    2019-11-12
    一直是爱民老师粉丝,支持
    
     1
  • JustinLiu
    2019-11-12
    原来你是这样的JavaScript。
    
     1
  • EEEEEEEarly
    2019-11-11
    666
    
     1
我们在线,来聊聊吧