解析前端,我想须要回答以下几个问题.
1.前端涉及几种技术?分别是作什么的?
2.在前端内部各类技术之间如何整合协做?
3.前端如何和后台交流?
咱们了解Http,HTML,CSS,JS的协做关系,知道DOM树是一切的依托,咱们才会想到经过改变DOM树来操纵网页内的一切.
为何会有Ajax?
咱们了解DHTML的能力,殊不知道其用武之地,后来咱们想到依靠服务端指导.接下来咱们又知道全部服务端内容都是经过Http得到,天然咱们须要JavaScript可以操做的Http对象.
这些问题须要前端开发去发现,去解决.虽然你们都在跟着先贤们的步子走,不多能成为领域的开拓者,可是否了解整个前端技术体系的区别是你是不是在盲目跟风. 区别是当一项新技术出现的时候是否能发现其解决的核心问题以及为解决问题付出的额外代价.
引入新技术的须要付出的额外代价是我要强调的另外一个重点,使用DHTML的代价是什么,严重依赖Ajax的代价又是什么?了解这些而后咱们才能更好的权衡要不要使用.
前端的发展依然在继续,遇到什么问题?如何解决?Cookie容量小,每次随Http发送,是否经过JS在客户端存储更多数据? -- LocalStorage
JS单线程,可否让JS进行大量计算的时候,页面再也不挂起? -- WebWorkers
JS语言过于随意,依赖繁杂,如何组织代码能方便共享智慧? -- CommonJS Modules
Http无状态短链接,可否让客户端更及时收到服务端消息? -- 各类Comet
Http头较大没法压缩,没法一个请求返回多个数据对象,怎么办? -- 使用SPDY协议
解决问题付出什么代价?是否涵盖了全部经常使用浏览器,若是不能是否作到了渐进加强?咱们要不要这样作?这些是作一名合格的前端,作一名对技术架构有影响力的前端,必然面对的问题.
1.前端涉及几种技术?分别是作什么的?
2.在前端内部各类技术之间如何整合协做?
3.前端如何和后台交流?
- HTTP:一切内容经过HTTP请求得到
- HTML:浏览器把HTML解析成DOM树
- CSS:定义HTML的布局和样式
- JavaScript:提供计算能力,处理交互事件
- Cookie:网页间,请求间会话保持(JS能够操做Cookie)
- DHTML:JavaScript操做Dom树(包括CSS)
- AJAX:JavaScript操纵HTTP
咱们了解Http,HTML,CSS,JS的协做关系,知道DOM树是一切的依托,咱们才会想到经过改变DOM树来操纵网页内的一切.
为何会有Ajax?
咱们了解DHTML的能力,殊不知道其用武之地,后来咱们想到依靠服务端指导.接下来咱们又知道全部服务端内容都是经过Http得到,天然咱们须要JavaScript可以操做的Http对象.
这些问题须要前端开发去发现,去解决.虽然你们都在跟着先贤们的步子走,不多能成为领域的开拓者,可是否了解整个前端技术体系的区别是你是不是在盲目跟风. 区别是当一项新技术出现的时候是否能发现其解决的核心问题以及为解决问题付出的额外代价.
引入新技术的须要付出的额外代价是我要强调的另外一个重点,使用DHTML的代价是什么,严重依赖Ajax的代价又是什么?了解这些而后咱们才能更好的权衡要不要使用.
前端的发展依然在继续,遇到什么问题?如何解决?
解决问题付出什么代价?是否涵盖了全部经常使用浏览器,若是不能是否作到了渐进加强?咱们要不要这样作?这些是作一名合格的前端,作一名对技术架构有影响力的前端,必然面对的问题.
"Node.js 是服务器端的 JavaScript 运行环境,它具备无阻塞(non-blocking)和事件驱动(event-driven)等的特点,Node.js 采用 V8 引擎,一样,Node.js 实现了相似 Apache 和 nginx 的web服务,让你能够经过它来搭建基于 JavaScript 的 Web App。"
我想不只仅是NodeJS,当咱们要引入任何一种新技术前都必需要搞清楚几个问题:
1.咱们遇到了什么问题?
2.这项新技术解决什么问题,是否契合咱们遇到的问题?
3.咱们遇到问题的多种解决方案中,当前这项新技术的优点体如今哪儿?
4.使用新技术,带来哪些新问题,严重么,咱们可否解决掉?
咱们的问题:Server端阻塞
如何解决阻塞问题
解决这个问题的办法是,创建一种事件机制,发起查询请求以后,当即将进程交出,当数据返回后触发事件,再继续处理数据:
为何JS适合解决阻塞问题
首先JavaScript是一种 函数式编程语言,函数编程语言最重要的数学基础是 λ演算(lambda calculus) -- 即函数能够接受函数看成输入(参数)和输出(返回值).
函数能够做为其余函数的参数输入的这个特性,使得为事件指定回调函数变得很容易.特别是JavaScript还支持匿名函数
还有一个关键问题是,异步回调的运行上下文保持(称状态保持),
其实在复杂的应用中,咱们必定会遇到这类场景.即在函数运行时须要访问函数定义时的上下文数据( 注意:必定要区分函数定义时和函数运行时这样的字眼和其表明的意义,否则很快就会糊涂).而在异步编程中,函数的定义和运行又分处不一样的时间段,那么保持上下文的问题变得更加突出了.
不少人以为闭包很难理解,其实咱们只要能明确须要区分函数定义和函数运行这两个时机,记住 闭包让函数在运行时可以访问到函数定义时的所处做用域内的全部变量.或者说 函数定义时能访问到什么变量,那么在函数运行时经过相同的变量名同样能访问到.
咱们看到经过JavaScript函数式语言特性,匿名函数支持和闭包很漂亮的解决了同步编程到异步编程转化过程当中遇到的一系列最重要的问题.但JavaScript是否就是最好的?这就要回答咱们引用新技术时须要考虑的最后一个问题了
使用NodeJS是否带来额外的困扰,如何解决
性能真的是最好么?不用比较咱们也能够获得结论NodeJS,作无阻塞编程性能较难作到极致.何为极致,处理一个请求须要占用多少内存,多少cpu资源,多少带宽,若是有浪费就不是极致.阻塞式编程浪费了大量进程资源只是在等待,致使大量内存和cpu的浪费.NodeJs好不少,但也正是由于一些闭包等JS内建机制也会致使资源的浪费
因此我来不负责任的预测一下,性能极端苛刻的场景,无阻塞是将来,但无阻塞发展下去,或者有更轻量的脚本引擎产生(lua?),或者V8JS引擎可能要调整能够disable闭包,或者咱们能够经过给JS开发静态编译器在代码发布前优化咱们的代码.
NodeJS还要解决什么问题
说了这么多,无阻塞编程要作的还远不止这些.首先须要一个高效的JS引擎,高效的事件池和线程池.另外几乎全部和NodeJS交互的传统模块如文件系统,数据访问,HTTP解析,DNS解析都是阻塞式的,都须要额外改造.
正是NodeJS做者极其团队,认清问题问题以及JS解决这些问题方面的优点.基于高效的V8 JavaScript引擎,贡献了大量的智慧和精力解决上述大部分问题后才有NodeJS横空出世.
我想不只仅是NodeJS,当咱们要引入任何一种新技术前都必需要搞清楚几个问题:
1.咱们遇到了什么问题?
2.这项新技术解决什么问题,是否契合咱们遇到的问题?
3.咱们遇到问题的多种解决方案中,当前这项新技术的优点体如今哪儿?
4.使用新技术,带来哪些新问题,严重么,咱们可否解决掉?
咱们的问题:Server端阻塞
如何解决阻塞问题
解决这个问题的办法是,创建一种事件机制,发起查询请求以后,当即将进程交出,当数据返回后触发事件,再继续处理数据:
首先JavaScript是一种 函数式编程语言,函数编程语言最重要的数学基础是 λ演算(lambda calculus) -- 即函数能够接受函数看成输入(参数)和输出(返回值).
函数能够做为其余函数的参数输入的这个特性,使得为事件指定回调函数变得很容易.特别是JavaScript还支持匿名函数
还有一个关键问题是,异步回调的运行上下文保持(称状态保持),
其实在复杂的应用中,咱们必定会遇到这类场景.即在函数运行时须要访问函数定义时的上下文数据( 注意:必定要区分函数定义时和函数运行时这样的字眼和其表明的意义,否则很快就会糊涂).而在异步编程中,函数的定义和运行又分处不一样的时间段,那么保持上下文的问题变得更加突出了.
不少人以为闭包很难理解,其实咱们只要能明确须要区分函数定义和函数运行这两个时机,记住 闭包让函数在运行时可以访问到函数定义时的所处做用域内的全部变量.或者说 函数定义时能访问到什么变量,那么在函数运行时经过相同的变量名同样能访问到.
咱们看到经过JavaScript函数式语言特性,匿名函数支持和闭包很漂亮的解决了同步编程到异步编程转化过程当中遇到的一系列最重要的问题.但JavaScript是否就是最好的?这就要回答咱们引用新技术时须要考虑的最后一个问题了
使用NodeJS是否带来额外的困扰,如何解决
性能真的是最好么?不用比较咱们也能够获得结论NodeJS,作无阻塞编程性能较难作到极致.何为极致,处理一个请求须要占用多少内存,多少cpu资源,多少带宽,若是有浪费就不是极致.阻塞式编程浪费了大量进程资源只是在等待,致使大量内存和cpu的浪费.NodeJs好不少,但也正是由于一些闭包等JS内建机制也会致使资源的浪费
因此我来不负责任的预测一下,性能极端苛刻的场景,无阻塞是将来,但无阻塞发展下去,或者有更轻量的脚本引擎产生(lua?),或者V8JS引擎可能要调整能够disable闭包,或者咱们能够经过给JS开发静态编译器在代码发布前优化咱们的代码.
NodeJS还要解决什么问题
说了这么多,无阻塞编程要作的还远不止这些.首先须要一个高效的JS引擎,高效的事件池和线程池.另外几乎全部和NodeJS交互的传统模块如文件系统,数据访问,HTTP解析,DNS解析都是阻塞式的,都须要额外改造.
正是NodeJS做者极其团队,认清问题问题以及JS解决这些问题方面的优点.基于高效的V8 JavaScript引擎,贡献了大量的智慧和精力解决上述大部分问题后才有NodeJS横空出世.