nodej.js如何完成java服务器端开发的排行榜清0工作

从我大一接触第一门编程语言C开始,到现在工作三年陆续接触到了C、汇编、C++、C#、Java、JavaScript、PHP,还有一些HTML、CSS神马的,从来没有一门语言让我像对node.js一样的着迷。接触nodejs在我之前博客提到过在搞web socket在选择服务器的时候很多人推荐nodejs版的,无奈当时对nodejs没有任何概念,所以没看懂人家写的代码,但是感觉很熟悉,网上基本是以在服务器端运行的javascript来解释什么是nodejs,这就让我更疑惑了,javascript怎么可能做socket服务器,在用C#写出服务器后回头看了一下node.js,十分钟之后我就被完全吸引住了。
补记:由于写博客是对nodejs处于了解语法阶段,很多问题没有说清楚,点反对的人不少,关于一些原理性东西可以看看
什么是node.js
到底什么是node.js呢?看看对nodejs的描述:
Node.js is a platform built on&&for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
我们可以对此总结出几点
node.js是一个构建在Chrome JavaScript运行环境的平台,这是很重要的一点,node.js并不是一门语言,而是一个平台
node.js致力于使构建速度快、稳定的网络程序更简单
node.js具有事件驱动和非阻塞I/O的特色,使之轻量级并且高效率
node.js非常适合在分布式设备运行数据密集型实时应用程序
服务器端运行的JavaScript?
Chrome JavaScript runtime也就是我们常说的 Chrome的V8 JavaScript Engine,也就是Goole开发的一个用于Chrome浏览器的底层JavaScript引擎,用于解析JavaScript语句创建其运行环境,保证我们写的语句在浏览器上的表现和我们预期的一致。
那么为什么说node.js是服务器端运行的JavaScript?好好地nodejs干嘛要和V8扯上关系?除了Google搞的V8解释JavaScript十分的快,十分重要的一个原因是V8 JavaScript 引擎并不仅限于在浏览器中运行,可以嵌入任何应用程序中运行。Node.js 和.net framework类似是一个平台(这里有些搞不明白,望大神们指点一二),但它没有像.net一样创造了一门语言&&C#在这个平台上运行,而是很巧妙的借用了web开发人员已经非常熟悉的JavaScript语法,使用V8引擎来解析语句,并将其重建可在服务器上使用。所以严格上说node.js并不是服务器端运行的Javascript,而是可以在服务器端运行JavaScript语法的平台。&
为什么要用node.js
搞了半天就是一个新瓶装旧酒的东西,看起来除了一个新鲜的可以使用JavaScript语法,node.js没什么长处,为什么要用它而不是同样可以在服务器端运行的Java或C#呢?这要从node.js事件驱动和非阻塞I/O的特色谈起。关于事件驱动熟悉JavaScript的同学应该很熟悉了,node.js采用一系列&非阻塞&库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口,比如一个数据库访问,采用事件机制,发起请求之后,立即将进程交出,当数据返回后触发事件,再继续处理数据。
在传统的阻塞I/O中其运行过程是这样的
int num=query('select * from ......');
print(num);...................//无关语句
print方法必须等待query方法返回结果,如果数据库出现网络连接故障,那么print方法就要等到超时才能执行,然后后面一些无关语句才能一次执行,而在非阻塞I/O中是这样的
query('select * from...',callback(data){
.............//相关语句
..............//无关语句
跟我们使用ajax,在回调函数中处理结果,但是不影响下面语句执行。 怪不得node.js要借用JavaScript来做此事,JavaScript的几个特性使它很胜任这项工作
函数式编程,支持匿名函数,函数参数
Node.js中代码是单进程、单线程执行的(我们写的代码是,但node.js本身不是有兴趣同学可以看看进一步了解),使用事件轮询机制和非阻塞I/O,在不新增额外线程的情况下对任务进行并行处理 。node.js解决了阻塞式编程浪费大量进程资源只是在等待,导致的大量内存和cpu的浪费问题,所以才敢宣称自己perfect for数据密集型的实时web 应用程序。
nodejs的安装还是很简单的,尤其是现在安装包都把npm集成了进去,不用单独安装了,下载下安装包运行就可以了,另外想完整使用nodejs的话需要有C语言的编译环境、git和python,使用window的同学很能会稍微麻烦一些,需要搞定这些。对命令行情有独钟的同学可以看看
npm是node packaged modules的缩写,其实是一个nodejs的module的管理工具
什么是module
所谓module和java中的包的概念很类似,一些解决方案的集合,官方会提供核心的几个,第三方的很多
如何安装第三方module
因为nodejs的社区很活跃,有很多好用的第三方的包,我们可以在终端中使用npm的命令安装
npm install [-g] &name&:使用install指令可以把nodule下载安装的nodejs的全局的path处,不加的话会安装到当前路径
npm remove &name&:移除module
npm update &name&:更新 module
还有一些常用命令可以看看
第一个demo
&这些都搞定后我们就可以写传说中的hello world了。在任意目录建一个test.js文件
console.log('Hello, World!');
简单的一句话就可以,然后使用node命令运行
&这这这。。。太没技术含量了,看看官方给的demo,使用nodejs创建一个web server有多简单
var http=require('http');//引入http module
2 http.createServer(function(request,response){//创建一个web server
//回调函数,这样创建server方法就不会阻塞了
response.writeHead(200,{'contentType':'text/plain'});
response.end('Hello World!\n');
6 }).listen(8124);
7 console.log('Server running at http://127.0.0.1:8124/');
&先运行一下服务器,按两次Ctrl+C退出
使用浏览器访问一下
就这么简单
看到上面的demo是不是也对nodejs产生兴趣了呢,可是像我这样的懒人接触一门新语言的时候不知道该如何下手,难道又要去做个无聊的购物车神马的嘛,学习nodejs不用,nodejs为我们提供了一个小游戏一样的教程,就像个寻宝过程从零开始,没步都有一个任务和一下提示让你走的更远,上下载然后开始寻宝吧,我就是被这小游戏迷住了,顺便秀一下我一天的战绩,每个任务都完成了
看看解释就知道怎么做了,不过建议最开始run和verify结合使用,verify告诉你执行结果和预期结果,run会告诉你有哪些错误
&当然除了这些小游戏帮我们熟悉nodejs语法及使用,一些优秀的社区也可以帮我们很多
阅读(...) 评论()如何选择前端架构:服务器端HTML vs. JS部件 vs.单页Web应用
发表于 09:17|
来源pamela fox's blog|
作者pamela fox
摘要:本文作者根据自己的实际经验,对服务器端HTML、JS部件、单页Web应用进行了很好的总结与分析,以及谈到了开发人员在选择架构时需要考虑的几大因素。
这是作者在GOTO芝加哥会议上发表的一篇关于“前端架构的前世今生”的主题演讲,下面是笔者对原文的翻译:在近日举行的上,我发表“”为主题的演讲。在过去的10个月,我体验到了前端架构所带来的欢乐与痛苦,下面我将和大家分享我的使用心得。
如何选择架构?
我们可能会通过Twitter或者看到一群年轻小伙正在讨论某个架构,然后就做出选择。但这似乎有点不太靠谱,我们应该使用更科学的方法来做决定,并且需要搞清楚,对前端工程师来说,什么才是最重要的。
下面,我们来谈谈用户在选择架构时,会关心哪些东西:
易用性:可以做他们想做的事情,快速直观相关性:可以标记或链接网站可搜索性/共享性:用户可以分享他们正在使用的社交网络,并且可以在Google上发现它(这对用户增长是很重要的)。更多的功能,更少的bug
那么作为开发人员,又会在乎哪些属性:
开发效率:开发人员希望能够快速地迭代、尝试新的东西和实现功能。可测性:开发者希望代码不容易被打破,他们不愿意花时间去维护腐朽、易碎的产品。性能:开发者希望服务器能够做出快速响应,并且服务最小的请求数。用户无需花费不必要的等待时间。
当程序员灵活运用自己满意的架构时,心情也会不一样,产品也能得到快速改进和提升,这样用户的满意度也随即会提升。
下面让我们对比几个架构,当我们回顾这些架构时,你会发现一些本质的区别。
服务器端HTML(“Web 1.0”)
站在用户角度来看,其可用性较差,用户很难在短时间里做出太多交互。但在相关性、共享和可搜索上却有一定的好处。
但作为开发者,我不喜欢该架构,为什么?所有的数据都与HTML捆绑在一起,当我想把JS文件拽进去时,它就变得很混乱。此外,它还关系到特定的后端语言,如果我们想改变语言(转换成Scala/Play),就必须重写表现层。如果开发者要想以优雅地方式使用它,模板倒是个不错地选择。但要想实现跨语言,还是不大可能。
在我们的项目中,对HTML里的一些特定属性(比如data-coursera-forum-threads-widget),我们使用DIV,然后引用一个widgets.js文件,再把这些DIV层插入到Backbone视图里。
采用这种方法可以创建动态的接口,并且可以实现实时更新,如果我们有服务器端URL和散列状态,我们就可以进行很好地相关。但我们不能使内容在小部件中可共享和可搜索,因为bots(机器人)根本不理解JS。
就开发者而言,通常会创建API来使用JS小部件,并且对API进行很好的测试,这也意味着同一个数据,开发者可以更容易地创建不一样的前端效果,开发者也可以重用相同的API。
与此同时,开发者需要花费更多的时间来测试前端,因为用户可以通过交互序列改变状态,这样bug就会不定时地出现。
单页Web应用
在上,我们为每个URL提供相同的HTML文件,HTML文件里仅包含require.js文件和一个加载route.js的调用。这些route文件把URL映射到Backbone的视图上,然后依靠Backbone route来弄清哪个视图需要加载,并且使用HTM5的历史API来管理历史(在老版本的浏览器上使用带后退的哈希技术)。
在使用JS小部件和单页Web应用时,我体会到了许多相同的优点和缺点,但还是有些实质的不同。由于缺乏完整的页面加载,我们可以有一个潜在快速地用户体验,但它很难去做一些简单的事情,比如内链(在老版本的浏览器上会以双散列结束)或者监听window.onunload事件。这样,可搜索性就变差了,而用户发现并分享课程描述是非常重要的,所以我们编写了一个“及时渲染器”,使用Selenium去渲染HTML和服务。
对于开发者而言,由于我们的Web应用中存在交叉routes, 我们的测试又必须检测不同的routes序列,所以测试会变得比以往复杂。
到底哪一个才是最好的呢?
目前,单页Web应用还存在一点风险,然而,随着时间的推移,风险会变得越来越少。
就JS widgets和单页Web应用而言,到底该采取哪个方法要依情形来定。在上,我们希望给老师们增加课堂的把控和灵活性,让所有课程更好的组合起来,这也是我们为什么要构建widgets的原因所在。同样,我们也希望学生能够在网站上面浏览更多的课程,并且我们知道每一个页面的需求是什么样,因此采用单页Web应用更能满足我们的需求,给我们带来更多的灵感。二者唯一的区别就在routes和widgets文件上(映射URL
vs.转换DIV),所以,无论我们是使用widget还是单页应用,都可以很容易地创建的视图层和模型层。
各位开发人员,在实际应用中,你们又是如何选择的呢?不妨和我们一起分享下它们的利与弊吧!(编译:张红月 责编:王果)原文来自:
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:
来自子话题:JS如何调用服务器端事件(转载)
在.NET中,所有的服务器控件提交到服务器的时候,都会调用__doPostBack这个函数,所以灵活运用这个函数对于我们的帮助还是很大的。
比如,在我们写程序的时候经常会需要动态的生成一些控件,最简单的方法就是通过一个字符串,比如string
& strButton & &
= & & &input
& type & =”button”
ID=”button1”&,然后输出到页面,但是如果我们需要这个控件来执行一些服务器的功能,就比较困难了。这里我们就可以用过借用__doPostBack这个函数来完成。接下来我觉个例子来说明一下具体如何调用。
既然要在服务器端运行那么,我们可以声明一个不可见的LinkButton控件,那通常,我们希望一个控件不可见,通常都是把visible属性设为false。但是在这里我们把LinkButton的Text属性设置为空,来是这个LinkButton不可见(为什么要这么设置,而不是直接设置visible属性,我会在下面说明),接下来我们可以在LinkButton里面写一些服务器端的代码。然后就是如何通过我们动态生成的客户端控件来调用LinkButton里面的功能,我们可以通过一个JavaScript函数来实现
& function & ExcuteOnServer()
//第一个参数是你希望提交到服务器的控件的ID号,第二个参数是事件参数 &
& __doPostBack('LinkButtonID','');
接下去我们只需要在动态生成的这个Button控件的onclick事件中写上onclick=”JavaScript:ExcuteOnServer();“,这样当我们点击这个动态生成的客户端控件的时候,他便会执行LinkButton中的代码。
& 这样便实现了动态生成的客户端控件提交到服务器端的功能。
最后要说一下的就是为什么希望LinkButton控件不可见的时候,不是通过visible属性来完成的。因为当我们把visible属性设置为false的时候,浏览器在解析的时候,根本不会把这个控件放在页面上,也就是说这个控件是不存在的,所以我们在调用__doPostBack函数的时候,便会找不到控件。&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 node完成的网站 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信