昨天一篇文章讲述了我在这三个月中由.net到java的过程,其中踩坑填坑的细节真不是三言两语可以道尽,而完成时的喜悦也远非寻常可比(仅次于涨工资)。然而到这并不算完结,作为前后端分离的忠实粉丝,我认为服务端更应关心数据处理、存储、负载、并发等问题,而与页面相关的开发诸如渲染、操作、样式、动画等都应交由前端人员处理。
 
作为一个常年在服务端玩耍的打怪青年,如果几年前有人告诉我说要把我的视图页拿出去单独开发,我会认为他在开玩笑,然而随着这几年前端超级无敌迅速的发展,前端的框架、构建工具、包管理器等不断的完善,前端开发进入了一个工程化的时代,甚至可以说现在的前端和移动端app是等价的,只是其运行的载体不同而已,所以前后端分离模式就变得可行,也很优雅。
 
前端技术选型
前端的框架、工具什么的实在太多了,近乎乱象,然而这并不影响什么,选择并没有想象中的那么艰难,因为真正需要选择的东西只有一个:框架。对于目前比较火热的三大前端框架angular、react和vue。angular因为个人喜好问题被首先排除,所以我仅仅需要react和vue中二选一即可,最终我们选择了react。接下来就是针对react的深度学习了,期间涉及到的技术包括:react.js、es6、webpack、babel、fetch等。由于之前为BodeAbp项目写过一个react的前端,所以这块知识我还算熟悉。
 
SEO带来的伤痛
熟悉前端开发的小伙伴大概知道,现在这些前端框架除了数据绑定、模块化、虚拟dom等功能特性之外,还可以结合前端路由实现单页应用(spa),单页应用能给我们带来更好的页面性能和用户体验。但是,有利就有弊,我想这个世界上就没有任何一个东西是完美的吧,单页应用程序在seo方面的表现实在是差强人意(谷歌除外),而对于一个平台性质的网站,这是不能容忍的问题。
 
同构
seo问题是必须要解决的,然而我搜遍了国内外各种网站找到的解决方案都是:ssr(server side render),即服务端渲染,感觉绕来绕去又回到了原地,得益于nodejs的迅速发展以及react对于服务端渲染的支持,使得这个问题可以比较优雅的得到解决,也就是前端所谓的同构方案,什么是同构?同构JavaScript应用指的是用JavaScript编写的应用,能够同时运行于客户端和服务器。这里盗用一张图方便理解:
感谢Github的强大,感谢https://github.com/kriasoft/react-starter-kit项目给我带来的启发,我最终在该项目的基础上修改出了我需要的项目结构。再一次站在了巨人的肩膀上看了一眼前端的世界,欣赏美景的同时也丰富了自身。最后再推荐一下这篇讲解服务端渲染的文章:http://www.jianshu.com/p/0ecd727107bb,这是我找到的最好最全面的讲解ssr的文章了。
 
写在最后
目前这个项目已经正式用于开发,react的模块化机制被使用的淋漓尽致,一个页面由各种不同的组件拼接而来,组件得到了很好的复用。ssr给我们带来了伤痛的同时也给我们带来了一些好处,比如可以在服务端请求首屏数据,其他数据在客户端请求,加快首屏渲染速度的同时也不影响用户体验。最后还是将业务代码删除后把项目放上了Github,有兴趣的可以看看:https://github.com/liuxx001/cczcrv-react

还原包命令:yarn install;项目启动命令:npm start
ps:为什么前端框架也需要我来搭,这真是一个忧伤的问题。

让这三个月来的更猛烈些吧,前端react同构项目的更多相关文章

  1. 让 http 2来得更猛烈些吧

    今早在公交车上,把http2的官方讲解文档(还在草案之中)看了一圈,发现相对http 1.1确实改进了不少,完整的文档可通过:://www.gitbook.com/book/ye11ow/http2- ...

  2. git stash让bug来的更猛烈些吧

    git stash可以用来暂存当前正在进行的工作,比如想pull最新的代码,又不想加新commit, 或者有一个紧急的bug需要修复,但是这个bug又与你已经在做的工作(还没完成)有关联.这个时候有的 ...

  3. 让HTML5游戏来的更猛烈些吧!--青岛思途

    作为著名的网页游戏门户,Kongregate在业界也算是鼎鼎大名了.小编与它的初识应是在几年前,只记得当时其平台上的游戏基本都是需要Flash的支持,可前几天,Adobe宣布计划停止Flash的更新和 ...

  4. 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧

    注意:有网友提出部分项目停止更新的事情,这个问题我特意注意过,很多都是小功能组件,功能稳定,没有bug,没更新是正常的.够用就行了.其次技术支持的事情,对开源免费来说,不能太强求,这里发布的都是小功能 ...

  5. 怎么让dedecms生成html页面更快些

    如何让织梦生成html页面更快些呢? 1.把文章模板里的“相关文章”.“热点文章”.“推荐文章”这类的标记删除了,用其它方式,如:shtml.js 引入 2.把织梦模板里用标记表示的模板路径.php附 ...

  6. Gulp.js----比Grunt更易用的前端构建工具

    Gulp.js----比Grunt更易用的前端构建工具 Grunt一直是前端构建工具,然而他也不是毫无缺陷的,gulp的作者 Eric Schoffstall 在他介绍 gulp.js 的 prese ...

  7. Gulp, 比Grunt更好用的前端构建工具

    Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp相对于Grunt的优势 gulp.js 的作者 ...

  8. 50个实用的jQuery代码段让你成为更好的Web前端工程师

    本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助 ...

  9. 如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀)

    原文:如何更精准地设置 C# / .NET Core 项目的输出路径?(包括添加和删除各种前后缀) 我们都知道可以通过在 Visual Studio 中设置输出路径(OutputPath)来更改项目输 ...

随机推荐

  1. Web.config 自动替换值

    开发项目中,有些可能会改变的值,如是否记录日志,记录日志路径等,我们都会配置在Web.config的<appSettings></appSettings>节点, 也比如数据库的 ...

  2. 【Android Developers Training】 106. 创建并检测地理围栏

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. 在使用<script>嵌入JavaScript代码时,不要在代码中的任何地方出现"</script>"字符串

    在使用<script>嵌入JavaScript代码时,记住不要在代码中的任何地方出现"</script>"字符串.例如浏览器执行下面代码会报错: <s ...

  4. 利用libcurl进行post

    逛百度知道看到有个人提问:http://zhidao.baidu.com/question/1447092283140740700 C写HTTP应用只有疯子才会老老实实的SOCKET编程吧?我后来还是 ...

  5. Unity3D拖尾组件在Ui界面下正常显示

    在项目中Canvas下UI添加拖尾效果,会发现Ui完全遮挡住了拖尾. 如果要正常显示通常需要对Canvas进行设置,Render Mode 我这里用的是-Camera模式 其次要对Material 下 ...

  6. 某天U盘插在笔记本打不开了,是U盘坏了还是电脑的问题?

    五六月份忙着毕业设计与毕业论文,U盘在这个时候就是大功臣啦! 然而打印完最终版本论文上交后,再次把U盘插在自己的笔记本上读取失败了... 只有一个空白的图标,打不开,也无法格式化. 试着删除,拔了又插 ...

  7. 针对Oracle数据库中SCOTT方案的多表查询一个例子

    查询出每个员工的姓名.职位.月薪.所属部门名.月薪等级及其领导的姓名.职位.所属部门名.月薪等级.select e.ename 员工姓名,e.job 员工职位,e.sal 员工月薪,d.dname 员 ...

  8. 数位dp模板 [dp][数位dp]

    现在才想到要学数位dp,我是不是很弱 答案是肯定的 以一道自己瞎掰的题为模板 //题: //输入数字n //从0枚举到n,计算这n+1个数中含有两位数a的数的个数 //如12930含有两位数93 #i ...

  9. Mybatis JPA 代码构建

    前段时间了解到Spring JPA,感觉挺好用,但其依赖于Hibernate,本人看到Hibernate就头大(不是说Hibernate不好哈,而是进阶太难),于是做了一个迷你版的Mybatis JP ...

  10. 部署DNS服务

    DNS,全称Domain Name System,即域名解析系统. DNS帮助用户在互联网上寻找路径.在互联网上的每一个计算机都拥有一个唯一的地址,称作"IP地址"(即互联网协议地 ...