PHP 和 Node.js 的10项对比挑战

第四轮:开发工具

Round 4:考虑这两种技术所使用的开发工具,Node 因为有开发工具
npm,所以略胜一筹。

Bruno:

虽然,开发者最初受到 npm 的鼓舞,但是现在有 leaps 和 bounds 比 npm
用着更舒服,而且如果你在电脑上安装了同一个库的两个版本的话,leaps 和
bounds 不会让你的系统崩溃。而且相对于 npm 而言,leaps 和 bounds
允许设计者使用递归思想,而递归思想是如此的重要,以至于当开发者准备着手建立一个包管理器时,首先考虑的就是这一点。

npm 还有一个致命的缺点,我把它称为“开发者协作友好”,npm
不能很好地做到这点,对于 npm
而言只有开发者本身能够理解自己写的东西。最后,npm 与 Vagrant
不能很好地兼容,这直接的妨碍了您开始自己工作,就更别说 npm
不关注用户们的需求了。npm 有一个 bug 已经存在了很多年,它导致该软件在
windows 上基本不能使用,这可不算是小问题了。当然 PHP
也有很多愚蠢的错误,但是这些错误并不会与你的系统之间发生问题。

的确,PHP并没有自带编译器,但我不认为它应该这样做。这样的便利不应该由一个包管理器或者说是一个独立的应用来完成。如果将来有一天,有人为
Node
开发了一个很好的包管理器,把它与现有的编译器替换将会极其困难。让它相对独立,人们可以便于切换。此外,安装它仅需要在终端上输入一行代码,或者下载一个安装程序。
书中提到的编译器影响很小的说法,是显而易见的错误。自从PHP开发完成后,编译器就影响了每一位新加入进来的
PHP
开发者,他们中的一些佼佼者不得不将它添加到现有的流程中。只基于编译器存在之前就有很多
PHP
用户的理由,并不能说明它的作用较小。事实上,自从有了它,它就产生了巨大的影响。一些人所说的“对社区造成的影响很少“的言论根本没有事实依据。
现在,我不能在大多数 PHP 开发者都希望安装 Node
这个问题上争论,这是真的事实。可悲的是,很多好的工具都首先基于 Node
下开发,但我仍然希望就像 Node-free 开发环境一样,也可用于开发BowerPHP。

  • MongoDB – 数据库
  • Express – web框架
  • Angular.js – 前端框架
  • Node.js - web 服务器
2.4 状态管理

澳门新浦京电子游戏 1

对于使用框架的大型前端项目,
你也许需要使用状态管理工具去管理你的应用级的状态

  • Redux(Context API)
  • Apollo(GraphQL Client)
  • Vuex
  • NgRx

Bruno:

关于这个保持沉默。

1.2 介绍Node.js:web服务器/平台

Node.js是MEAN中的N。它是MEAN
stack的基石。从本质上讲,Node.js是一个软件平台,它允许你搭建自己的web服务器并且在其上开发你的web应用。Node.js不仅仅是个web服务器,也不是一门语言它包括一个内奸的HTTP
server
library,以为者你不必单独再运行一个web服务器程序比如Apache或者IIS。这从根本上给了你对你的web服务器工作的更大的控制,但是增大了运行使用的复杂性-尤其是再实时环境。

拿PHP来说,你可以轻易的使用一个运行着Apache的共享服务器的web
host,通过FTP发送相同的文件-一切ok-你的网站运行了。webhost已经为你和其他人的使用配置好了Apache。而Node.js却不是这样,你在创建应用饿时候配置Node.js服务器。大多数传统的web
hosts还没有提供Node.js的支持,但是已经有一些新的“平台即服务”的hosts涌现出来满足这个需求,这些公司包括Heroku,Nodejitsu,Modulus.部署网站的方法也不同于旧式的FTP模式,变得更简单了。稍后我们会讲到如何部署一个网站到Heroku.

另一个办法完全靠自己去托管一个Node.js应用到一个你可以安装所有你所需的服务器上。但是生产环境下一个服务器的管理又得写一本书了,你可以单独地交换一部分组件的替代技术,但是如果是Node.js,则构建在其上面的都要改变。

2.1 HTML & CSS框架

澳门新浦京电子游戏 2

HTML/CSS框架目前没有以前那么有意义,
但是我还是介意你选择一个学习(这里作者想隐射的应该是, 在jquery时代,
HTML/CSS框架的学习是必须的).

  • BootStrap
  • Materialize
  • Bulma

James:

我爱 JavaScript。我知道它有它的怪癖,并且我知道一些原因,ECMAScript 2015
将会修改掉一些,并给语言带来一部分令人激动的新特性。JavaScript
是强有力和灵活的,并能适应很多不同风格的编程。与 PHP 对照,我享受使用
JavaScript。Node(Node.js)就是其中之一。

  • full stack开发的好处
  • 概述组成MEAN stack的各个组建
  • 是什么使MEAN stack是必要的
  • 预览本书我们将要实现的应用
1.2 响应式布局

澳门新浦京电子游戏 3

响应式设计将不再是网页的加分项, 而是必须的

  • 设置viewport
  • 非固定宽度
  • 媒体查询
  • 使用rem替代px
  • 移动优先,柱状显示

下面是他们详细的看法…

本章包括

4.9 Web Assembly

澳门新浦京电子游戏 4

类似汇编的二进制格式的代码可以被浏览器执行.
可以使用类似C/c++和Rust等高级语言进行编写.

  • 比JavaScript执行效率快
  • 更安全 – 强制的浏览器同源和安全协议
  • 开放 & 可调试

自己是从事了五年的全栈工程师,不少人私下问我,2019年前端该怎么学,如何进阶到全栈?

没错,年初我花了一个多月的时间整理出来的学习资料,希望能帮助那些想好前端,进阶全栈的小伙伴

这里推荐一下我的前端学习交流群:731771211,里面都是学习前端的从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴。2019最新技术,与企业需求同步。好友都在里面学习交流,每天都会有大牛定时讲解前端技术!

点击:加入

Bruno:

你肯定看错地方了,Craig,PHP 社区令人难以自信地热情和活跃,每年有超过 20
个大会和非常精彩的主题讨论。正是这样才完成了 HHVM 的 PHP7。

另外,我想说的是我很好奇 Node 的开发者们在使用哪个版本来工作(v0.12.5
已经开始在写了),即使经过了 6
年的必展。这是不成熟的和危险的(天啊,你使用一个不稳定的技术,你在故意让你的企业挂掉吗),加上一点,它忽略了一些操作系统中的旧
bug,将导致一些重要的开发人员从这个语言的生态系统中离开。

一些负面的经历让我不喜欢 Node,主要是因为
npm。未来或许会改变,但现在每次使用 Node
都觉得恐惧和失望。我们都有自己的喜好,但保持客观,选择正确的工具来工作是很重要的。但同样重要的是要允许别人试错,因为人人都是马后炮。所以不要听
Craig 的,不要听 Jim
的,也不要听我的。大胆去试,看看什么可以用,找些让你感觉不错的来使用,最终,那些让你感觉富有成效的就是最好的,而不是哪些只能节省一些加载时间的。

1.2.2 快速、高效和可扩展

Node.js流行的另一个原因是-当正确编码时-它尤其快速并且高效利用系统资源。这使Node.js的应用可以比其他主流的服务器技术以更少的服务器资源去服务更多的用户。所以商业公司更喜欢Node.js以降低运行支出,甚至是大幅减少。

这是怎么做到的呢?Node.js轻量使用系统资源的原因是它是一个单线程,不同于传统web服务器的多线程。接下来进行解释:

** 传统的多线程服务器 **

现在主流的web服务器都是多线程的,包括Apache和IIS。每一个新的访问者(或者叫会话-session)分配一个单独的’线程’来分配一定大小的内存,通常是8MB左右。在一个现实世界中,想象两个人进入银行去办理一个独立的业务。在一个多线程模型中他们被一个独立的银行业务员处理他们自己的请求。如图1.3所示。

澳门新浦京电子游戏 5

图1.3 Example of a multithreaded approach: visitors use separate
resources. Each visitor and their dedicated resources have no awareness
of – or contact with – other visitors and their resources.

我们可以看到Simon走进银行的业务员1而Sally是业务员2.两者都不能感知到对方,业务员1全程只处理Simon的交易,业务员2也是一样只和Sally交易。

这种方法工作起来完全可以,只要你又足够的业务员来服务顾客。当银行业务繁忙的时候,顾客超过了业务员的数量,服务开始便忙,顾客不得不等待。通常银行不会多操心这个事情,并且乐于组织顾客排队,但网站就不是这个样子了。如果一个网站响应慢,你将离开并且从不再回来。这就是网站服务器通常过度配置并且配备很多的内存,但通常90%的时间里不会需要的原因。硬件这样配置事为了应付尖峰需求,好比银行只因为在午餐时间业务忙而新增50个全职业务员并搬到一个更大建筑似的。

澳门新浦京电子游戏 ,当然这里肯定有更好的办法,一种更加灵活的?这就是为什么要用单线程的办法。

** 单线程web服务器 **

Node.js服务器是单线程的。不同于给予每一个访问者一个不同的线程和隔离的资源,每一个访问者加入同一个线程,访问者和线程只在需要的时候交互,比如访问者请求什么或者线程回应一个请求时。重新回到银行交易上,这将会只有一个业务员处理所有顾客的业务,但是不是一对一,而是业务员代理任意时间的顾客任务并转交给‘后台办公’并处理下一个请求,图1.4描绘了这个是怎么工作的,和多线程的例子一样的两个请求是如何被处理的。

澳门新浦京电子游戏 6

图1.4 Example of a single threaded approach: visitors use the same
central resource. The central resource must be well disciplined to
prevent one visitor from impacting others.

在这个单线程的方法中,Sally和Simon都把他们的请求给了同一个银行业务员。业务员将第一个请求转交给了最适合处理这种业务的人后就借助处理下一个请求了,并做了同样的转交。当业务员被告知请求的业务完成后,他们将直接结果传递给该业务请求的顾客。

尽管这里并非只有一个业务员,或者顾客互相意识不到其他人,或者他们会被其他的顾客的业务请求影响,这个方法说明银行并不需要一大群业务员,现在,这个模型并不仅仅灵活,同时也更高效,你可以利用更少的资源做更多的事情。这不表示你不再需要添加更多的资源。

这个特殊的办法能够再Node.js中奏效的原因是JavaScript的异步执行机制,在第二章在回调中会讲到。

4.4 TypeScript

澳门新浦京电子游戏 7

TypeScript是一个JavaScript的超集, 它添加了静态类型等很多特性.

  • 变量, 函数等类型
  • 其他ES6的特性
  • 在Angular中被使用到, 同时也可以在React和Vue中被使用

James:

我同意这个说法。Node是一门新技术,所以目前,帮助会少一些。可是当Node越来越成熟的时候,这方面就不是问题了.

1.1.2 full stack开发者的趋势 ?

我们已经看到了前后端开发者将会重新合为一体,并且完全有可能在两方面都很熟练。如果你是一个独立开发者,故们或者拥有多个技能的小型团队,那么你将尤其有价值,并且能够为你的客户提供更多的价值。能够将一个网站或者应用的所有部分都搞定,你将拥有更好的全局控制,并且可以帮助由不同团队开发的不同部分的工作无缝整合在一起。

如果你在一个大的团队中,你需要专精一个领域。然而,更好的建议是理解你的组件如何同其他组件适配,会回报给你对其他团队和整个项目的需求和目标的更好的理解。

最后,你在full
stack上的付出将回报很多。每一部分都有它自己的挑战和需要解决的问题,非常有意思。这个现成的技术和工具会增强经验并且武装我们更快更容易地去完成更大的web应用。

1.4 SASS预处理器

澳门新浦京电子游戏 8

虽然不是必须的, 但是推荐去学, 基础知识的掌握很简单

  • 结构化CSS
  • 变量
  • 嵌套样式表
  • Minxins & 函数
  • 继承

在最近 SitePoint 的 PHP vs Node.js
Smackdown
一文中,Craig Buckler
对两种语言就如何应对一系列的10个挑战进行了比较来决定哪一个总体上更佳。

MongoDB 是在2007年出现的,由MongoDB公司维护(公司前身是10gen).
Express 是由TJ Holowaychuk 在2009年第一次发布,然后迅速成为Node.js
最受欢迎的一个框架。它是一个拥有超过100个贡献者的开源项目并且被活跃地开发和支持。
AngularJS是开源并且被Google支持的。启动于2010年并且被持续的开发和扩展。
Node.js启动于2009年,由Joyent赞助其开发和维护。Node.js
使用Google的开源V8引擎作为它的核心。

2.2 Git和其他工作流工具

澳门新浦京电子游戏 9

Git绝对是每一个Web开发者必须掌握的工具,
这里也有一些其他的工作流工具的建议.

  • 基础的命令行(touch, cd, mkdir什么的总得会,
    命令行在下面的工具中都会用到)
  • Git
  • NPM 或 Yarn
  • Webpack 或者 Parcel
  • Gulp 或者 Grunt(任务管理和构建工具)
  • 编辑器插件(ESLint, Prettier, Live Server等)

Bruno:

我非常不同意这个观点。PHP的语法中的确有一些怪象,其中的很多已经被修复了,在新的版本中,还有很多要被移除。另一方面,JS中也有“this”这个问题~

关于bullet 3
(开发的时候,使用js你不需要在client端开发和Server端开发的时候做切换),我不同意这个观念。服务器环境和客户端的开发环境已经完全不通了,大脑中的切换还是需要的。总是有些新的语法你不能再浏览器中使用,反之亦然,所以这某种程度上也是语言的切换。

Bullet 4 (理解 JS 会让你更希望使用它)  这从某种程度上来说我是赞同的。
我在工作中使用 JS 和 PHP多年,使用 JS
的时间更久,但我对它却喜欢甚少——尽管那纯粹是个人倾向。

1.1.3 MEAN的特别之处?

MEAN
stack将一些“最好的品种“的现代web技术带入一个强大的灵活的stack。最强的是它不仅仅只在浏览器中使用JavaScript,而是在所有地方都使用JavaScript。使用MEAN
stack,无论前端还是后端,都使用同一们语言,这是由Node.js的功劳,将JavaScript带入后端开发中。

1.5 原生JavaScript语法

澳门新浦京电子游戏 10

不使用任何框架和库区学习原生的JS语法

  • 数据类型, 函数, 条件判断, 循环, 凑总府
  • DOM操作和事件
  • JSON
  • Fetch
  • ES6+(箭头函数, Promise, async/await, 解构)

第五轮: 环境

第5轮要说的是技术的可用性和部署情况,以及被哪些平台和生态系统支持。Craig
对于这一点也不十分明确,但是看起来似乎更偏向于 Node。

Bruno:

Craig 说他曾比较 PHP 和 Node 在 web 方面的优势(常见的 web
开发问题),然后说到处都用到了 JS。首先,我们来比较 Node.js,而不是 JS
本身,其次,我们比较了两种语言在什么环境下可以运行。猴子比鱼要厉害,因为鱼太蠢了不能爬树,但是猴子和鱼都会游泳。那么我们来比较它们做得怎么样吧。

在 web 开发环境中,PHP 获胜了。这里是一些基于 PHP
的桌面程序工具——是的,也许你不会使用它们,但你一定会用这些基于 PHP
的命令行程序。

1.3 介绍Express:框架 (… 待续)

3.4 服务端渲染

澳门新浦京电子游戏 11image

像React, Vue 和 Angular等端架都可以进行服务端渲染

  • Next.js
  • Nuxt
  • Angular Universal

第九轮: 程序员情结

第九轮来看一看 Craig 觉得一般程序员们对于 PHP 和 Node
有多少感情,最后他认为,Node 获胜了。

1.2.1 JavaScript:贯穿stack的唯一语言

Node.js或者广泛流行的一个主要原因是其编程语言是大部分web开发者已经熟悉了的语言-JavaScript。到现在为止,如果你像成为一个full
stack开发者你最少需要熟悉两门语言-JavaScript作为前端和其他比如PHP或者Ruby
on Rails作为后端。

微软对服务端JavaScript的突袭
在1990年微软发布的ASP中,ASP既可以用VBScript,也可以用JavaScript编写,但是JavaScript的版本并没有发展起来,主要原因是,当时大多数人对VB很熟悉,跟VBScript差不多,这导致大多数的书和在线资源都是关于VBScript的,最终成了经典的ASP的标准语言。

现在,随着Node.js的发布,你可以利用你已经了解的JavaScript并把它用到服务端上。学习一门新技术最难的部分通常是学习这门技术的语言,办事你已经通晓一些JavaScript了,所以你已经踏进一步了!

当然,说到Node.js,这里也有一条学习曲线,甚至对于一个有经验的前端开发者也不例外。后端编程不同于前端是无关技术的都会遇到的挑战和困难。在前端,你主要关心在不同的设备上的不同类型的浏览器中前端都能够正确地工作。而在后端你将更多地去关注代码流程,确保系统不会卡住并不浪费系统的资源。

1.1 HTML & CSS

澳门新浦京电子游戏 12

最基础的知识:

  • 语义化的HTML元素
  • 基础的CSS语法
  • Flexbox & Grid
  • CSS变量
  • 浏览器开发者工具

澳门新浦京电子游戏 13

1.1.1 web开发的一个简短历史

早期的web开发,人们并不对网站有过高的期望。在页面展示上要求不高,更关注后台能做什么,比如如果你会用Perl讲一些HTML串起来,就算是个web开发者了。
随着互联网开始扩张,企业开始更加关注网络形象对其自身的影响。在更多的浏览器支持CSS和JavaScript后,这些期望开始出现更复杂的前端实现了。web开发已经不仅仅是将HTML组织在一起了,你需要花点时间在CSS和JavaScript上,确保它正确工作并做好。并且需要对不同的浏览器都支持,那会儿还不像今天这么蛋疼。
这个时候开始区分前端开发者和后端开发者了。图1.1描述了这个分开时间。

澳门新浦京电子游戏 14

Figure 1.1 The divergence of front-end and back-end developers over time

当后端开发者集中精力忙活后台的运行机制时,前端开发者集中精力在提高用户的使用体验。时光匆匆,两大阵营都持续发展,而对其期望也越来越高。开发者通常需要选择一个专业并集中在这个领域。

** 使用库和框架帮助开发者 **

在2000年中,库和框架开始变得流程并且在最常见的编程语言中很普遍,前端后端都有。想想Dojo和JQuery前端JavaScript框架,PHP或者Ruby
on
Rails的CodeIgniter。这些框架被设计成方便开发者更容易地开发。一个好的库或者框架抽象了一些复杂的开发,允许你更快地编程并且不需要太深的专业要求。这种简化趋势使得full
stack开发者呈现了活力,能够同时搞定前后端。在图1.2中可以看到。

澳门新浦京电子游戏 15

Figure 1.2 Impact of frameworks on the separated web development
factions

图1.2指出了“所有的web开发者都应该成为full
stack开发者”的权威论断,因此在full-stack开发者到处都是之前,最可能的是一些开发者会选择专门在前端或者后端开发。展示这个的意图是通过框架和现代工具的使用你不再需要选择专攻那一方面。

拥抱框架的一个最大的好处是个人可以极大地提高生产力,从而可以对应用和它的组合的所有方面都看到。

跟随框架的趋势,最近几年越来越多地将应用逻辑从服务端转移到前端。一些比较流行的JavaScript框架如AngularJS,Backbone和Ember就是这么做的。
将应用的代码带入前端模糊了传统的前后端开发。这么做的一个原因是可以减少服务器的压力,减少支出。将原来应用所需要的计算资源转嫁到客户的浏览器端。我们将会在本书的后边章节讨论这样做的优点和确定,以及如何判断需不需要使用这些技术。

3.6 DevOps 和部署

澳门新浦京电子游戏 16

学习语言和框架是一回事, 但是安装环境, 测试和部署有事另外一回事

  • 部署 (Linux, SSH, Git, Nginx, Apache)
  • 平台 (Digital Ocean, AWS, Heroku, Azure)
  • 可视化(Docker, Vagrant)
  • 测试 (单元测试, 集成测试, 函数式测试, 系统测试)

第二轮: 帮助和支持

第二轮会考量在两种语言中,获得帮助和支持的难易程度。PHP赢得了这一轮,主要因为它出现的更久一些。

MEAN stack 的名字来自四个技术,分别代表:

4.3 GraphQL & Apollo

澳门新浦京电子游戏 17

GraphQl是对于API的一种革命性新方法,查询语言比标准RESET严格得多

  • 只查询你想要的东西
  • 前端和后端可以合作得更为顺利
  • 查询语句非常简单且很像JSON语句
  • Apollo是一个发送请求到GraphQL的客户端
  • 使用的是Gatsby静态站点生成器

James:

Node
以高性能低延迟的运行时环境而闻名,而且它也找到了属于自己的方式来嵌入部分500强公司的代码栈。由于它的无阻塞
I/O 机制以及 Google Chrome V8 引擎技术,现在 Node
已经成为了“快速”以及“可扩展的”的同义词。 现在网上有很多故事,像Node
如何让公司获取更好的性能提升 以及给开发者提供更高的生产力。我很高兴,这回合
node 胜,但我也理解有人质疑这点。

1.2.3 通过npm使用预先建立好的包

NPM是一个包管理器,在安装Node.js的同时也被安装。它可以下载Node.js的模块或者包去扩展你的应用的功能。截至现在已经有超过46,000个包可以通过npm使用,有如此之多的深度知识和经验供你应用到你的应用中。

npm中的包差异极大,我们将使用其中一些到应用的框架和数据库的schema支持。其他的一些例子包括帮助库underscore,测试框架mocha以及其工具如colors可以在Node.js的终端日志中增加颜色支持。

Node.js非常强大和灵活,但是并不能在你创建一个网站或应用的时候给出多大的帮助。Express就是来帮这个忙的,它可以通过NPM来安装。

4.5 无服务架构

澳门新浦京电子游戏 18

无需创建和管理自己的服务器

  • 使用第三服务执行“无服务器功能”
  • 例如 AWS, Netify & Firebase
  • 在Gatsby静态站点生成器很流行
  • 无服务框架

第七轮:主机和部署

第七轮会看看将新应用部署到 Web 服务器是否容易,在 Craig 看来,PHP
在这方面明显是赢家

Bruno:

Bruno 再一次保持沉默。

James:

这是 Node 需要努力改进的区域。每个提供 Web 主机的公司,都提供了 PHP 和 
MySQL。你想看到输出,只需要建立一个以“.php”为扩展名的文件,在<?和?>间写一些有效的代码,上传,用浏览器访问。但同样的方法不适用于Node。当然,Node
主机有很多选项,但是它们需要更多的设置和命令行方式的访问,这对于初学者来说可不愉快。毫无疑问,PHP
在这一轮赢了对手。

当我们说到full stack
development时,我们是指开发一个网站或者应用的所有部分。它开始于数据库和web服务器的后端,包含中间层的应用逻辑和控制,而在前端负责所有与用户的界面交互。

3.7 满足全栈工程师的条件

澳门新浦京电子游戏 19

  • 设置全栈的开发环境和工作流
  • 构建后端服务API和微服务
  • 数据库操作
  • 能够独立开发应用
  • 部署到云端(SSH, Git, Servers等等)

Craig 在书中讲到,这些比较总是有些矛盾。作为一个有意思的随访,我们要求
Bruno Škvorc (SitePoint 的 PHP 开发者)和 James Hibbard (SitePoint
的一个 JavaScript 开发者)对每一轮提供评论。

如果你和我一样,估计早已迫不及待地想要去深入代码并开始创建什么东西了。但是让我们先花点时间来简要说明什么是full
stack development 并对组成stack的各个组件部分进行了解,确保都讲到。

3.2 服务端框架

澳门新浦京电子游戏 20

不要重复造轮子, 学习一门框架去构建更好和更快的应用

  • Node.js(Express, Koa, Adonis)
  • Python(Django, Flask)
  • PHP(Laravel, Symfony)
  • C#

Bruno:

错误比比皆是。首先,这篇文章 有关于性能的详细讨论, 其中排除了开发者经验以及应用类型对性能的影响。如果那篇文章依然无法让你明白抛开上下文谈性能有多愚昧,那来我来谈谈我的观点:

  • PHP
    正在嵌入一个多线程服务器。这使得完全绕过外部服务器成为可能,但暂时还不推荐使用。另外也有一些超快速的的服务器(像
    Nginx),他们使得整个启动 PHP、派发请求的过程快到可以忽略。
  • PHP 的原生异步 (无阻塞 I/O)支持将在 PHP7 中推出,而且多年前 ReactPHP
    就实现了类似的模式,因此这一点也毫无意义。
  • PHP single-request
    的生命周期模式是最大的负担。确实,如果你单纯的追求速度,但是这条依然可以很容易绕开,不止可以通过
    Memcached 和 Craig 说的类似的方法, 而是通过类似;Ajax
    的方法。顺便说一下——服务端 JS 应用默认也是
    single-request的。另外——这种 single-request
    的生命周期也是一种优势,每次请求重新构建应用,避免了很多内存问题,清空垃圾内存,保持苗条干净。你上次使用一个稳定的长时间运行的的无内存泄露的
    Javascript 应用是什么时候,不论前端或后端?

关于性能的讨论现在是,而且以后也将是——平局(除非你用的是 Java,那 Java
一定输)

1.1 为什么学习full stack

实际上,为什么要学习full
stack呢?好像是糟糕的好多工作啊。是的,它确实很多,但是回报也很大。而且有了MEAN
stack,并非想你想象的那么难。

3.3 数据库

澳门新浦京电子游戏 21

绝大多数觉得应用都会使用到数据库, 这里有一些选择:

  • 关系型数据库(MySQL, PostgreSQL, MS SQL)
  • 非关系型数据库 (MongoDB, Counchbase)
  • 云服务 (Firebase, AWS, Azure, DocumentDB)
  • 轻量级(SQLite, NeDB, Redis)

James:

我很高兴有人加入Node。

我喜欢
npm。它易于安装,易于使用,并有数以千计的包可用于几乎任何需要。我也喜欢这样的事实,npm
可以选择全球的和本地的程序包(相比之下,一些语言如Ruby,它的标准需要将你的程序包安装在你的
Ruby 版本的旁边)。它的工具也很棒。一些工具,例如 Bower 和
Grunt,在我工作流中都有一个固定的位置,它们成倍地提升了我的工作效率。
另外值得一提的是,npm 已经开发出了第3版的 β
版。它解决了 Bruno
提到很多问题,例如嵌套node_modules 方法错误等。

下文引用自entire smackdown:

   
PHP开发人员可能希望(或需要)在某些场合安装Node.js。反过来不是真的。

4.1原生应用开发

澳门新浦京电子游戏 22

  • React Native(使用React构建原生应用)
  • NativeScirpt(Angular, Typescript, JavaScript)
  • Ionic (HTML/CSS/JS 实现混合应用)
  • Flutter (使用Dart语言开发原生应用的移动端SDK)
  • Xamarin (使用C#开发的移动端应用)

第十轮:未来

第十轮着眼于两种语言的前景,基于两种语言在现阶段看起来都有一个前程强劲的未来,Craig
断定这一轮的结果是平局。

Bruno:

Bruno 不得不赶快去写多写一些关于 PHP 的文章,还要维护那让人惊叹的
SitePoint PHP 频道。

James:

James 也等不及要回到他挚爱的 JavaScript 频道,但是他留下了这些观点:

平局对于这一轮来说是公平的。Node 是一颗崛起的明星,但是如果想撼动 PHP
的宝座,他还需要付出巨大的努力。

总的来说,如果锤子是你唯一的工具,那么每个问题看起来都像一颗钉子。Node
并不会完美适配于每一个方案,当然很多时候不使用 Node
也是非常合理的。然而,Node
能做到的,他可以做得非常好。这完全由你自己来做一个明智的决定,去选择一个适合自己项目的最好的工具。

既然 Bruno 和 James 都发表了自己的观点,那么你是怎么看这个问题的呢?

Bruno Skvorc

克罗地亚的程序员Bruno拥有计算机科学,英语和文学三个硕士学位。他是
SitePoint 网站 php 专栏作家,还是 Diffbot.com 的开发布道者.
他避免像瘟疫一样的遗留代码,挑选项目是尽管使用最新技术,他还是一个 treadmill
desk enthusiast 和活板玩家,他有一个博客:sometimes blogs.

James Hibbard

我是一个网站开发者,目前居住在阳光明媚的德国北部。我喜欢使用 JavaScript
和 Ruby 编程,你在SitePoint 的 javascript
论坛经常能看到我。不写代码时我喜欢跑步。

3.1 学习一门后端语言

澳门新浦京电子游戏 23

成为一个全栈工程师或软件工程师, 你将需要学习一个服务端语言和相关技术

  • Node.js
  • Python
  • PHP
  • C#
  • Go

学习的顺序:

  • 基础的后端语言语法
  • 数据结构和工作流
  • 包管理
  • HTTP/路由

第三轮: 语法

第三轮比较了理解两种语言语法的难易程度。Craig判定这一轮Node获胜。

3.5 内容管理系统

澳门新浦京电子游戏 24

内容管理系统允许快速开发并为您的客户提供更新内容的能力.
在你需要快速开发网站的时候, 它们是很适合的. 特别是对于自由开发者.

  • 基于PHP的 (WordPress, Drupal)
  • 基于JS的 (Ghost, Keystone)
  • 基于Python的 (Mezzazine)
  • 基于.Net的 (Piranha, Orchard CMS)

James:

Node 很火,在 Node 的领域有很多创新,尽管激情是不客观的,但很高兴 Node
赢得了这一局。

1.3 基础的部署工作

澳门新浦京电子游戏 25

学会如何部署一个静态网站到服务器

  • 注册一个域名(NameCheap, Google Domains)
  • 管理共享主机或虚拟机(Inmotion, Hostgator, Bluehost)
  • FTP, SFTP 文件上传(Filezilla, Cyberduck)
  • 静态页面托管(Netlify, Github Pages)

第八轮: 性能

第八轮 主要关注速度。虽然这项经常依赖于经验以及开发团队到底多上心,Craig
注意到 Node 在一些方面的优势。

4.2 使用Electron开发桌面应用

澳门新浦京电子游戏 26

Electron是一个使用JavaScript构建跨平台的桌面应用工具.

  • 使用到了 Chromium内核和Node.js
  • 兼容Windows, Mac & Linux
  • 崩溃报告, 调试和性能分析

第一轮:开始

Round 1 挑战是看你用每种语言多快可以构建一个“Hello
World”的页面。这个包括搭建服务器环境所花的时间。

据 Craig 估计,PHP
赢得这一轮,部分原因是因为这种语言“概念上更简单”,并且“对于新的开发者来说不那么吓人”。

Bruno:

PHP
赢得”开始”这一轮纯粹是因为更多的主机支持这种语言因此开始非常简单。这是拿来就好用了而不需要做额外的事情。如果更多的主机忽略使用
Node 命令行而直接采用文件上传的方式,并且在控制面板上用一个简单的
“reload app”
键,那么两者将会一样。然而就在屏幕上显示东西的实际语法而言,PHP
是更简单些——特别是对那些没有编程经验的人而言。

James:

当在本地机器上开发的时候,我没有在两者之间看到很大的不同。在你的浏览器上运行
PHP 脚本,你需要安装一些服务器软件;要运行 Node 脚本,你需要安装
Node, 并且最好安装一个 web 框架比如express. 然而,正如 Craig 说的,
PHP“概念上更简单”.Node 的进入门槛更高。对此没有争议。

2.5 满足一个成熟的前端开发者条件

澳门新浦京电子游戏 27

  • 构建一个优秀的前端应用
  • 流畅和稳定的前端工作流
  • 多人开发 & 熟练使用Git
  • 请求后端API & 前端数据响应

满足以上条件, 你能够顺利的找到一个前端的工作并干得很出色~

James:

我和 Craig 又一次达成一致。一些特性让 Node.js
变得如此流行(速度,可扩展性,与 JSON
密切相连,低资源占用)使它适合于许多其他类型的应用程序,例如强有力的物联网设备。我觉得,谁会不喜欢机器人呢?

Node 使得项目获得了提升,诸如NW.js(一个基于 Chromium 和 Node.js
的应用),它允许你在 HTML 和 JavaScript 上编写本地 APP。这多令人兴奋!

4.7 区块链技术

澳门新浦京电子游戏 28

现在许多公司使用区块链技术进行数字交易, 因为它们更安全和有效率.

  • Solidity(一门智能合约的编程语言)
  • Mist(以太坊开发的浏览器, 用于发送交易和合约)
  • 比特币API(可以构建app和整和比特币的区块链开发)

第六轮: 整合

第 6 轮我们来看一下数据库和驱动的整合方面,PHP
胜出主要是因为它的年龄比较大。

Bruno:

整合方面其实是平局的,PHP
有年龄的优势,可以有更多可选项,但是也意味着要照顾很多过时技术,如 mysql
扩展 —— 我们可以升级到 PHP7 来摆脱,但多年来一直不可用。

James:

我当然同意这个观点,这虽然看起来模糊其词,而且我很喜欢这个例子:“过时的,更受欢迎的技术”。这也很好突了
Node一个很大的优点 —— 它原生支持 JSON。JSON 或许是 web
中最重要的数据传输格式了,同时也是最新的 NoSQL
数据库的通用结构。JavaScript 程序中使用 JSON
是非常容易的,意味着当你使用 Node
工作时,数据可以非常简洁地进行传输,不用进行格式转换了。你可以只使用一种语法(JSON
格式)传递在浏览器、服务器和数据库之间。

4.6 AI和机器学习

澳门新浦京电子游戏 29

AI和机器学习已经被广泛应用在所有的程序和技术中, 甚至包括web开发中.

  • 机器学习可以允许Web应用程序随时间进行调整
  • 虽然AI还有很长的路要走, 但是我们会看到它会更多的用在web中
  • 虽然目前绝大多数都是Python写的,
    但也有Tensorflow.js和Brain.js这些JS的库
2.3 前端框架

澳门新浦京电子游戏 30

学习一个前端框架在目前前端开发中是必须的,三选一:Vue, React, Angular.

  • 在大公司开发中非常流行
  • 更多的交互 & 有趣的UI组件
  • 组件化 & 模块化前端代码
  • 对团队有利
4.8 PWA

澳门新浦京电子游戏 31

Progressive Web Apps是一个web
app但是在功能和样式上给用户带来原生应用使用体验的一项技术.

  • 响应式
  • 在离线环境下也能够提供服务
  • 类似App的交互
  • HTTPS
  • 可靠, 迅速, 更好
1.6 满足了基本的前端开发者的条件

澳门新浦京电子游戏 32

  • 构建静态站点
  • 构建UI布局(拿到设计图能够使用HTML/CSS还原)
  • 添加一些交互功能
  • 部署和维护网站

现在能找到最低水平的Web开发工作, 但是这是远远不够的….

你不需要学习所有的技术成为一个web开发者,这个指南只是通过简单分类列出了技术选项。会介绍通用的知识,
最后介绍2019年的Web的一些趋势。

发表评论

电子邮件地址不会被公开。 必填项已用*标注