热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

驳PHP优于Node.js的五大理由

分类大话编程发布ourjs9142013原文cnodejs.org注意转载须保留原文链接,译文链接,作者译者等信息。当搜索Node.js与PHP比较时&

分类 大话编程 发布 ourjs 9/14/2013 原文 cnodejs.org
注意 转载须保留原文链接,译文链接,作者译者等信息。
当搜索Node.js与PHP比较时,总能找到Jani Hartikainen写的PHP优于Node.js的五大理由,这也让勇于挑战新事物新技术的同学犹豫不前,这里也让多年在WEB领域耕耘的码农谈谈不同看法。
1. 容易托管
我想作者肯定指的是空间吧?那是上个世纪的事物了吧。现在是什么?小的说是平台,大的说是云计算。
是的,2003年我用asp写网站的时候,对于我而言服务器,内存是极其昂贵的,那个时候一定需要服务器空间需要FTP软件,做一个asp(2003更多的是asp空间商吧!)网站,通过FTP上传,现在还有做网站上传空间吗,现在几乎都是云平台,服务器租赁,至少也是虚拟空间,
2. PHP在服务器上安装更方便、简易
很多同学都在问node.js在服务器怎么启动?为什么?因为node.js 相对于php的启动太简单了,甚至简单到不可想象,只需要一个node app.js(入口文件)就可以,而php需要选择哪一个http服务器,当然你可以选择php的黄金搭档apache,如果不是默认的配置,你对apache的了解又有多少,又有多少php程序员知不知道php依赖于fastcgi,一个服务器的配置对于开多少fagcgi进程是合理的?
3. 如果PHP代码损坏,不会拖垮整个服务器,4. PHP进程短暂
这两点我要放在一起说,为什么?因为这正是node.js最大的优势。
坦率地讲PHP与node.js根本没有比较性而言,争的是什么?是HTTP SERVER之争。PHP的黄金搭档是apache?不,还少一个FastCgi,node.js和php的比较,是node.js与php+apache+fastcgi的比较,简单地讲FastCgi就是多线程的Cgi(当然有线程池),当每一个PHP请求,都会产生一个新的线程,每个线程都是独立的,线程不会影响另外的线程,那么这就形成PHP的两个特点,相对的稳定,相对的并发。为什么是相对的稳定和相对的并发?相对的稳定的是一个进程的崩溃不会影响另外一个进程(因为肯定是一个请求的代码出现问题造成的崩溃,但一个崩溃不影响其它我们就可以视而不见?),相对的并发是如果一个服务器可以开250个线程,再加上线程池就可以保证一定的并发量。
但是,线程是什么?是OS执行的最小单元,由线程ID,当前指令指针(PC),寄存器集合和堆栈组成(是不是专业的都要背?),然而线程是昂贵的,线程对cpu和内存的占用都是很重的,就象一个人跑步一样,你加速了,停下,启动再加速,那是很费力的。这就使得HTTP SERVER的后起之秀nginx以光的速度蔓延开来,nginx就是以单线程为基础的,为什么nginx快?WEB的世界是可以通过木桶效应来论述,也就是一次请求最短的木板就是瓶颈,很多人认为运算处理会阻塞主线程,这是需要由测试和经验来决定的,事实是它的处理时间占用很短,做100万次for循环要比一次网络访问的时间还要短,这些操作包括网络访问,I/O操作,数据库访问。nginx进程模型是所有需要阻塞请求的部分全部由epool(事件通知接口)触发相应事件,非阻塞(处理耗时 很短)部分用主线程一直执行,直到遇到阻塞部分就停止,交由阻塞部分监听异步完成事件,这样就构成了事件驱动模型。这部分可以研究一下nginx进程就可以得知。
说到这里,大家是不是觉得node.js与nginx进程模型很象,是的!这就是node.js创始人Ryan Dahl的初衷,单线程,事件模型。
node.js就是基于单线程和事件模块,这也恰恰是Javascript特性(所以最终Ryan Dahl选择Javascript是必然),node.js的单线程就是主线程,主线程是什么?就是事件队列,node.js(Javascript)就是面向事件驱动的编程,web是事件化的,os也是事件化的。os的服务(I/O,database)都是在自己独立的进程中完成,当发生一个请求后,node.js只是在这个事件队列中注册一个事件,然后就不管了,具体这个事件的执行就交给了os(i/o,database)不同的进程,等os完成后,通过回调(node.js会轮询)再回到主线程的处理,所以node.js单线程是指自己的主线程,而不是所有的操作都是在这个线程里,这个线程只是事件调度,事件的执行都是交给操作系统在其它的线程中完成。所以node.js是非I/O阻塞,而不是非cpu阻塞,那么node.js会出现cpu阻塞,是不是性能就会有问题呢?不是的,就象Nginx一样,因为对web而言运算是非常非常小的,一次I/O的操作的时间远大于你做百万次的for循环。
5.更大的标准库
没有选择是最容易的,就以前我一直用微软的工具一样。其实对于库而言,应该是一些重要的库是不是还在更新和进步,至少在node.js发展了这么多年,对我而言对重要的web所必要的模块已经足够强壮。

另外补充:
Javascript
天时,地利,人和!Javascript的出现就是天时,Javascript就是为web而生,Javascript就是因为web而不断成熟,看语言的排名,一切都是浮云,武功最高的境界就是无剑胜有剑,所有的c#,java php程序肯定都用过Javascript吧,但真正对Javascript了解又有多少?只是把Javascript当作效果工具了吧?
回调
回调真的恶心吗?当你真的理解事件驱动的时候,你会发现回归才是编程的本质,一切的结束都是回归,而不是强求!

转:https://www.cnblogs.com/NL34/p/3544987.html



推荐阅读
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • 深入RTOS实践,面对原子操作提问竟感困惑
    在实时操作系统(RTOS)的实践中,尽管已经积累了丰富的经验,但在面对原子操作的具体问题时,仍感到困惑。本文将深入探讨RTOS中的原子操作机制,分析其在多任务环境下的重要性和实现方式,并结合实际案例解析常见的问题及解决方案,帮助读者更好地理解和应用这一关键技术。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 网络通信基础:互联网协议(IP)详解
    互联网协议(IP)作为TCP/IP协议栈的核心组成部分,主要负责提供一种无连接且不可靠的数据包传输服务。这意味着IP并不确保数据包能够成功抵达目标地址,而是尽力而为地进行传输。此外,IP协议在数据传输过程中不维护任何连接状态,每个数据包独立处理,确保了网络的高效性和灵活性。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 优化后的标题:校园互联新方案:10397连接教育未来 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
author-avatar
小林2502927313
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有