使用git修改fetch的默认行为
今天正好写了个自动化打包、编译、上传的gulp脚本,采用的是最新的gulp4。
借写完代码有点成就感的劲,稍微总结下gulp4和gulp3.X系列的使用区别
gulp本身的定位就是stream building system,典型的pipe代码风格。
gulp4相比于gulp3.X系列在流式规范上更加的严格。
1 | gulp.src - Emit files matching one or more globs |
光看api名字,可以看到多了
symlink,lastRun,parallel,series,tree,registry
这几个API一看,就知道用了nodeJS的child_process,eventEmitter来处理并发、订阅等
gulp.task('name',[,taskArr],fn)
fn回调函数处理链式调用这里有个比较纠结的点,
fn/taskArr
等处理并发任务、序列化任务,在gulp3系列,必须包一层task,
才能保证按照你想设定的顺序来执行,最后即使把项目写完了,后期看代码也会非常痛苦。
心得API点
parallel,series
允许你以树状结构安排并发、同步、异步任务,
它们的实现原理也很简单,就是通常意义上的高阶函数,把任务作为参数,在函数体内重新组织即可。gulp4中
gulp.src
的严格要求,必须return promise,return stream,callback()等
才能通知下个流执行gulp4中
gulp.tree
可以打印整个gulp4工作流中由内部算法生成的树状图,也比gulp3系列好很多。
从
redux
引入高阶函数API开始,这种API设计在各个主流库中的应用真是无处不在gulp4
尤甚
之前捣腾angular2和typescript发现一些用的少,但是蛮犀利的webpack插件
它可以将webpackConfig的数据,作为元数据渲染进html模板,借助这一点,可以做一些开发、生产环境的配置
在全局环境中配置,自定义变量。一般在写框架或者组件的时候用的比较多
提供动态require组件的便利性,也是神器
resolve.alias记住要用path.resolve写成绝对路径啊,不然引用的时候加上一些莫名其妙的__dirname就纠结了。
entry对象中,不要存在循环嵌套,不然webpack编译的时候,分分钟死循环啊
这个是个神器,用好了node的启动目录,就不必放心思在文件路径上了
path模块在nodejs中属于核心模块,目前状态是stable。
path模块提供了文件、目录等的使用机制。
在Windows和posix[例如*nix等的可移植操作系统接口实现平台]中可以轻松使用同一套API来操作文件和目录。
由于windows和POSIX使用不同的系统文件分隔符[一个是\
,一个是/
]。
因此nodejs提供了path.win32[方法名称]和path.posix[方法名称]来处理不同开发环境对任何操作系统的路径兼容
process.env.PATH
的分隔符.
出现的值\
、/
、..
、.
等,和cd
命令基本一致
1 | function enqueueUpdate(component) { |
前端开发主要分为前后端分离,以及服务端渲染两块。
对于前者直接Ajax交互数据即可,对于后者却存在一些开发配置上的麻烦。
正好借鉴爱屋吉屋的一些做法总结下
模板引擎是现在前端框架必须处理的一部分,无论是DOM层面还是V-dom层面,各有各的实现。
最近正想尝试下自己写套模板引擎,也在借鉴一些主流的库的写法。
这篇博客将会针对模板引擎持续更新研究结果。
1.支持数据填充
2.支持简单的JS表达式
1.利用正则匹配特定的标示,比如<%%>等
2.对于简单的JS表达式,转化为函数形式
3.采用 new Function(‘identifier’,functionString)生成函数
夜深了,不能搞太晚,后续文档之后补上。mark下代码时间 [16.6.9 01:25]
jsbride在hybrid中是应用非常广泛的,它的实现机理也很简单
===> 调用native提供的可以阅读到window对象的UI类,按照协议规范进行发出请求。
===> 在window对象利用sub/pub设计模式,代理随机callbackId对象来承载回调函数,
===> 发出请求【具体的有iframe方法】(ios中用的多),或者通用事件【window.prompt劫持】来实现通信。
===> 当然各家有各家的方式。
native调用js: WebView.loadUrl(“JavaScript:function()”)
js调用native: WebView有一个方法,叫setWebChromeClient。它的
onJsAlert,onJsConfirm,onJsPrompt方法将会在js调用window对象的对应的方法alert、confirm、prompt时候被触发。
1 | <button onclick="JSBridge._call('bridge','showToast', |
1 | var Util = { |
至此,前端层面层面代码结束,下面开始native层面的代码。
1 | public class JSBridgeWebChromeClient extends WebChromeClient { |
1 | WebView mWebView = (WebView) findViewById(R.id.webview); |
1 | public class JSBridge {/*创建映射池,具体实现不写出来了*/} |
JSbridge是个hybrid应用开发中非常常见的话题,其实也没有什么神秘的。
一个好的JSbridge是需要很好的设计模式的,yeap!
关于性能问题一直是现代前端工程必须讨论的话题,这是一篇小总结和资源收集的博客.
当然,对比下来,百度的方案是最优的,技术含量上面也可以说最高。
主流的大公司都会设置cache-control很长的时间,尽量优化网络请求。
淘宝采用了dns-prefetch进行TCP优化[对流量大的电商网站来说,这确实能节约不少时间]