前端每周学习分享--第6期
1.项目相关
1.1.gulp实现微信小程序项目工程化
这周主要就做了这一件事,上周分享里有gulp的基础知识,实际用的时候主要是要搭配配置各种gulp插件,而且在已有的一个小程序项目上验证,过程中也有许多出乎意料的坑点,各种被插件和环境折腾的配置工程师(😂)。
这块单独拎出来写了文章,项目也在github上。
项目地址:https://github.com/bluehat999/weapp-gulp
文章地址:https://www.cnblogs.com/mthz/p/weapp-gulp.html
2.ES6、ES7、ES8特性一锅炖
文章地址 : https://juejin.im/post/5b9cb3336fb9a05d290ee47e#heading-26
这篇文章整理的比较全,有些东西忘记的时候可以照着目录翻一翻。
3.异步处理 promise async await
参考文章:https://segmentfault.com/a/1190000016788484#articleHeader14
文章讲解很详细。
先总结一下我知道的几种异步编程的方式:
- 回调函数
- 事件监听
- 发布订阅
- Promise
- async/await
Promise
本身是一个状态机,存储三个状态(pending,resolved,rejected),一旦发出请求了,必须闭环,无法取消。
async/await是缺一不可的一对,是Promise的‘升级版’。
async必须声明的是一个function,await必须在这个async声明的异步函数内部使用,否则就会报错。await是在等待一个Promise的异步返回。
4.微信小程序运行流程看这篇就够了
文章地址 : https://juejin.im/post/5afd136551882542682e6ad7
微信小程序运行与渲染
IOS - JSCore 由 WKWebView 渲染
Android - X5 JSscore chrome53/57内核
DevTool - nwjs Chrome 内核
架构特点
WebView视图层与App Service逻辑层分处于两个线程,通过系统层的WeixinJsBridage进行通信。
编译特点
WXML被编译成JS的virtual dom,可局部更新dom
WXSS会编译成JS执行(WXSS相比于CSS支持@import)
打包时小程序根目录下所有文件都会被打包,记得清理其中无用文件。
小程序为何快
安装包缓存、分包加载、独立渲染线程、webview预加载、native组件
5.可迭代对象、迭代器与生成器
🌰可迭代对象
可迭代对象实现了@@iterator方法,即这个对象原型上有Symbol.iterator属性。这个属性是一个function。这是由可迭代协议约定的。
String、Array、TypedArray、Map 和 Set 都是内置可迭代对象,因为它们的原型对象都拥有一个 Symbol.iterator 方法。
自定义可迭代对象:
var myIterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
}
}
[...myIterable]; // [1, 2, 3]
用于可迭代对象的语法:
- for-of循环
- ...展开语法,如
[...'abc']; // ["a", "b", "c"]
- yield* [可迭代对象]
- 解构赋值
🌰迭代器
迭代器协议定义一个迭代器对象要有一个next()方法,该方法返回一个含有value和done属性的对象。(形如{value:11,done:false}
)
通常一个需要迭代的对象会同时实现迭代器协议和可迭代协议。
var myIterator = {
next: function() {
return {value}
},
[Symbol.iterator]: function() { return this }
}
🌰生成器
生成器对象是由一个 generator function 返回的,并且它符合可迭代协议和迭代器协议。
function* gen() {
yield 1;
yield 2;
yield 3;
}
let g = gen();
生成器的方法:
- Generator.prototype.next() : 返回一个由 yield表达式生成的值。
- Generator.prototype.return() : 返回给定的值并结束生成器。
- Generator.prototype.throw() : 向生成器抛出一个错误。
🌰yield和yield*
yield
关键字用来暂停和恢复一个生成器函数。
语法:[rv] = yield [expression];
yield后面表达式的值会被设置为迭代器协议next()函数返回对象的value值。
yield* 表达式用于委托给另一个generator 或可迭代对象。
比如:
function* g1() {
yield 2;
yield 3;
yield 4;
}
function* g2() {
yield 1;
yield* g1();
yield 5;
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· 提示词工程师自白:我如何用一个技巧解放自己的生产力
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 如何不购买域名在云服务器上搭建HTTPS服务