学了个java全栈框架 没学好 js不会写 实现种种功能的js 只会增删改查 现在讲

学习文献:
你的第一个AngularJS应用:/a/7412
AngularJS 提交表单的方式:http://www.oschina.net/translate/submitting-ajax-forms-the-angularjs-way
AngularJS中$http服务的简单用法:/kf/137.html
代码由3块实现:
mvc5的解释就是定义项目,定义模块,定义基本视图
&body ng-app='routingDemoApp'&
&div class="container"&
&div class="row"&
&h1 class="text-center"&angular 单页新闻发布系统&/h1&
&div class="row"&
&div class="col-md-2"&
&ul class=""&
&li&&a href="#/put"&发布&/a&&/li&
&li&&a href="#/list"&新闻列表&/a&&/li&
&div class="col-md-10" ng-view&&/div&
2.AnjularJs的功能实现
//配置路由器,绑定视图和控制器,细节看上面引用链接
var app = angular.module('routingDemoApp', ['ngRoute']);
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'list.html',
controller: 'ListController'
.when('/list', {
templateUrl: 'list.html',
controller: 'ListController'
.when('/edit/:id', {
templateUrl: 'edit.html',
controller: 'EditController'
.when('/del/:id', {
controller: 'DelController',
templateUrl: 'del.html',
.when('/detail/:id', {
templateUrl: 'detail.html',
controller: 'DetailController'
.when('/put', {
templateUrl: 'put.html',
controller: 'PutController'
.otherwise({ redirectTo: '/' });
//写控制器功能
app.controller("ListController", function ($scope, $http) {
$http.get("/AngularJS/data.ashx?action=getall")
.success(function (data) {
$scope.models = data.
app.controller("PutController", function ($scope, $http) {
$scope.addcontent = function () {
//这种写法很差,建议看下面EditController控制器里面用对象来写值
var data = "title=" + $scope.title + "&author=" + $scope.author + "&content=" + $scope.
$http.get("/AngularJS/data.ashx?action=add&" + data)
.success(function (data ) {
if (data == 1 && confirm("发布成功是否跳转")) location.href = "";
app.controller("EditController", function ($scope, $http, $routeParams) {
$scope.updata = function () {
//nnd,Jq用的 ("form").serialize(),只能拼接了;想用$http.get(url,congfig)的,但是值传不过去。。。
$scope.model.action = "up";
$http({ method: "get", url: "/AngularJS/data.ashx", params: $scope.model })
.success(function (data) {
if (data != 1) return false;
location.href = "";
$http.get("/AngularJS/data.ashx?action=get&id=" + $routeParams.id)
.success(function (data) {
$scope.model =
.error(function () {
alert("error");
$scope.formData = {};
app.controller("DelController", function ($scope, $http, $routeParams) {
$http.get("/AngularJS/data.ashx?action=del&id=" + $routeParams.id)
.success(function (data) {
if (data != 1) return false;
window.location.href("./");
.error(function (data) {
alert("error");
app.controller("DetailController", function ($scope, $http, $routeParams) {
$http.get("/AngularJS/data.ashx?action=get&id=" + $routeParams.id)
.success(function (data) {
$scope.model =
.error(function () {
alert("失败");
$scope.updata = function () {
$http.get("/AngularJS/data.ashx?action=up")
3.视图模板
&script type="text/ng-template" id="put.html"&
&form class="form-horizontal"&
&div class="form-group"&
&label&标题&/label&
&input type="text" class="form-control" ng-model="title" /&
&div class="form-group"&
&label&作者&/label&
&input type="text" class="form-control" ng-model="author" /&
&div class="form-group"&
&label&内容&/label&
&textarea type="text" class="form-control" ng-model="content"& &/textarea&
&div class="form-group"&
&input type="button" class="btn btn-success form-control" value="提交" ng-click="addcontent()"/&
&script type="text/ng-template" id="list.html"&
&div class="row" &
&table class="table"&
&th&编号&/th&
&th&标题&/th&
&th&时间&/th&
&th&管理&/th&
&tbody ng-repeat="x in models"&
&td&{{ $index+1 }}&/td&
&td&&a href="#/detail/{{x.Id}}"& {{ x.title }}&/a&&/td&
&td&{{ x.time }}&/td&
&td&&a href="#/edit/{{x.Id}}"&编辑&/a&|&a href="#/del/{{x.Id}}"&删除&/a&&/td&
&script type="text/ng-template" id="edit.html"&
&form class="form-horizontal"&
&input type="hidden" ng-model="model.Id"/&
&div class="form-group"&
&label&标题&/label&
&input type="text" class="form-control" ng-model="model.title" /&
&div class="form-group"&
&label&作者&/label&
&input type="text" class="form-control" ng-model="model.author" /&
&div class="form-group"&
&label&内容&/label&
&textarea type="text" class="form-control" ng-model="model.content"& &/textarea&
&div class="form-group"&
&input type="button" class="btn btn-success form-control" value="修改" ng-click="updata()"/&
&script type="text/ng-template" id="detail.html"&
&h1 class="text-center"&{{ model.title }}&/h1&
&span class="text-center"&作者:{{ model.author }},时间:{{ model.time }}&/span&
{{ model.content }}
&script type="text/ng-template" id="del.html"&
开发遇到以下几个问题:
1.Post提交的data数据是什么格式了?
JQ:$.post("url",data"")
Ang:$http.Post(data:"",params:"")
2.$scope.model获取前台传来的Json的取值问题
$http.get(url).success(function(data){
& &$scope.model =
json为集合:{"obj":[{id:1,name:"zzj"},{id:1,name:"zzj"}]},使用就是:$scope.model.obj[0].id,$scope.model.obj[0].name
json为对象:{id:1,name:"zzj"},使用的时候就是 &$scope.model.id, $scope.model.name
3.路由器配置问题
/angularjs/angularjs-routing.html
4.json转obj,string的细节(json检验网:/)
json有2种:对象、集合
对象:{key:value,key:value}
集合:{object:[{key:value},{key:value}]}
&格式之间的互转:
在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法。
JSON.stringify(obj)将JSON转为字符串。
JSON.parse(string)将字符串转为JSON格式;
Angular.fromJson( data );
Angular.toJson(data);
阅读(...) 评论()淘宝目前流行的基于NodeJS的全栈式开发(基于NodeJS的前后端分离)
为了解决传统Web开发模式带来的各种问题,我们进行了许多尝试,但由于前/后端的物理鸿沟,尝试的方案都大同小异。痛定思痛,今天我们重新思考了“前后端”的定义,引入前端同学都熟悉的NodeJS,试图探索一条全新的前后端分离模式。
随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本。
这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试。讨论了很久之后,我们团队决定探索一套基于NodeJS的前后端分离方案,过程中有一些不断变化的认识以及思考,记录在这里,也希望看到的同学参与讨论,帮我们完善。
一、什么是前后端分离?
最开始组内讨论的过程中我发现,每个人对前后端分离的理解不一样,为了保证能在同一个频道讨论,先就什么是”前后端分离”达成一致。
大家一致认同的前后端分离的例子就是SPA(Single-page
application),所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现。
从某种意义上来说,SPA确实做到了前后端分离,但这种方式存在两个问题:
SPA式的前后端分离,是从物理层做区分(认为只要是客户端的就是前端,服务器端的就是后端),这种分法已经无法满足我们前后端分离的需求,我们认为从职责上划分才能满足目前我们的使用场景:
为什么去做这种职责的划分,后面会继续探讨。
二、为什么要前后端分离?
关于这个问题,玉伯的文章中解释得非常全面,我们再大概理一下:
2.1 现有开发模式的适用场景
玉伯提到的几种开发模式,各有各的适用场景,没有哪一种完全取代另外一种。
2.2 前后端职责不清
在业务逻辑复杂的系统里,我们最怕维护前后端混杂在一起的代码,因为没有约束,M-V-C每一层都可能出现别的层的代码,日积月累,完全没有维护性可言。
虽然前后端分离没办法完全解决这种问题,但是可以大大缓解。因为从物理层次上保证了你不可能这么做。
2.3 开发效率问题
淘宝的Web基本上都是基于MVC框架webx,架构决定了前端只能依赖后端。
所以我们的开发模式依然是,前端写好静态demo,后端翻译成VM模版,这种模式的问题就不说了,被吐槽了很久。
直接基于后端环境开发也很痛苦,配置安装使用都很麻烦。为了解决这个问题,我们发明了各种工具,比如,但是前端还是要写VM,而且依赖后端数据,效率依然不高。
另外,后端也没法摆脱对展现的强关注,从而专心于业务逻辑层的开发。
2.4 对前端发挥的局限
性能优化如果只在前端做空间非常有限,于是我们经常需要后端合作才能碰撞出火花,但由于后端框架限制,我们很难使用Comet、Bigpipe等技术方案来优化性能。
为了解决以上提到的一些问题,我们进行了很多尝试,开发了各种工具,但始终没有太多起色,主要是因为我们只能在后端给我们划分的那一小块空间去发挥。只有真正做到前后端分离,我们才能彻底解决以上问题。
三、怎么做前后端分离?
怎么做前后端分离,其实第一节中已经有了答案:
试想一下,如果前端掌握了Controller,我们可以做url
design,我们可以根据场景决定在服务端同步渲染,还是根据view层数据输出json数据,我们还可以根据表现层需求很容易的做Bigpipe,Comet,Socket等等,完全是需求决定使用方式。
3.1 基于NodeJS“全栈”式开发
如果想实现上图的分层,就必然需要一种web服务帮我们实现以前后端做的事情,于是就有了标题提到的“基于NodeJS的全栈式开发”
这张图看起来简单而且很好理解,但没尝试过,会有很多疑问。
这些问题要说清楚不容易,下面说下我的认识过程。
3.2 为什么要增加一层NodeJS?
现阶段我们主要以后端MVC的模式进行开发,这种模式严重阻碍了前端开发效率,也让后端不能专注于业务开发。
解决方案是让前端能控制Controller层,但是如果在现有技术体系下很难做到,因为不可能让所有前端都学java,安装后端的开发环境,写VM。
NodeJS就能很好的解决这个问题,我们无需学习一门新的语言,就能做到以前开发帮我们做的事情,一切都显得那么自然。
3.3 性能问题
分层就涉及每层之间的通讯,肯定会有一定的性能损耗。但是合理的分层能让职责清晰、也方便协作,会大大提高开发效率。分层带来的损失,一定能在其他方面的收益弥补回来。
另外,一旦决定分层,我们可以通过优化通讯方式、通讯协议,尽可能把损耗降到最低。
举个例子:
淘宝宝贝详情页静态化之后,还是有不少需要实时获取的信息,比如物流、促销等等,因为这些信息在不同业务系统中,所以需要前端发送5,6个异步请求来回填这些内容。
有了NodeJS之后,前端可以在NodeJS中去代理这5个异步请求,还能很容易的做Bigpipe,这块的优化能让整个渲染效率提升很多。
可能在PC上你觉得发5,6个异步请求也没什么,但是在无线端,在客户手机上建立一个HTTP请求开销很大,有了这个优化,性能一下提升好几倍。
淘宝详情基于NodeJS的优化我们正在进行中,上线之后我会分享一下优化的过程。
3.4 前端的工作量是否增加了?
相对于只切页面/做demo,肯定是增加了一点,但是当前模式下有联调、沟通环节,这个过程非常花时间,也容易出bug,还很难维护。
所以,虽然工作量会增加一点,但是总体开发效率会提升很多。
另外,测试成本可以节省很多。以前开发的接口都是针对表现层的,很难写测试用例。如果做了前后端分离,甚至测试都可以分开,一拨人专门测试接口,一拨人专注测试UI(这部分工作甚至可以用工具代替)。
3.5 增加Node层带来的风险怎么控制?
随着Node大规模使用,系统/运维/安全部门的同学也一定会加入到基础建设中,他们会帮助我们去完善各个环节可能出现的问题,保障系的稳定性。
3.6 Node什么都能做,为什么还要JAVA?
我们的初衷是做前后端分离,如果考虑这个问题就有点违背我们的初衷了。即使用Node替代Java,我们也没办法保证不出现今天遇到的种种问题,比如职责不清。我们的目的是分层开发,专业的人,专注做专业的事。基于JAVA的基础架构已经非常强大而且稳定,而且更适合做现在架构的事情。
四、淘宝基于Node的前后端分离
上图是我理解的淘宝基于Node的前后端分离分层,以及Node的职责范围。简单解释下:
这种模式我们已经有两个项目在开发中,虽然还没上线,但是无论是在开发效率,还是在性能优化方面,我们都已经尝到了甜头。
五、我们还需要要做什么?
技术上不会有太多需要去创新和研究的,已经有非常多现成的积累。其实关键是一些流程的打通和通用解决方案的积累,相信随着更多的项目实践,这块慢慢会变成一个稳定的流程。
六、“中途岛”
虽然“基于NodeJS的全栈式开发”模式很让人兴奋,但是把基于Node的全栈开发变成一个稳定,让大家都能接受的东西还有很多路要走,我们正在进行的“中途岛”项目就是为了解决这个问题。虽然我们起步不久,但是离目标已经越来越近!!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。刚大学毕业,不是计算机相关专业,学过C和Java的基础知识,有基本的编程基础,目前在自学前端,JS的应用掌握的比较熟悉了,可以做一些简单的小Demo跪求大神指点明路╰(*°▽°*)╯
但行好事,莫问前程
技术无止境,每个学习的人到底会到达什么程度谁都不知道,保持继续学习下去就行了。至于全栈工程师,目前来说毁誉参半,毕竟一个什么都精通的人基本上是不可能存在的。在所有的方向都会一些,还不如在一个方向上精通做到极致。目前来讲,基本所有的互联网公司招人时候都会把小组合作能力作为一个考察的因素,注重团队配合。想想,一个项目从前到后要包含多少技术?就拿TalkingData来
说,就至少有H5、JavaScript、CSS、Java、Kafka、MongoDB、Redis、MySQL/MariaDB、Vertica、
Hadoop、Spark、Tychron等等,这些研发目前需要数据可视化团队、计算平台团队、存储平台团队、数据挖掘团队和运维团队来共同完成。要是
出现这么一个全能王,把活一揽子全部接下来,那要省掉多少沟通代价和薪资成本?——这简直就是救世主!全栈更像是一个概念,一个终极目标,但是概念还是让他作为概念吧,你一个人就算熟悉所有技术,也没那个精力去实现,真正应聘时候说你是全栈工程师,就好像是在说一个笑话。
已被提问者采纳
你还没有登录,请先登录或注册慕课网帐号
时间能改变一切,除了历史……还有我的决心
我是文科生,这不 精通java,MySQL,HTML5,CSS,jQuery……会企业级系统架设,自己一个人搭建过2个PHP整站1个JSP系统,但是我现在都不能叫全栈工程师!!!关于全栈工程师这一说身份其实要求很高,需要会后端开发、前端开发、界面设计、产品设计、数据库、各种移动客户端、三屏兼容、restFul API设计和OAuth等等。
你不需要问我们是否可行,技术有两个发展方向,一种是纵向一种是横向的,横向的是瑞士军刀,纵向的是削铁如泥的干将莫邪。这两个方向都没有对与错,发展到一定程度都会相互溶合,就好比中国佛家禅修的南顿北渐,其实到了最后,渐悟与顿悟是一样的,顿由渐中来,只要你肯努力每个方向走下去都会走到全栈工程师。
全栈工程师的地位其实很尴尬,说得不好听一点,全栈工程师就是什么都会,什么都不会。曾经有一次面试,对方问很基础的问题,他答不上来,但他能做出产品,也知道什么是怎么一回事,他也不会犯那些错误,可他就是答不上概念,要考倒他非常容易。所以在应聘面试的时候,有些时候会吃亏,他可能会不如那些在某一方面钻得很深的人工资拿得高,由于经常在各种技术穿梭,他会经常忘记代码的语法和一些API,所以他经常需要去查API甚至查语法,他觉得没有Google我几乎没法工作。这在某些人的眼里,是技术不够的表现。他记的只是一个Key,一个如何找寻答案的索引,而不是全部,人脑不是电脑,他不可能能记下所有的东西
但是,努力都可以做到这一切,只是这个时间就会……
你还没有登录,请先登录或注册慕课网帐号
只要自己有自制力,都不是事。贵在坚持。
你还没有登录,请先登录或注册慕课网帐号
白日依山尽,兵长一米六
非科班出身
能独立做APP 和 网站
你还没有登录,请先登录或注册慕课网帐号
我是要成为前端王的男人!(目前是页面重构)
只要真正的喜欢
一定会成功的
你还没有登录,请先登录或注册慕课网帐号
付出可能没有收获,但是不付出是一定没有收获。
只要你有那个心,就是没有基础也可以学。
你还没有登录,请先登录或注册慕课网帐号
希望掌握更多的Tech Stack技术栈
有点难,我觉得你还是很迷惘的,否则你不会在这里问了
你还没有登录,请先登录或注册慕课网帐号
当然可以了
你还没有登录,请先登录或注册慕课网帐号
这世界属于你,只因为你年轻,趁你还没学会装模作样证...
我初中没毕业去的文武学校,然后去的职业高中,职业高中没毕业就去了北京培训什么平面设计师。后来找份粘贴复制的工作,在后来,接触到web前端,自己自学。。。现在有14个月的web工作经验不断学习,请加油。
你还没有登录,请先登录或注册慕课网帐号
这位同学不懒,有签名的说~
可能你觉得你的js已经很熟悉,但真正到公司,参加项目后你可能会发现自己需要学习的还很多,学无止境,特别是软件行业,更是无止境,很多东西可不是简单的小Demo,不是只会js就可以的,扎实学好每一步,随着知识的积累,不断接近全栈,而不是为了全栈去全栈,当知识储备到一定程度,全栈也就水到渠成了,但这条路也是贵在坚持
你还没有登录,请先登录或注册慕课网帐号
从你全世界踩过
要很久啊,哪有说话那么简单
你还没有登录,请先登录或注册慕课网帐号
不忘初心,方得始终
建议直接去找开发类的工作,在实战中锻炼,你成长的更快
你还没有登录,请先登录或注册慕课网帐号
这位童鞋非常勤快,要做gosu
觉得自己学的还行了,可以看看ECA6。不知道JS权威指南你看过没有,CSS的技巧一大堆,只有真的去研究,才知道,天有多高,地有多大
你还没有登录,请先登录或注册慕课网帐号
人的一生应该这样度过!当我们回首往事时,不因虚度年...
有慕课就够了,慕课里面的html+css+js每个都 敲一遍,node项目做完。然后看看node API差不多了。
你还没有登录,请先登录或注册慕课网帐号
赞楼上,凡事贵在坚持!!!
你还没有登录,请先登录或注册慕课网帐号
有些事情你现在不做,一辈子都不会做了
不要简单的认为只会写一些Demo就算是会做开发,真正的项目开发是知识的综合运用,更别提全栈工程师,需要学习的东西太多了(前台与后台)仅仅是通过自学是很难成长,如果不是计算机专业的,会缺乏相关的专业知识,学习起来会比较吃力。
你还没有登录,请先登录或注册慕课网帐号
58283人关注
54042人关注
33443人关注
Copyright (C)
All Rights Reserved | 京ICP备 号-2比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
也谈基于NodeJS的全栈式开发
关键字:Web
  随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本。
  这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试。讨论了很久之后,我们团队决定探索一套基于NodeJS的前后端分离,过程中有一些不断变化的认识以及思考,记录在这里,也希望看到的同学参与讨论,帮我们完善。
  一、什么是前后端分离?
  最开始组内讨论的过程中我发现,每个人对前后端分离的理解不一样,为了保证能在同一个频道讨论,先就什么是”前后端分离”达成一致。
  大家一致认同的前后端分离的例子就是SPA(Single-page application),所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现。
  从某种意义上来说,SPA确实做到了前后端分离,但这种方式存在两个问题:
  WEB服务中,SPA类占的比例很少。很多场景下还有同步/同步+异步混合的模式,SPA不能作为一种通用的解决方案。
  现阶段的SPA开发模式,接口通常是按照展现逻辑来提供的,有时候为了提高效率,后端会帮我们处理一些展现逻辑,这就意味着后端还是涉足了View层的工作,不是真正的前后端分离。
  SPA式的前后端分离,是从物理层做区分(认为只要是客户端的就是前端,端的就是后端),这种分法已经无法满足我们前后端分离的需求,我们认为从职责上划分才能满足目前我们的使用场景:
  前端:负责View和Controller层。
  后端:只负责Model层,业务处理/数据等。
  为什么去做这种职责的划分,后面会继续探讨。
  二、为什么要前后端分离?
  关于这个问题,玉伯的文章Web研发模式演变中解释得非常全面,我们再大概理一下:
  2.1 现有开发模式的适用场景
  玉伯提到的几种开发模式,各有各的适用场景,没有哪一种另外一种。
  比如后端为主的MVC,做一些同步展现的业务效率很高,但是遇到同步异步结合的页面,与后端开发沟通起来就会比较麻烦。
  Ajax为主SPA型开发模式,比较适合开发APP类型的场景,但是只适合做APP,因为等问题不好解决,对于很多类型的系统,这种开发方式也过重。
  2.2 前后端职责不清
  在业务逻辑复杂的系统里,我们最怕维护前后端混杂在一起的代码,因为没有约束,M-V-C每一层都可能出现别的层的代码,日积月累,完全没有维护性可言。
  虽然前后端分离没办法完全解决这种问题,但是可以大大缓解。因为从物理层次上保证了你不可能这么做。
  2.3 开发效率问题
  的Web基本上都是基于MVC框架webx,架构决定了前端只能依赖后端。
  所以我们的开发模式依然是,前端写好静态demo,后端翻译成VM模版,这种模式的问题就不说了,被吐槽了很久。
  直接基于后端环境开发也很痛苦,配置安装使用都很麻烦。为了解决这个问题,我们发明了各种工具,比如VMarket,但是前端还是要写VM,而且依赖后端数据,效率依然不高。
  另外,后端也没法摆脱对展现的强关注,从而专心于业务逻辑层的开发。
  2.4 对前端发挥的局限
  性能优化如果只在前端做空间非常有限,于是我们经常需要后端合作才能碰撞出火花,但由于后端框架限制,我们很难使用Comet、Bigpipe等技术方案来优化性能。
  为了解决以上提到的一些问题,我们进行了很多尝试,开发了各种工具,但始终没有太多起色,主要是因为我们只能在后端给我们划分的那一小块空间去发挥。只有真正做到前后端分离,我们才能彻底解决以上问题。
  三、怎么做前后端分离?
  怎么做前后端分离,其实第一节中已经有了答案:
  前端:负责View和Controller层。
  后端:负责Model层,业务处理/数据等。
  试想一下,如果前端掌握了Controller,我们可以做url design,我们可以根据场景决定在服务端同步渲染,还是根据view层数据输出json数据,我们还可以根据表现层需求很容易的做Bigpipe,Comet,Socket等等,完全是需求决定使用方式。
  3.1 基于NodeJS“全栈”式开发
  如果想实现上图的分层,就必然需要一种web服务帮我们实现以前后端做的事情,于是就有了标题提到的“基于NodeJS的全栈式开发”
  这张图看起来简单而且很好理解,但没尝试过,会有很多疑问。
  SPA模式中,后端已供了所需的数据接口,view前端已经可以控制,为什么要多加NodeJS这一层?
  多加一层,性能怎么样?
  多加一层,前端的工作量是不是增加了?
  多加一层就多一层风险,怎么破?
  NodeJS什么都能做,为什么还要JAVA?
  这些问题要说清楚不容易,下面说下我的认识过程。
  3.2 为什么要增加一层NodeJS?
  现阶段我们主要以后端MVC的模式进行开发,这种模式严重阻碍了前端开发效率,也让后端不能专注于业务开发。
  解决方案是让前端能控制Controller层,但是如果在现有技术体系下很难做到,因为不可能让所有前端都学java,安装后端的开发环境,写VM。
  NodeJS就能很好的解决这个问题,我们无需学习一门新的语言,就能做到以前开发帮我们做的事情,一切都显得那么自然。
  3.3 性能问题
  分层就涉及每层之间的通讯,肯定会有一定的性能损耗。但是合理的分层能让职责清晰、也方便协作,会大大提高开发效率。分层带来的损失,一定能在其他方面的收益弥补回来。
  另外,一旦决定分层,我们可以通过优化通讯方式、通讯协议,尽可能把损耗。
  举个例子:
  淘宝宝贝详情页静态化之后,还是有不少需要实时获取的信息,比如物流、促销等等,因为这些信息在不同业务系统中,所以需要前端发送5,6个异步请求来回填这些内容。
  有了NodeJS之后,前端可以在NodeJS中去代理这5个异步请求,还能很容易的做Bigpipe,这块的优化能让整个渲染效率提升很多。
  可能在PC上你觉得发5,6个异步请求也没什么,但是在端,在客户上建立一个HTTP请求开销很大,有了这个优化,性能一下提升好几倍。
  淘宝详情基于NodeJS的优化我们正在进行中,上线之后我会分享一下优化的过程。
  3.4 前端的工作量是否增加了?
  相对于只切页面/做demo,肯定是增加了一点,但是当前模式下有联调、沟通环节,这个过程非常花时间,也容易出bug,还很难维护。
  所以,虽然工作量会增加一点,但是总体开发效率会提升很多。
  另外,测试成本可以节省很多。以前开发的接口都是针对表现层的,很难写测试用例。如果做了前后端分离,甚至测试分开,一拨人专门测试接口,一拨人专注测试UI(这部分工作甚至可以用工具代替)。
  3.5 增加Node层带来的风险怎么控制?
  随着Node大规模使用,系统/运维/安全部门的同学也一定会加入到基础建设中,他们会帮助我们去完善各个环节可能出现的问题,保障系的稳定性。
  3.6 Node什么都能做,为什么还要JAVA?
  我们的初衷是做前后端分离,如果考虑这个问题就有点违背我们的初衷了。即使用Node替代Java,我们也没办法保证不出现今天遇到的种种问题,比如职责不清。我们的目的是分层开发,专业的人,专注做专业的事。基于JAVA的基础架构已经非常强大而且稳定,而且更适合做现在架构的事情。
  四、淘宝基于Node的前后端分离
  上图是我理解的淘宝基于Node的前后端分离分层,以及Node的职责范围。简单解释下:
  最上端是服务端,就是我们常说的后端。后端对于我们来说,就是一个接口的集合,服务端提供各种各样的接口供我们使用。因为有Node层,也不用局限是什么形式的服务。对于后端开发来说,他们只用关心业务代码的接口实现。
  服务端下面是Node应用。
  Node应用中有一层Model Proxy与服务端进行通讯。这一层主要目前是抹平我们对不同接口的调用方式,一些view层需要的Model。
  Node层还能轻松实现原来vmcommon,tms(引用淘宝内容管理系统)等需求。
  Node层要使用什么框架由开发者自己决定。不过推荐使用express+xTemplate的组合,xTemplate能做到前后端公用。
  怎么用Node大家自己决定,但是令人兴奋的是,我们终于可以使用Node轻松实现我们想要的输出方式:JSON/JSONP/RESTful/HTML/BigPipe/Comet/Socket/同步、异步,想怎么整就怎么整,完全根据你的场景决定。
  浏览器层在我们这个架构中没有变化,也不希望因为引入Node改变你以前在浏览器中开发的认知。
  引入Node,只是把本该就前端控制的部分交由前端掌控。
  这种模式我们已经有两个项目在开发中,虽然还没上线,但是无论是在开发效率,还是在性能优化方面,我们都已经尝到了甜头。
  五、我们还需要要做什么?
  把Node的开发流程集成到淘宝现有的流程中。
  基础设施建设,比如,logger等通用。
  最佳开发实践
  线上成功案例
  大家对Node前后端分离概念的认识
  技术上不会有太多需要去创新和研究的,已经有非常多现成的积累。其实关键是一些流程的打通和通用解决方案的积累,相信随着更多的项目实践,这块慢慢会变成一个稳定的流程。
  六、“中途岛”
  虽然“基于NodeJS的全栈式开发”模式很让人兴奋,但是把基于Node的全栈开发变成一个稳定,让大家都能接受的东西还有很多路要走,我们正在进行的“中途岛”项目就是为了解决这个问题。虽然我们起步不久,但是离目标已经越来越近!
[ 责任编辑:jj ]
去年,手机江湖里的竞争格局还是…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte}

我要回帖

更多关于 java全栈工程师招聘 的文章

更多推荐

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

点击添加站长微信