• 2014第2周一


    2014第2周一
    今天过来发现findbugs检测报错对long[] ids对象不能直接调用ids.toString 方法,而是要调用Arrays.toString(ids)操作 。学习liang
    解析前端,我想需要回答如下几个问题.
    1.前端涉及几种技术?分别是做什么的?
    2.在前端内部各种技术之间如何整合协作?
    3.前端如何和后台交流?
    1. HTTP:一切内容通过HTTP请求获得
    2. HTML:浏览器把HTML解析成DOM树
    3. CSS:定义HTML的布局和样式
    4. JavaScript:提供计算能力,处理交互事件
    5. Cookie:网页间,请求间会话保持(JS可以操作Cookie)
    6. DHTML:JavaScript操作Dom树(包括CSS)
    7. AJAX:JavaScript操纵HTTP
    为什么会有DHTML?
    我们了解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协议

  • 解决问题付出什么代价?是否涵盖了所有常用浏览器,如果不能是否做到了渐进增强?我们要不要这样做?这些是做一名合格的前端,做一名对技术架构有影响力的前端,必然面对的问题.
"Node.js 是服务器端的 JavaScript 运行环境,它具有无阻塞(non-blocking)事件驱动(event-driven)等的特色,Node.js 采用 V8 引擎,同样,Node.js 实现了类似 Apachenginx 的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横空出世.
 
   


来自为知笔记(Wiz)


  • 相关阅读:
    oracle minus 与sqlserver except
    Ext.form.FieldSetI(转)
    C#系统服务定时执行(转)
    extjs4.0的数据代理proxy及数据模型的使用(转)
    JS属性defer的好处及IE8 提示 KB927917, IE6 IE7 提示操作已中止的解决办法
    水晶报表打印及多个报表打印到一个PDF文件里的办法
    C#不添加引用,动态调用webservice(转)
    向 ReportViewer 报表中添加页眉和页脚,控制页眉显示变量的值
    网站主要使用jquery总结(转)
    JSBuilder2使用方法(转)
  • 原文地址:https://www.cnblogs.com/doit8791/p/3507845.html
  • Copyright © 2020-2023  润新知