浅谈nodejs与php设计构思层面上的差异

2019-08-14 14:33:43

nodejs最近火的一塌糊涂,那为什么它可以成为千百程序员的新宠呢?


难道只是因为把js搬到了服务端?如果仅仅是这样是迁移了一个运行环境和增加几个模块的话我想完全不可能会得到喜新厌旧的程序员的青睐


nodejs和php的差异主要是两个方面:分工和运行机制


分工:nodejs直接跳过了服务器这个阶段,把创建服务器作为node的一个模块,监听请求这些应该是服务器做的工作现在变成了node做,这样就简化的开发环境,而且更加容易控制监听请求以及响应.也就是说node没有一个web容器,没有根目录的概念。


运行机制:


php在处理并发的时候是通过多线程处理,这样会导致硬件成本的增加,特别是一些频繁I/0的项目,很多的线程被阻塞,cpu得不到充分的利用。


node:node的核心理念是单线程,通过事件和回调实现并发。既然是单线程,那硬件成本自然比较低。


那单线程怎么实现并发呢?我认为正是这种实现的方法让大家耳目一新,所以才会让node如此的火,


并发实现原理:比如一百个请求要做一百件事,当第一个请求执行到i/o的时候立马挂起,不等待i/o成功,直接执行下一个事件,直到i/o完毕,这是触发回调事件,回调事件的优先级会比普通事件的优先级高,就是这样通过异步来实现单线程的并发处理。保证了线程永远有事做,不会等待


缺点:这样是提高了cup的利用率,但是无疑是把所有鸡蛋放在一个篮子里面,如果有个事件导致线程蹦了,直接的后果就是导致线程上的所有任务事件都蹦了,还有如果是运算的阻塞是没法并发的,所以这就局限了它只是适合做大量i/o的应用场景,不适合做大量计算的项目,例如股票这类型的。


node还有一个很大的特点就是路由功能,需要自己去配置,应为没有服务器软件,所以服务器软件的所有功能都需要自己去写,但是常用的功能在开源社区基本都已经有人写好了,对于我这样的喳喳来说简直就是福音啊。


以上笔记单纯代表个人观点,有不同意见的欢迎打搅。



  • 2019-12-10 21:14:11

    axios文件上传功能+formData

    在项目中使用axios上传文件,记得new一个纯净的axios或者考虑用ajax请求。因为axios在项目估计已经用了全局配置请求头等信息,这里的配置可能被全局请求头拦截,导致请求失败。 2.1构造formData 作者:exmexm 链接:https://www.jianshu.com/p/9c708a47d8a5 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 2019-12-11 16:04:15

    CSS中的 “var()” 和 “:root”

    var() var()函数可以代替元素中任何属性中的值的任何部分。var()函数不能作为属性名、选择器或者其他除了属性值之外的值。(这样做通常会产生无效的语法或者一个没有关联到变量的值。)

  • 2019-12-11 16:18:51

    npm发布vue组件

    开发之前先看看官网的 开发规范 我们开发的之后期望的结果是支持 import、require 或者直接使用 script 标签的形式引入,就像这样

  • 2019-12-11 16:21:00

    .vue文件 加scoped 样式不起作用

    在vue组件中,为了使样式私有化(模块化),不对全局造成污染,在style标签上添加scoped属性,以表示它只属于当下的模块。但是要慎用,因为在我们需要修改公共组件(第三方库或者项目中定制的组件)的样式的时候,scoped会造成很多困难,组要增加额外的复杂度。

  • 2019-12-11 16:22:04

    Vue中的scoped和scoped穿透,scoped原理

    在Vue文件中的style标签上有一个特殊的属性,scoped。当一个style标签拥有scoped属性时候,它的css样式只能用于当前的Vue组件,可以使组件的样式不相互污染。如果一个项目的所有style标签都加上了scoped属性,相当于实现了样式的模块化。

  • 2019-12-12 14:19:32

    laravel自定义分页LengthAwarePaginator

    有时候我们使用larave提供的后台分页数据库查询,有时候限制太多,我们需要自己定制分页功能。 下面是我给大家一个例子,我们可以根据例子,制作自己的分页功能。