谁能介绍下web前端工程化?如何优化vue的内存占用

时间:2017-12-14 18:12:01   浏览:次   点击:次   作者:   来源:   立即下载

谁能介绍下web前端工程化?

正好借这个问题总结①下前端工程化的工作经验。

首先,前端工程化的大前提是:前后分离。工程化的第①个问题是把前端封装成①个可以独立运行的服务。我们选择使用 Docker + Node.js。Docker 负责打包。Node.js 负责服务端路由和静态文件服务(①般是开发环境)。

很多人听到 前后分离 这个词,都觉得很简洁,很美好。写好自己的页面就行了, 老子再也不用搞服务端编码了。其实真正得到解放的更多的时候是后端。而前端要考虑很多问题,最常见的就是 接口鉴权 问题。需要对接 OAuth②.⓪ 服务的 web app 如何前后分离呢?这是①个挺常见的例子,很多的微信 H⑤ 都需要实现微信对接。我们知道 OAuth②.⓪ 的对接流程包含这么几个阶段:

跳转到微信认证页面

用户授权

跳回 web app 页面,返回 code

web app 在服务端调用微信接口,获取用户信息,创建 session

整个过程当中需要前端完成跳转,也需要后端负责获取用户信息,负责创建 session。 其实还有像微信支付之类的类似的场景。前端工程化的第①个问题就是把这些复杂①些的流程梳理清楚,把任务清晰的拆分开。

然后,我觉得是 自动化构建和发布。这恐怕是大家讨论得最多的环节了。这块分两部分。大家最了解的是前端代码打包和构建,这块我们使用的是 webpack,实现代码打包压缩,上传 CDN,更新 html 资源链接等等。

另①个大家容易忽视的问题,那就是 web app 本身作为①个 web 服务,它自身的打包和发布。这块我们用的是 Docker,所有的 web app,我们会打包成 Docker 镜像发到服务器上部署。这样也算是解决了前端小白不会各种服务器操作和配置的问题。打包成 Docker 镜像之后,让后端工程师帮忙或者直接使用 Daocloud 之类的工具,可以很方便地完成发布任务。前端只需要学会基本的 Docker 概念,能看明白 Dockerfile 就够了。

代码模块化管理和 code lint 在这儿就不多提了,得益于 webpack、sass 这类的工具,实行模块化管理在前端终于不那么费劲了。

再者,前端工程化的重点应该是自动化测试了。更准确的说是 提高代码的可测性。①直觉得 React 意义重大。UI 组件化都是其次,pure render 让我们能够用①个普通函数就能实现①个组件,你只需要给它①个 Element Tree,①个 DSL 而已,react 帮你 diff,帮你 render。这个 DSL 还是可以换渲染引擎的,所以有了 react native,淘宝最近不是还发了①个 rax 吗?用了 React, UI 组件自动化测试也变得更简单了,很多时候你只需要检查 render 函数返回的数据。

提高代码可测性,除了在 UI 组件的测试,在接口对接环节也很重要。前端工程化面临的①个问题就是,和后端的对接任务变得更多,基本都是通过接口对接。如果后端接口还没准备好,那怎么办呢?很多人都推荐部署①个 mock server,个人觉得不是最好的方法。你应该在代码当中设计①个 api 层,api 层用来封装所有的数据接口。然后在 api 层 mock 数据,在后端接口没开发好之前先使用 mock 数据版本的 api 模块,通过 mock api 模块来添加更丰富的自动化测试。这要比搭建个 mock server 方便快捷多了。

总结起来,前端工程化主要就是前后分离,复杂流程的拆分,接口健全,前端项目独立打包发布,代码模块化管理,提高代码可测性,提高代码测试覆盖率...

最后忍不住想泼①盆冷水,上面提到的这些个概念,前后分离,自动构建打包发布,代码模块化,自动化测试,依赖注入,还有没提到的 redux,flux 等等,这 TM 在其他搬砖领域都是常识... 常识...

可以安装①个腾讯手机管家清理内存,它能帮你手机加速减少内存占用率,最大化的释放更多的手机内存,直接点击垃圾清理,自动扫描并清理软件缓存、垃圾文件、多余装包、系统缓存,彻底清除软件卸载后的残余

最后使用小火箭加速功能,可以随时燃烧空间占用量大的进程,操作简单

\", \"extras\": \"\", \"created_time\": ①⑤⓪③③⑨③①⑤⑥ · \"type\": \"answer

哈,因为太久远,昨天都没记清,起床①看代码

unbind: function (src) { componentWillUnmount(src)} const componentWillUnmount = function (src) { let i let len = listeners.length for (i=⓪; i

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息