几乎所有构建系统都选择使用watch机制来解决开发过程中需要反复生成构建后文件的问题,但在watch机制下,长期以来我们必须忍受修改完代码,保存完代码必须喝口茶才能刷新看看效果的问题。在这里我们尝试探讨为什么watch不是银弹,并尝试寻找一种更好的方案来解决这个问题。

watch基于的事实

当一个文件修改,我们能知道其修改可能导致的文件修改,那么重新构建这些文件即可。

通常对于文件A,构建成文件B这种场景,这种对应关系是极好确定的。但现实场景下,构建过程往往不是那么简单。例如:

文件A + 文件B(被文件A引用) -> 文件C

在这种场景下,文件B的修改,可能难以定位哪些文件需要重新跑构建任务,因为可能有很多文件引用了文件B。

除非我们建立一个依赖树,并在每次文件更新的情况下更新依赖树,并根据新的依赖树触发文件构建。但这对每一个插件都需要自行实现这个机制,并且极易出错。故实际上watch机制仅仅是重跑了整个task。所以当项目越来越大的时候,watch机制将越来越慢(因为越来越多文件需要重新跑整个过程,即使通过缓存减少了整个过程所需的耗时)。

解决方案

  • src直接可用

    AlloyTeam & @ldjking,简单来说直接让src直接可跑,把构建任务放置在浏览器端,甚至根本不构建,既可做到及时修改及时刷新,在开发过程中减少了时间消耗。线下构建仅仅负责性能优化上的问题,不负责开发效率。
    典型代表有LESSReact等。但也有一些问题:

    1. 难以在浏览器端实现优雅的构建方式,难以提供强大的功能进一步减少开发成本,大部分只能采用类似<style type="text/less"></style>的方式引入脚本。
    2. 开发模式下的执行顺序不一定和实际场景相同,可能导致隐形bug出现,例如实现一个HTML inline由于开发模式下inline是异步的,而发布模式下inline时同步的,产生莫名其妙的bug。
    3. 浏览器编译性能堪忧,例如js版的sass,编译速度几乎无法忍受。
    4. 需要维护线上、线下两套构建系统,增加了工具开发成本。
  • 本地服务器动态构建

    一个事实是:在合理的规范支持下,我们可以从浏览器请求的文件,回溯到该文件构建过程中的入口文件。这样我们就可以动态触发一次构建过程。

    通过在本地建立一个服务器,让服务器捕获请求后,在服务器中动态构建。只要回溯到入口文件,我们便能将入口文件丢进gulp插件组成的管道中,则输出便是浏览器需要的文件。

    这样我们就能解决上面的所有问题。

为什么watch机制不是银弹?相关推荐

  1. 没有银弹,微服务架构改造的一条不归路。。。

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:https://www.cnblogs.com/skabyy ...

  2. 反射 字段_详解面试中常考的 Java 反射机制

    反射(Reflection) 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法. 反射是一项高级 ...

  3. 软件质量没有银弹:阿里巴巴的25个技术实践与坑

    作者简介:武小平(平晓),阿里巴巴测试专家,在CICD.自动化测试工具和质量管理方面有较多的经验,目前负责阿里巴巴研发协同平台阿里云RDC的测试. 转载来源:研发协同RDC微信公号(alirdc) 在 ...

  4. 是银弹吗?业务基线方法论

    Fred.Brooks在1987年就提出:没有银弹.没有任何一项技术或方法可以能让软件工程的生产力在十年内提高十倍.         我无意挑战这个理论,只想讨论一个方案,一个可能大幅提高业务系统开发 ...

  5. 雨季车辆天窗漏水解决银弹

    雨季车辆天窗漏水解决银弹 不同车型大同小异,本文以日产骐达为 例子做个总结. 原因: 排水槽,排水管被垃圾堵塞,或排水不畅. 解决办法: 高压气枪吹,条件允许的话再手动检查清理排水管 天窗排水管结构 ...

  6. 没有银弹-软件工程中的根本和次要问题

    没有任何技术或管理上的进展,能够独立地许诺十年内使生产率.可靠性或简洁性获得数量 级上的进步. There is no single development, in either technology ...

  7. MVC模式和DDD模式对比,谁才是银弹?

    目录 MVC模式和DDD模式对比,谁才是银弹? 从DDD的角度看MVC架构的问题 第一层:初出茅庐 第二层:草船借箭(战术设计) 第三层:运筹帷幄(战略设计) DDD的不足 总结 MVC模式和DDD模 ...

  8. 再读图灵奖得主Brooks 没有银弹 什么是卓越的设计者

    Brooks本身就是个天才, 是那种为数不多的学院派,又能客观的面对软件开发实践中的独特规律的天才. 和这样的大牛生活在一个时代的软件开发者是幸福的,总有一双深邃的眼在关注着 软件开发领域最本质的问题 ...

  9. 软件设计领域没有银弹,但代码大师MaxKanat-Alexander的建议绝对能给你带来启发...

    导读: 如何让简约设计始终贯穿在编程工作中,以及如何在编程工作中取得成功? 复杂的软件设计有哪些特征--如何构建杰出软件? 程序员为何会感到力不从心,应该如何持续改善? 成为明星程序员的秘密是什么? ...

最新文章

  1. 您详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus
  2. VTK:图片之CombiningRGBChannels
  3. 为什么spark没有java的交互模式?
  4. flutte的第一个hello world程序
  5. Windows下有关信息收集的命令
  6. python简笔画怎么画_怎样用tk语句在Python下画一棵树
  7. tensorflow 十四 强化学习Q-learning
  8. 三中好用的数组去重方式
  9. 【Zookeeper】源码分析之请求处理链(四)之FinalRequestProcessor
  10. 电路原理 邱关源 第五版 课后习题答案 课后习题详解
  11. Linux 配置 VNC 远程桌面
  12. 常见泰勒展开公式及复杂泰勒展开求法
  13. 【全新二开】首发淘宝京东唯品会自动抢单APP系统源码 修复众多BUG
  14. 基站位置查询系统_Android获取手机基站位置并进行基站定位的原理
  15. bootstrap 实现吸顶效果_多种方式实现吸顶效果
  16. 无锡IATF16949认证_无锡IATF16949培训_8.3.3.1产品开发输入
  17. 一些好用的链接(持续更新)——视频相关
  18. SAP MI01、MI04、MI07、MI10 批量盘点凭证创建+盘点数量+差异过账
  19. echarts自适应窗口(父盒子)大小
  20. 一、highcarts简介

热门文章

  1. [Micropython]TPYBoard v202 邪恶改装:TPYBoard制作廉价WIFI干扰器
  2. 学习quartz定时
  3. context:annotation-config / 和context:component-
  4. Linux中的MySql数据库远程连接
  5. 15套漂亮的 PSD 格式的图标,不一样的视觉效果
  6. vs2010常用快捷键
  7. [原创] MAME架构、编译及配置浅析
  8. MAC Opencv include选择
  9. Vue.js实现前段评论展示
  10. flowJS源码个人分析