zoukankan      html  css  js  c++  java
  • NodeJS学习笔记(一)

    浏览器的构成

    ​ 传统意义上的JavaScript运行在浏览器上,浏览器内核实际分为两部分:渲染引擎和JavaScript引擎。前者负责渲染HTML+CSS,后者则负责解释执行JavaScript。

    1.渲染引擎

    ​ 能够将HTML/CSS/JavaScript文本及相应的资源文件转换成图像结果。不同的厂商开发了不同的渲染引擎,如Tridend(IE)、Gecko(FF)、WebKit(Safari,Chrome,Android浏览器)等。

    ​ 渲染引擎解析过程:

    ​ 如上图所示,浏览器将从服务器请求到的资源加载进内存,输入到HTML解析器,HTML解析器解析,然后构建DOM树,在这个过程中,如果遇到JavaScript代码则交给JavaScript引擎处理,如果遇到样式信息,则交给CSS解析器,CSS解析器则会构建一个内部绘图表示,该内部绘图表示包含了各个元素的位置和大小信息,最终形成我们直观看到的页面。

    2. JavaScript引擎

    ​ JavaScript语言是解释型语言,为了提高性能,引入了Java虚拟机和C++编译器的众多技术。现在JavaScript引擎的执行过程大致是:

    ​ 源代码->抽象语法树->本地代码

    ​ 源代码->抽象语法树->字节码->JIT->本地代码(V8引擎中没有中间字节码)

    ​ JavaScript与编译型语言不通的是它需要一边解析一边执行,而编译型语言在执行时已经完成编译,可直接执行,有更快的执行速度。JavaScript代码是在浏览器端解析和执行的,如果需要时间太长,会影响用户体验,那么提高JavaScript的解析速度就是当务之急。

    ​ V8引擎是一个JavaScript引擎实现,谷歌对其进行了开源,V8使用C++开发,在运行JavaScript之前,相比其它的JavaScript引擎将抽象语法树转换成字节码来解释执行,V8直接将其编程成原生机器码,放弃了在字节码阶段可以进行的一些性能优化,但保证了执行速度,在V8生成本地代码后,也会通过Profiler采集一些信息,使用内存关联缓存来优化本地代码。虽然,少了生成字节码这一阶段的性能优化,但极大减少了转换时间。

    NodeJS的产生

    ​ 站在今天的角度来看,Node的产生似乎是JavaScript发展到一定阶段的必然产物。JavaScript人多,只要是开发B/S应用,不论后台用什么语言,不论是传统的MVC还是现在的前后端分离都提供了大量的JavaScript人员,人多就意味着市场。其次,JavaScript语言独有的优势,单线程而且JavaScript采用函数式编程实现了异步与回调以及事件机制,异步与回调意味着无阻塞编程,试下想,对于高并发,IO密集型的网络应用,一方面进程很长时间处于等待状态,一方面为了应付新的请求不断的增加新的线程,这样的浪费会导致系统支持QPS远远小于数据服务所能够支撑的QPS,如果将JavaScript设计成服务端语言,则可以很好的解决这些痛点。最后,JavaScript作为服务端的语言出现是个空白,这是个机会,所以,NodeJS出现了。

    ​ NodeJS使用JavaScript来搭建服务端运行环境,它具有无阻塞和事件驱动等的特点,采用V8引擎,同样,NodeJS实现了类似Apache和Nginx的Web服务,可以通过它来搭建基于JavaScript的WebAPP。

    ​ V8引擎的出现是NodeJS产生的催化剂。

    NodeJS的优势

    1. NodeJS简单易学

    ​ NodeJS语法完全就是JS语法,只要懂JS基础就可以学会NodeJS后端开发

    2. NodeJS支持高并发

    ​ NodeJS的首要目标是提供一种简单的、用于创建高性能服务器以及可在该服务器中运行各种应用程序的开发工具。

    ​ 首先让我们来看一下现在的服务器端语言中存在着什么问题。在Java、PHP或者.NET等服务器语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2MB内存。也就是说,理论上,一个8GB内存的服务器可以同时连接的最大用户数为4000个左右。要让web应用程序支持更多的用户,就需要增加服务器的数量,而web应用程序的硬件成本当然就上升了。

    ​ NodeJS不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞I/O、事件驱动机制,让Node.js程序宏观上也是并行的。使用Node.js,一个8GB内存的服务器,可以同时处理超过4万用户的连接。

    3. 实现高性能服务器

    ​ V8引擎不局限于在浏览器中运行。NodeJS将其转用在了服务器上,并且为其提供了许多附加的具有各种不同用途的API,更大的提高了性能。

    ​ 关于V8引擎详细,大家可以可以看这篇文章,我就不在这一一赘述了。

  • 相关阅读:
    ActiveJDBC 学习笔记
    selenium相关技术研究(从1.0-3.0)
    如何记录selenium自动化测试过程中接口的调用信息
    TestNG进行接口测试,脚本及可维护性框架
    贪多必失,精通一样再往下一样
    测试开发之路:英雄迟暮,我心未老
    接口测试面试题
    自动化测试中的滚动
    maven配置环境变量失败解决办法
    注释——创建新的类(文件)时,自动添加作者创建时间(文件注释)等信息的设置方法
  • 原文地址:https://www.cnblogs.com/wenha/p/12079176.html
Copyright © 2011-2022 走看看