前端如何高效的与后端协作开发

2023-11-15

前端如何高效的与后端协作开发

1. 前后端分离

前端与后端的分离,能使前端的开发脱离后端的开发模式,拥有更大的自由度,以此便可做前端工程化、组件化、单页面应用等。

可以参考:前后端分离、web与static服务器分离

2. 尽量避免后端模板渲染

web 应用的渲染方式分为服务器端渲染和客户端渲染,当下比较推荐的方式是客户端渲染,数据使用全 ajax 的方式进行交互。

除非在一些不得不使用服务器端渲染的情况下(如门户、电商等),应当尽量使用客户端渲染,因为客户端渲染更能使前后端分离(项目分离、代码解耦、协作分离、职责分离等),也能更好的做本地接口模拟开发,提升开发效率。

即使用服务器端渲染,在技术支持的条件下,可以使用 node 中间层(由前端人员开发),代替传统的后端模板渲染,这样可以使后端与前端完全解耦,后端与前端只有数据上的往来。

可以参考:细说后端模板渲染、客户端渲染、node 中间层、服务器端渲染(ssr)

3. 尽量避免大量的线上调试

做好本地接口模拟开发(包括后端模板渲染),避免大量的线上调试,因为线上调试很不方便,也很费事,并且每次更新代码,都需要重新构建,然后同步到服务器。

所以做好本地接口模拟开发,只要程序在本地运行是没问题的,一般线上就不会有太大的问题,这样就能大幅降低调试工作量,提升开发效率。

4. 本地接口模拟开发

本地接口模拟就是在本地模拟一个与服务器差不多的环境,能够提供数据所需的接口,进行错误模拟处理等等。

本地接口模拟开发的意义就在于能够在本地完成几乎所有的开发与调试,尽量减少线上的调试,提高开发效率。

一些常用库:

  • browser-sync: 能让浏览器实时、快速响应文件更改(htmljscsssassless 等)并自动刷新页面,并且可以同时在PC、平板、手机等设备下进行调试。
  • webpack-dev-middleware: A development middleware for webpack
  • webpack-hot-middleware: 热更新本地开发浏览器服务

另外,本地接口模拟开发需要后端开发人员有规范的接口文档。

可以参考:本地化接口模拟、前后端并行开发

5. 规范的接口文档

前端与后端协作提升开发效率的一个很重要的方法就是减少沟通:能够形成纸质的文档就不要口头沟通、能够把接口文档写清楚也不要口头沟通(参数、数据结构、字段含义等),特别是线上协作的时候,面对面交流是很困难的。

一个良好的接口文档应当有以下的几点要求与信息:

  1. 格式简洁清晰:推荐用 API Blueprint
  2. 分组:当接口很多的时候,分组就很必要了
  3. 接口名、接口描述、接口地址
  4. http 方法、参数、headers、是否序列化
  5. http 状态码、响应数据

接口文档可以用一些文档服务(如 leanote)来管理文档,也可以用 git 来管理;书写方式可以用 markdown,也可以 YAMLJSON 等。

推荐使用 markdown 方式写文档,用 git 管理文档。

可以参考:

6. 去缓存

前端需要做好去客户端缓存的功能,保证用户始终都是使用的最新资源,不会因为因为缓存的问题而出现 bug。

传统的去缓存是在静态资源 url 上加上版本号或者时间戳,不过因为构建工具的出现以及一些浏览器已经不支持这种方式了的缘故,这种方式已经是过去时了。

现在去缓存是将文件 hash 化命名,只要文件变动,文件名就会不一样,以此才能彻底的去缓存。如果使用 webpack 进行打包,会自动将所有文件进行 hash 化命名。

可以参考:webpack output-filename

7. 做好错误处理

前端与后端都需要各自做好错误处理,以便发生错误能够有友好的提示,也能在用户反馈时快速准确定位错误来源和原因。

一般前端的错误分为:

  • 脚本运行错误:js 脚本错误,找到堆栈信息,然后解决
  • 接口错误:服务器报错、数据返回不对、没有响应数据、超时等

而接口错误分为:

  • 状态码错误(状态码非 2XX):服务器报错、超时等
  • 数据错误:没有响应数据、数据格式不对、数据内容不对

可以参考:HTTP状态码

8. 运行时捕捉 js 脚本错误

当用户在用线上的程序时,怎么知道有没有出 bug;如果出 bug 了,报的是什么错;如果是 js 报错,怎么知道是那一行运行出了错?

所以,在程序运行时捕捉 js 脚本错误,并上报到服务器,是非常有必要的。

这里就要用到 window.onerror 了:

window.onerror = (errorMessage, scriptURI, lineNumber, columnNumber, errorObj) => {
  const data = {
    title: document.getElementsByTagName('title')[0].innerText,
    errorMessage,
    scriptURI,
    lineNumber,
    columnNumber,
    detailMessage: (errorObj && errorObj.message) || '',
    stack: (errorObj && errorObj.stack) || '',
    userAgent: window.navigator.userAgent,
    locationHref: window.location.href,
    cookie: window.document.cookie,
  };

  post('url', data); // 上报到服务器
};

线上的 js 脚本都是压缩过的,需要用 sourcemap 文件与 source-map 查看原始的报错堆栈信息。

可以参考:

9. 移动端远程调试、vConsole、TBS Studio

因为移动端的开发无法像 pc 端开发一样使用 Chrome 的开发者调试工具,所以调试移动端需要一些额外的技巧。

移动端应用一般都运行在微信浏览器中、webview 中、手机浏览器中。

远程调试(Remote Debugging)

远程调试就是通过 USB 连接、端口转发、搭建代理等方式,将一个设备的 web 页面映射到另一个设备上,比如将手机的 webview 映射到 pc 上,达到调试的目的。

移动端 web 应用调试难题从一开始就有,不过后来浏览器厂商基本都推出自己的远程调试工具来解决这个问题,包括 Opera MobileiOS SafariChrome for Android、UC 浏览器等,另外还有一些第三方开发的远程调试工具,比如 weinre 等。

以 Android 为例,可以将 webviewChrome for Android 中的页面映射到 pc 端的 Chrome DevTools,然后就可以在 pc 端调试移动端的页面了。

可以参考:移动端Web开发调试之Chrome远程调试(Remote Debugging)

vConsole

一个轻量、可拓展、针对手机网页的前端开发者调试面板(chrome 开发者工具的便利实现)。

这个是内嵌的页面当中的便捷调试器,基本上能够满足一般的需要远程调试的页面。

图片描述

TBS Studio

因为微信浏览器是定制的浏览器,一般的远程调试方式都不可用,需要配合特定的工具,如微信开发者工具。

TBS Studio 是另一个可以像 Chrome 一样调试远程微信浏览器页面的强大工具。

可以参考:

10. 前端后并行开发

正常情况下,前端的开发在完成 UI 或者组件开发之后,就需要等后端给出接口文档才能继续进行,如果能做到前后端并行开发,也能提升开发效率。

前后端并行开发,就是说前端的开发不需要等后端给出接口文档就可以进行开发,等后端给出接口之后,再对接好后就基本上可以上线了。

在本地化接口模拟的实现下,就可以做到前后端并行开发,只是在代码层面需要对 ajax 进行封装。

可以参考:本地化接口模拟、前后端并行开发

11. 友好的沟通

不管工具多么厉害,很多时候都免不了要当面沟通,友好、心平气和的沟通也是很重要的哩!

后续

更多博客,查看 https://github.com/senntyou/blogs

作者:深予之 (@senntyou)

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端如何高效的与后端协作开发 的相关文章

随机推荐

  • 刷脸支付成为下一个主流我们拭目以待

    智能刷脸支付已成为2019支付生态的风口 对于超市 便利店 企事业单位 停车场 餐厅等所有支付场景 越早加入刷脸支付 将享受越多的风口红利 刷脸支付 智慧医疗 智慧校园 智慧银行 餐饮超市酒店 无感停车场 各场景解决方案 软件定制开发 支付
  • 谷歌面试题解析: 扔鸡蛋的正确方式是什么?

    面试中 为了考察应聘者的思维方式 面试官偶尔会出一些谜题 Puzzles 比如 在谷歌 就有这样一道让人 闻风丧胆 的面试题 You work in a 100 floor building and you get 2 identical
  • 个人网站搭建记录

    个人网站地址 实际需要 云服务器 域名 网站备案 知识储备 node写一些后台接口 express mysql数据库 navicat连接数据库 mysql 常用终端命令行 https www jb51 net article 194140
  • hexo问题及解决

    1 推荐主题 butterfly 的默认 layout 很好 尤其对于内容比较多的 blog 安装方法如下 npm install hexo renderer pug hexo renderer stylus save npm instal
  • QMessageBox、QColorDialog、按钮汉化显示

    QMessageBox QColorDialog 按钮汉化显示 版本 Qt5 9 9 环境 QtCretator MinGW 在Qt源码目录下找到qt zh CN ts复制一份到工程目录 该文件在 G install Qt Qt5 9 9
  • 图像仿射变换shear怎么翻译?剪切、错切、推移哪个译词好?

    老猿Python博文目录 https blog csdn net LaoYuanPython 仿射变换博文传送门 带星号的为付费专栏文章 图像仿射变换原理1 齐次坐标来龙去脉详解 图像仿射变换原理2 矩阵变换 线性变换和图像线性变换矩阵 图
  • 关于CASE WHEN造成的查询缓慢的生产问题思考

    因为做的是类似SAAS的系统 关于同一个业务没会有不同的视角 有管理员 有类别分类的 有特别逻辑处理的 总而言之涉及到很多方面 再加上历史遗留问题导致导致的数据问题 这SQL写起来真的酸爽 除了简单的关联 还要考虑到一个效率问题 最近就因为
  • 搜索引擎的发展历史

    第一代搜索引擎 分类目录时代 分类目录时代的的搜索引擎会收集互联网上各个网站的站名 网址 内容提要等信息 并将它们分门别类的编排到一个网站中 用户可以在分类目录中逐级浏览并寻找相关的网站 搜狐目录 hao123等就是典型的分类目录时代的代表
  • 如何在数据库事务提交成功后进行异步操作

    原文链接 问题 业务场景 业务需求上经常会有一些边缘操作 比如主流程操作A 用户报名课程操作入库 边缘操作B 发送邮件或短信通知 业务要求 操作A操作数据库失败后 事务回滚 那么操作B不能执行 失败后也可以重新进行自调度 操作A执行成功后
  • css3学习以及移动端开发基本概念的思考

    html height 1000px background color red media screen and width 2560px html background color blue 注意 首先必须弄清楚 我们的width hei
  • => js 中箭头函数使用总结

    箭头函数感性认识 箭头函数 是在es6 中添加的一种规范 x gt x x 相当于 function x return x x 箭头函数相当于 匿名函数 简化了函数的定义 语言的发展都是倾向于简洁 对人类友好的 减轻工作量的 就相当于我最钟
  • Zookeeper启动报错~找不到或无法加载主类

    按照之前自己写的博客安装zk 在启动的时候却发现 就是启动不了 百思不得其解 额 唯一的区别就是zk的版本不一样了 最后通过查看启动日志 一般都是在zk的log路径下 查出竟然报了如下的错误 root centos 1 logs tail
  • 博图程序需要手动同步_TIA(博图)S7-1200实战篇:模拟量标定3--SCL语言生成成FC/FB块续...

    往期相关回顾 定义各变量名称传感器量程上限 HI 下限 Lo PLC接收数字量 上限 K1 下限 K2 模拟量输入 AI 然后公式是 AI K2 K1 K2 HI Lo Lo 我们已经知道传感器标定的公式 那又如何在博图SCL语言环境编写程
  • 【精读系列】GloVe: Global Vectors for Word Representation

    本论文介绍了一种基于计数统计的词向量学习方法 GloVe 作者实验说明效果优于 Word2Vec 模型 阅读完成时间 20221109 一些预备知识或者是常用知识 GloVe 模型属于 count based method 所谓 count
  • Flink CDC(2.0) 如何加速海量数据的实时集成?

    原文 Flink CDC 如何加速海量数据的实时集成 知乎 导读 Flink CDC如何解决海量数据集成的痛点 如何加速海量数据处理 Flink CDC社区如何运营 如何参与社区贡献 今天的介绍会围绕下面四点展开 Flink CDC 技术
  • 自媒体怎么做?综合类自媒体账号怎么做好

    原创 自媒体运营中比较大众化的就是综合类 比如趣头条 搜狐号等 可以发文字内容 可以发图文内容也可以发视频 可以说是多样化的 对于创作者来说 这样的平台更加方便 但是运营其实更加难 如果只是单一类的 掌握一种运营方法还比较容易 但是这种多样
  • FATFS实现数据追加功能(原文不覆盖)

    在对FATFS的应用中我们经常需要把采集的数据存入的文件中 用作保存 也许我们的系统是一个长期的运行过程 但是我们的数据可能不是持续采集的 所以我们这样写代码 注册一个工作区域 f mount 0 fs 打开创建一个新文件 res f op
  • Chrome开启自带多线程下载

    在地址栏输入 chrome flags 然后在搜索框中输入 Parallel downloading 选择enabled 重启Chrome
  • hadoop学习笔记之分布式计算框架

    分布式计算框架 移动计算而不是移动数据 移动计算就是把你写好的计算 程序拷贝到不同的计算节点上运行 MapReduce适合做离线计算 Storm适合做流失计算 Spark适合做内存计算框架 从HDFS上存储的数据作为我们MapReduce的
  • 前端如何高效的与后端协作开发

    前端如何高效的与后端协作开发 1 前后端分离 前端与后端的分离 能使前端的开发脱离后端的开发模式 拥有更大的自由度 以此便可做前端工程化 组件化 单页面应用等 可以参考 前后端分离 web与static服务器分离 2 尽量避免后端模板渲染