项目说明

OurEDA实验室每年都会面向大一新生招人,每周的沙龙都会有学长来讲课,传经验,录下来的沙龙视频就非常有价值,因此,在老师的安排下,我负责开发了慕课网这样一个项目。

首要问题及其解决方案

视频网站首先需要考虑的问题就是大视频文件的播放,上传,处理。

  • 沙龙一般时长为一个半小时,所以项目至少要能承受4GB的大小的视频文件的上传。这里我选用了百度的fex-webuploader,利用其分片上传功能,先分片上传,再后台合并,利用事务机制实现空间的最大化利用,防止“死文件碎片”的产生。
  • 视频的播放我使用了JWplayer的播放器,后台使用nginx做静态文件代理,对非文件请求使用nginx反向代理。

解决了视频文件问题,剩下的就是web开发的基础问题了。

技术选择

随着项目经验的增加,我对于一个较大项目的的前后端分离非常看重,因为这涉及到项目中后期的效率问题,非常重要。

  • 前端工程使用React+Webpack+Redux,因为后台管理涉及很多增删改查的步骤,使用Redux是非常有必要的。在前后端分离方面,我利用Node做了一层中间层,使用自己编写的proxy中间件,将带有特定前缀的请求都重定向到开发者指定的地方,中间的处理过程对开发者来说是透明的,这样就解决了安全跨域的问题。
  • 后端工程一如使用Koa等熟练的技术进行的开发。
  • 架构使用前后端分离,在自动化方面增加了gulp来协助webpack进行自动化转译等工作。

前端工程结构

IMooc/
├── mocks/ 假数据,用于开发
├── assets/
│ ├──html/ 编译压缩后的html文件
│ ├── dist/ 静态资源文件
│ ├── font/
│ ├── js/
│ ├── css/
├── src/ 源码目录
│ ├── html/ ect模板
│ ├── css/
│ ├── js/
│ ├── scss/
│ ├── image/
│ ├── lib/ bower目录
├── server/ 源码目录
│ ├── instances/ 实例
│ ├── lib/ 库函数
│ ├── routes/ 路由
│ ├── views/ 网页渲染内容
│ ├── public/ 公共资源文件

上面server是一个小型服务器,不处理复杂路由逻辑,只具有转发的作用,充当中间层,mocks假数据用于前后端平行开发,前端的所有开发都在src内。

一些收获

  • redux的思想很惊艳,层次的划分非常具有美感。
  • react的组件复用特点用好了,越到后期开发速度越快,用“信手拈来”形容再恰当不过。但是要注意组件的设计一定一定要有规划,要知道会有多少页面用到所需的组件,越原始的组件改动接口结构越危险,
  • 前后端分离真的很棒,即使是一个人对功能进行修改,也能做到条理清晰。
  • gulp+webpack自动化一定要做,会非常省心,开发者启动了自动程序后只需要关注代码即可,刷新浏览器,热加载一类的活就应该交给工具干!

项目部分页面截图

OurEDA慕课网开发记录的更多相关文章

  1. 慕课网视频破解付费分享-前端开发-Python等

    微信小程序 慕课网   BAT大牛经验总结全面深入解读Android面试   前端JS基础面试技巧   vue2.0+node.js+mongodb全栈打造商城   Vue.js高级实战-开发移动端音 ...

  2. 慕课网笔记之oracle开发利器-PL/SQL基础

    实例1--if语句 /* 慕课网Oracle数据库开发必备之PL/SQL_2-3 判断用户从键盘输入的数字 1.如何使用if语句 2.接收一个键盘的输入(字符串) */ set serveroutpu ...

  3. 安卓开发_慕课网_Fragment实现Tab(App主界面)

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  4. 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)

    学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...

  5. 安卓开发_慕课网_ViewPager实现Tab(App主界面)

    学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...

  6. 04慕课网《vue.js2.5入门》——Vue-cli开发todolist

    主要文件目录: 文件代码: 根实例,初始化vue: <!--index.html,网站入口页面,和main.jsp组成一套.vue文件,包含--> <!DOCTYPE html> ...

  7. 慕课网Hibernate初探之一对多映射实验及总结

    慕课网Hibernate初探之一对多映射实验及总结 一.本课核心 * 1.如何在MyEclipse中使用Hibernate * 2.如何实现Hibernate中一对多的映射 * 3.如何创建Sessi ...

  8. newbee-mall开源项目被慕课网拿去做课程,然后我毫不知情,这又是什么骚操作?

    万万没想到,这种事情会发生在我身上. 之前写过<开源囧事>系列而且已经写了四篇,四次开源囧事如下: <开源囧事(一)捅娄子了,写个bug被国家信息安全漏洞共享平台抓到了?> & ...

  9. CozyRSS开发记录15-获取和显示RSS内容

    CozyRSS开发记录15-获取和显示RSS内容 1.内容列表 我们先给RSSContentFrame增加一个ViewModel,里面和RSS源列表一样,提供一个ObservableCollectio ...

随机推荐

  1. JAVA _____Scanner用法

    今天就来说一说Scanner用法,以前我在学C的时候记得第一天学的是很普遍的HelloWord的输出,JAVA中的输出是这样子的, public class ScannerWriter { publi ...

  2. (四十五)golang--反射

    反射基本介绍: (1)反射可以在运行时动态获取变量的各种信息,比如变量的类型.类别: (2)如果是结构体变量,还可以获取结构体本身的信息(包括结构体字段.方法): (3)通过反射,可以修改变量的值,可 ...

  3. 依赖注入利器 - Dagger ‡

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/53715960 本文出自: [HansChen的博客] 概述 声明需要注入的对象 如何 ...

  4. Ubuntu 一键伪装成Win 10,Kali Linux 2019 kali-undercover软件嫁接;

    今天,下午刷手机的时候,突然看到kali出了一个非常新颖的主题:该主题可以使得kali系统伪装成windows 10而变得低调起来:就像下面这样: 具体新闻链接:https://www.freebuf ...

  5. P1548 棋盘问题

    题目描述 设有一个N \times MN×M方格的棋盘(1≤N≤100,1≤M≤100)(1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正方形.多少个长方形(不包括正方形). 例如:当 N ...

  6. AWS re:Invent 2019 召开 | 云原生生态周报 Vol. 30

    作者 | 何淋波.宋净超.徐迪 业界要闻 1. AWS re:Invent 2019 AWS 年度云计算盛会于 12.2-12.6 在拉斯维加斯举行. 技术分享超过 2500 场,技术方向涵盖数据分析 ...

  7. nginx的部署及配置文件的介绍 域名 用户认证 SSL加密模块

    步骤一:构建Nginx服务器 yum -y install gcc pcre-devel openssl-devel        #安装依赖包 wget   http://nginx.org/dow ...

  8. python 拷贝文件夹下的文件 到 另一个文件夹

    import os,shutil def copy_search_file(srcDir, desDir): ls = os.listdir(srcDir) for line in ls: fileP ...

  9. centos使用yum存储快速安装MySQL

    RHEL/CentOS 7.x MySQL yum库 https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm RHEL ...

  10. [译]C#8.0中一个使接口更加灵活的新特性-默认接口实现

    9月份的时候,微软宣布正式发布C#8.0,作为.NET Core 3.0发行版的一部分.C#8.0的新特性之一就是默认接口实现.在本文中,我们将一起来聊聊默认接口实现. 众所周知,对现有应用程序的接口 ...