javascript - js是不是越来越强大甚至可以取代php这类传统的后台语言?
高洛峰
高洛峰 2017-04-10 14:27:40
0
12
1144

以前一直偏向写php,偶尔写点js,后来做毕业设计用到大量js后觉得php这类后台语言的存在感一步步在削弱,特别是nodejs的出现,前后台js统一是不是大势所趋?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen(12)
巴扎黑

不满JS借助浏览器的历史惯性,在自身并无绝对优越的情况下,却能获得可怕的竞争优势,对其他语言极其不公的现实,因而产生这个包含情绪化的答案。
注意:我痛恨一个技术的流行,掺杂太多除去自身优越之外的因素。所以我并从来没有后悔过这样去写这个答案!
但答案本身确实毛病不断,这同样也是我否认不了的。
↙ 所以只管踩。

开玩笑!

请允许我说一句话:Why JavaScript?

设计随意,坑要多少有多少,修修补补多年照样还是乱七八糟,语言本身没有版本管理,写下的代码多年之后的环境就跑不了了的语言,本身有什么优越可言?

其实php被取代掉,不是Javascript的功劳,而是Node异步化模型的贡献。是新的程序设计方法取代旧的程序设计方法,而不是新的语言取代旧的语言。思想是主力军,语言只是副产品。

请允许我说一句话:Node的优越并不在于JS,而是在于Node本身异步架构的设计。JS只不过是“前后端一体化”这种宣传上的噱头。在JavaScript和Node的关系中,JS吃了浏览器客户端语言难以更新、难以代换,这个本来是技术落后点的甜头,也借助了Node与Javascript混为一谈的现实来给自己镀了镀金。这甚至有点寄生生态和“劣币驱逐良币”的意味在里边。

要我看Node.js早晚被其他语言作为核心的Node.***自己超越掉。因为JS对Node,甚至对整个异步化编程模型来说,在很大程度上真的是可有可无。

学里子,不要学样子。

看透思想,不要迷惑于表象!

巴扎黑

首先,我不赞同 @沙渺 对NodeJS的理解

  • JS (或者说ECMA5标准的strict mode)是一门非常优秀,几乎没有什么坑的语言。不要把过去十几年浏览器大战造成的DOM和BOM混乱的屎盆子扣在JS的头上
  • 异步/epoll是NodeJS的重要优点,但我认为这并非它如此流行的引爆点。我认为NodeJS最大卖点在于计算机历史上首次基本解决了依赖地狱(dependency hell)的优秀包管理系统NPM。几乎所有流行语言都可以通过扩展库的形式或多或少支持异步/epoll,但在NPM之前,没有任何一门语言的包管理系统能像NPM一样方便地管理依赖,保证再复杂的交叉依赖也不会版本冲突。(如果你知道有,欢迎举例我们来讨论其流行/不够流行的原因)

    由于node有靠谱的NPM管理依赖,nodejs才能在短时间吸引大量开发者开发package,使得NPM上的package呈现良好的指数性增长,质量也非常高,由于依赖管理得当,不容易(几乎不会)版本冲突。真正形成了类库推动语言发展的良性循环

    PHP原来的pear在这方面毫无建树。好在新兴的composer据称已经吸收了npm的优点(我没实际用过)。如果composer早一点,在php5.3支持namespace的同时出现,那nodejs的这波爆发的光芒可能就属于php了


然后说说我的答案,也就是我眼中PHP相较Node的优点

  • 门槛低。所有的程序员都觉得自己会写JS,除了JS程序员。NodeJS需求的扎实的JS功底是非常高的门槛,没搞明白的人来写NodeJS基本只能添乱。而PHP则简单的多,其编程范式和C到C++/Java一脉相承,又抛弃了指针/宏/模板等各种『可能有用但很容易写错』的机制。它是这个星球最容易学习的CGI语言。入门容易程度甩NodeJS几条街
  • 鲁棒性强,耐操。PHP的正常业务代码,想要搞挂服务没那么容易,多数情况就是那个进程挂了而已,不影响其他请求;而Node侧想保证代码在不会搞挂进程没那么容易,而搞挂一次进程就算有各种容灾/重启/切换挡着,进程挂之前负责的若干个请求还是死定了。
  • 运维环境/工具链成熟。 NodeJS毕竟太年轻,周边的工具链远远不成熟
  • RDBMS,DAO,ORM成熟。node的sql orm和dao至今还没有特别靠谱package,而PHP侧至少前十的流行框架,每个的DAO&ORM部分都是好样的,不用第三方,自带的PDO也是干净利落。这里顺便黑一下mongodb,号称nosql还支持慢的要死的关联查询和索引,就是个笑话

最后,我认为前后台想要统一JS不是什么事。就好比方wow客户端用C++写,服务器也用C++写(不知道实情,只是打比方),你可以说是前后台统一C++。但两侧的技术栈完全不同,从写OpenGL/3D/物理引擎的客户端开发转写高并发/实时/事物处理的后台开发还是天堑。两边用的语言相同并没有实质性的帮助。

迷茫

我认为 PHP 在技术上已经没有什么优势了,很容易被 Python, Ruby, JavaScript 这样的语言取代。PHP 整个看上去就像是一个模板引擎,但是便利性比不上专门的模版语言(jade, Smarty 等), 语法又很随意,构建大型项目时,组织代码不如一些通用编程语言有力。

Node.js 的优势在于 IO 密集的应用,Node.js 可以通过事件回调,最大化地利用 CPU 时间,并行执行多个 IO 操作,而不是很适合 CPU 密集型的应用(比如科学计算). 事实上,大部分的网站都是 IO 密集型的应用,瓶颈在于读写文件,读写数据库,读写网络,而不是在于计算,从这个角度来说,Node.js 在 Web 领域的确非常有竞争力。

至于 @ty4z2008 说的 Java 和 Golang, Golang 的应用领域是系统编程,即代替一些原本用 C/C++ 编写的网络应用,和 Java 没多少交集。

小葫芦

Jeff Atwood在2007你的博文 The Principle of Least Power中说到:any application that can be written in JavaScript, will eventually be written in JavaScript.

如果没有项目的历史束缚,比如项目已经基于Java或PHP开发多年,完全取代或重写是不可能的,需要成本。社会上Java或PHP程序员仍然占到很大比重,并对NodeJS似乎不太看好,甚至仅仅知道有这么个东西存在而已。NodeJS开发者目前相当一部分是从前端开发工程师发展而来的,自然让人容易想到:前后端都统一用JS了。

NodeJS确实可以完成大部分应用,只是NodeJS从09年出现到现在,应用人群还不够广泛,存在各种质疑(性能、安全、稳定性?)或者老大不允许。毕竟Java、Erlang等已经在线上有大规模应用,经受住了考验,对于NodeJS来说,是抱存疑虑的。这些需要更多NodeJS开发者去努力。

个人感觉:PHP+MySQL造就了曾经的辉煌,而如今的黄金搭档则是NodeJS+MongoDB。

阿神

专业的答案有了,, 吐感想..

Facebook 是 PHP 写的, 我学 Node 的时候就在想早晚被干掉吧.
结果呢 Facebook 开发了 HipHop 的 PHP 编译器,
后来又有新闻发布 Hack 语言引入 Optional Type 提升性能.
我理解就是, PHP 不好, 但是还是被想办法用类似 PHP 的技术替代.

Node 流行跟 JS 开发者基数关系大, 而 JS 开发者多是因为浏览器只能写 JS.
按 Paypal 淘宝等等实践, Node 作为后端服务器够用,
而且一门语言打通前后端的好处不止是降低门槛, 甚至能改变人们对于应用的理解.
比如 Meteor 前端框架, 在浏览器端直接调用 MongoDB 操作等等来加速开发..
其他语言或许能做, 但能不能像 JS 这样带来开发效率的提升就难说了.

具体说语言好坏恐怕关系到社区,编译器,开发者,互联网趋势方方面面分析不清楚
简单说我就是喜欢 CoffeeScript 而且对 JS 很有信心

我觉得 Golang 真心比 JavaScript 设计得好.. 但是做网页的人不完全是专业程序员.
考虑以后门槛变低, 而 Go 的门槛相对高, 我还是认为 JS 更热

小葫芦

不会
到很多人都说java会golang被取代。
因为利益相关的原因,java或5-10年至少没有问题。同样php也是。如果php被取代了那些php程序员干什么去?
到现在为止做.net还有很多。
语言只是一种工具,用好工具很重要。会选择性的使用工具更重要!

阿神

不会。

抛开所谓的nodejs技术上的优点,从之前项目的可替换性角度考虑,想要将所有php的项目换成nodejs无异于开玩笑。

黄舟

PHP因为曾经的简单易学,加上个人主页(PHP设计初衷就是这个)的大量出现,使得PHP技术飞速发展,诞生了大量的开发框架和针对各种其他技术的驱动。但是如今,不管是移动API还是大型网站,或者是设计复杂的网站,PHP都有点吃力了。
js之所以有一统前后端的趋势,少不了json和mongodb的功劳。目前来看,对json支持最好的莫过于js,其次或许是python。不过归根结底,技术没有绝对的好坏,关键看你用在什么样的项目里。在某些小项目里,ThinkPHP这样的小框架也会非常给力的。

PHPzhong

存在即合理!多一种选择不挺好的吗?为什么非要去取代呢?这种问题只会引起口水战。

PHPzhong

你怎么缩进大括号?
ANSI
(ง •̀_•́)ง┻━┻ 去死吧异端。。。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!