太极生两仪,两仪生四象。

公司整个前端体系不太完善,很难保证效率和质量。 彼此缺乏沟通,导致重复劳动。相同的东西被写过很多遍,不能发挥集体智慧。诚然在这种模式下就算个人做的再好,也无法提升整体的效率。除非每个人都意识到并且按照一定的标准去执行,才会往更加良性的方向发展。以下是我基于对目前的前端体系所设计的整体架构,具体功能均为实现,只是提供一个实现思路。当然有时间我会一个个实现的。

朱雀:性能日志 + 错误日志

背景:

项目开发完成后,没有一个完善的日志系统,我们很难了解到发布出去的代码用户机器上执行是否正确,所以需要建立前端代码性能相关的监控系统。100用户出现问题,可能只有10个会向我们反馈,而剩下的会对我们好感度降低,很可能直接不用。 而且就算这10个用户,也需要我们花费好久去了解一些信息,譬如浏览器版本,重现过程什么的,颇为繁琐

设计思路:

设计一种独立的系统,该系统作为中间服务器存在,与具体项目解耦。 也就是说任何想用我服务的,只需要前端加上几行代码,就可以实现日志上传。需要查看信息的时候,只要登录我的平台(盘古:http://pangu.rd.800best.com/dashboard),然后点击朱雀-前端日志收集平台,就可以看到自己所属项目的详细收集信息(以下操作类似,不赘述)。

实现:

要实现这一功能

第一要搭建一个后端服务器,这里考虑直接使用express亦或koa。用于接收http请求并持久化。

第二要制作一个管理界面。 界面可以根据类型(性能日志,错误日志),时间,账号,浏览器等筛选

使用方式:

const PERFORMANCE_URL = "http://zhuque.800best.com/performance/post";

const CRASH_URL = "http://zhuque.800best.com/error/error/post";

const data = {

msg: errorMessage,url: errorUrl,userAgent: userAgent,time: new Date()

}

fetch.post({

  URL: CRASH_URL,data: data

})

const perf = (window.webkitPerformance ? window.webkitPerformance : window.msPerformance ),const timing = pref.timing;

 perf = perf? perf : window.performance;

 if( perf&& timing ) {


   let perfData = {};

   for (let key in timing) {
 if (Object.prototype.hasOwnProperty.call(timing,key)) {
  perfData.[key] = (timing[key] - navigationStart);
 }
  }

fetch.post({

  URL: PERFORMANCE_URL,data: perfData

})

}

如果把这个代码进一步改进,可以变成这样的:

import bestLog from 'bestLog';
// bestLog 构造函数,接受两个参数一个是PERFORMANCE_URL 另一个是CRASH_URL 
// 不指定会使用默认的,指定会覆盖,然后请求会发到指定的url
function init() {
  bestLog({
    PERFORMANCE_URL: 'bestsmart.800best.com'
});
}
// 这样浏览器只要挂了,并且error 没有被catch  就会触发window.onerror事件,进一步执行我的代码

玄武:直出中间件(ssr + prefetch + prerender)

背景:

360海淘目前尝试使用了服务端渲染,还开了一个关于服务端渲染的技术分享, 这种精神和活动确实值得发扬。 但是现在的结果依然不是很理想,其他项目组需要使用服务端渲染依然要重新开始填坑。另外具体实现和业务镶嵌比较深入,移植相对困难。 基于此,一种基于服务端渲染和资源预加载的中间件呼之欲出。 如果我需要使用服务端渲染,直接稍加修改即可。

设计思路:

任何项目组如果需要用到服务端渲染,直接接入,稍微修改代码,就可以享受服务端渲染带来的直出体验。

实现:

一:搭建中间服务器

二:服务端监听请求,收到请求,根据项目名找到对应的路由信息。

三:根据路由信息,生成html,将html 和 state一同返回前端。

使用方法

由于服务端渲染的特殊性,所以需要配置没那么简单。

主要有两点 1: 事件挂载 => 服务端的生命周期只走到componentWillMount,而客户端则会有完整的生命周期,因此部份事件可以挪到componentDidMount中处理

2: 自定义构建配置: 不构建css等

苍龙:组件平台

这里可以查看其它项目组的组件库,可以编辑自己组件库。

参考:http://my.oschina.net/wanjubang/blog/673683#OSC_h2_3

白虎:自动化集成平台

背景:

参考:http://my.oschina.net/wanjubang/blog/683635#OSC_h2_3

设计思路:

项目成员每次提交代码都会在平台跑一遍测试。 如果不需要执行 --disable 。 然后可以登录到白虎平台查看代码覆盖率和 测试是否通过等信息。 项目成员只需要编写测试用例就可以了。管理员可以用来查看项目的代码质量。

实现:

系统采用典型的master/slave架构。 采用doker容器进行部署。 项目需要使用直接安装client端,然后连接我们的白虎服务器就可以了。

使用方法

客户端:

reliable server -m <reliable-master:port> --verbose

伏虎: 文档服务器 (集成mock)

参考:http://my.oschina.net/wanjubang/blog/673683#OSC_h2_1

相关文章

导入moment 使用方式 年月日,时分秒 星期几 相对时间 7天后 2小时后 明天 将毫秒转换成年月日
@ 一、前言 为什么介绍redux-actions呢? 第一次见到主要是接手公司原有的项目,发现有之前的大佬在处理...
十大React Hook库 原文地址:https://dev.to/bornfightcompany/top-10-react-hook-libraries-4065 原文...
React生命周期 React的生命周期从广义上分为挂载、渲染、卸载三个阶段,在React的整个生命周期中提供很...
React虚拟DOM的理解 Virtual DOM是一棵以JavaScript对象作为基础的树,每一个节点可以将其称为VNode,用...
React中JSX的理解 JSX是快速生成react元素的一种语法,实际是React.createElement(component, props, ....