浅谈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-05-17 16:27:26

    在vue项目里面使用引入公共方法

    今天早上来到公司,没事看了一下别人的博客,然后试了一下,发现的确是可以的,在此记录一下,方便自己日后查阅。 首先新建一个文件夹:commonFunction ,然后在里面建立 一个文件common.js

  • 2019-05-18 12:37:39

    Android夜间模式的实现方案

    对于一款阅读类的软件,夜间模式是不可缺少的。最初看到这个需求时候觉得无从下手,没有一点头绪。后来通过查阅资料发现Android官方在Support Library 23.2.0中已经加入了夜间主题。也就是只需要通过更换主题便可实现日间模式和夜间模式的切换。下面截取项目实现的夜间模式效果图:

  • 2019-05-18 12:38:41

    android 快速实现夜间模式

    最近项目中遇到了一个问题,夜间模式在8.0以上的手机中不起作用,查看了一下原因,是夜间模式实现方法的问题。分两种情况介绍一下

  • 2019-05-18 12:40:35

    Android夜间模式的几种实现

    通过增加一层遮光罩来实现。效果不是很理想,但是好用,毕竟很多手机都有自己的夜间模式了

  • 2019-05-19 02:25:15

    php使用TCPDF生成PDF文件教程

    orientation属性用来设置文档打印格式是“Portrait”还是“Landscape”。 Landscape为横式打印,Portrait为纵向打印

  • 2019-05-21 11:46:05

    RecyclerView 加动画的坑

    然后加到recyclerView上,我是在adapter上加的。Adapter的holder复用相信大家也都很熟悉了,这个在绘制效率的提高上很重要,也很容易发现一个问题,就是内容混乱的复用。所以常见的处理就是对view加上tag来多次判断,对于visibility之类的设置一定是if...else的写法,光有if是不可以的。

  • 2019-05-21 11:54:10

    Android中如何设置字体大小

    首先要强调一点,某些用户可能存在视力障碍甚至几近失明,他们无法顺利阅读一般尺寸下的文字内容。Android操作系统意识到了这些情况,并提供了一套显示辅助功能,使得用户可以根据自己的使用习惯随意缩放设备中文本字体的大小。 要在设备上修改字体设定,首先启用“设定”应用,然后选择“显示”项下的“字体尺寸”。用户可以在设备预置的四种文本字体尺寸中选择适合自己的方案(包含小、正常、大、超大),详见图一。

  • 2019-05-21 12:34:38

    浅谈Recycleview嵌套卡顿 以及你所不知道的解决方案

    由于项目需要,需要做到recycleview 这里先不讲如何用其他控件代替这种嵌套的方式 先假定你已经嵌套了 老板还不给时间给你给布局方式 那么这个时候你的这个嵌套列表 必定是卡顿的 只要超过一屏,展示效果会有卡顿现象,原因就是由于两个RecyclerView的存在,使得滑动的view滑出当前屏幕的释放存在冲突

  • 2019-05-21 12:35:54

    RecyclerView setHasFixedSize(true)的意义

    设置为true,再调用notifyDataSetChanged(),发现大小重新计算了,看来理解出现错误了。还是再看一下哪些地方用到这个mHasFixedSize吧。