返回信息流学习JavaScript中,在node下写了一个html中检测资源更新并自动加戳的小脚本
虽然基本的功能可以实现了,但是感觉写的特别丑,想要得到改进的建议。。。
现在的实现是用正则匹配文件中引用资源的标签,然后再用正则匹配直到不再引用资源。然后从这个引用链的最后端向前依次加md5戳。有人说这样做是无依赖的,应该根据引用关系构建一个map,这一点不是很明白,构建这个map的方法不还是根据正则找出所引用的资源吗。。。
还有不知道是不是太面向过程了。。应该把每一个引用的文件抽象成一个对象,然后具有find_resources change_url等方法吗?
大概功能是下面这样;
代码:
附件(5.5KB) digester.js
这是一条镜像帖。来源:北邮人论坛 / java-script / #1716同步于 2017/3/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖
写了一个很初级的资源更新的脚本,求一下改进建议
matsunatsuri
2017/3/17镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
应用场景在后端?还是你本地开发?
实际生产环境不会这样做,代码打包时会加 hash后缀发布到gitlab,线上引用资源的html永远用不带hash后缀的文件名,服务端做重定向到最新的资源,参考express-urlrewrite这个模块,这样是前后端分离的,前端打包上线的文件自动被后端重定向,两端代码无耦合,逻辑独立,配合gitlab最新publish分支的版本来map出最新的资源hash,将前端仓库中白名单中的资源请求全部重定,不需要更新的lib资源不在白名单就好,否则对用户体验也不好,你上个线,全部本地缓存全失效?还能实现灰度发布,定时发布等功能
方案方面:
js中动态加载的资源你怎么办?requirejs异步加载的资源你怎么办?cdn合并的资源你怎么办?依赖当然也是个问题,关键在你用前端的想法解决是错误的,上线的代码不能让服务端重写啊,问题不好追溯,前后端扯皮太容易了,一个正则绝对搞不定
代码方面:
没有promise是个问题,但不主要,其实你做的就是gulp-replace的事儿,本地用gulp就行,十几行代码搞定,线上使用需要后端结合gitlab的api实现资源重定向
应用场景倒是没有。。就是学习浏览器缓存时看到别人提到的增量更新方案。。自己尝试实现下。
关于实际生产环境的做法,我devtool下看别人页面的代码,资源确实有带hash戳的情况啊,还有类似?v=xxx这样的格式 感觉更像是根据最新资源用模板生成的
方案里面确实很多问题都考虑不到。。目前还是初学者,很多问题都遇不到那么复杂的。
【 在 logsin 的大作中提到: 】
: 应用场景在后端?还是你本地开发?
: 实际生产环境不会这样做,代码打包时会加 hash后缀发不到gitlab,线上引用资源的html永远用不带hash后缀的文件名,服务端做重定向等到最新的资源 参考express-urlrewrite这个模块,这样是前后端分离的,前端打包上线的文件自动被后端重定向,两端代码无耦合,逻辑独立,配合gitlab最新publish分支的版本可以了
: 方案方面:
: ...................
那是覆盖式发布吧,我说的是版本式发布,很多页面要保留制作时的版本,也就是组件的版本,否则岂不是组件要永远兼容旧的页面?
还有很多参数是前端透传的,各种id
去实习了解下吧,这样自己看有点不得方法
【 在 matsunatsuri 的大作中提到: 】
: 应用场景倒是没有。。就是学习浏览器缓存时看到别人提到的增量更新方案。。自己尝试实现下。
: 关于实际生产环境的做法,我devtool下看别人页面的代码,资源确实有带hash戳的情况啊,还有类似?v=xxx这样的格式 感觉更像是根据最新资源用模板生成的
: 方案里面确实很多问题都考虑不到。。目前还是初学者,很多问题都遇不到那么复杂的。