告诉一下大家有什么功能可以用了。

Records & Tuples Proposal 不可变数据

umi 已经支持了,用了 umi@4 就冲吧,不可变数据+react 太香了

  1. const proposal = #{
  2. id: 1234,
  3. title: "Record & Tuple proposal",
  4. contents: `...`,
  5. // tuples are primitive types so you can put them in records:
  6. keywords: #["ecma", "tc39", "proposal", "record", "tuple"],
  7. };
  8. // Accessing keys like you would with objects!
  9. console.log(proposal.title); // Record & Tuple proposal
  10. console.log(proposal.keywords[1]); // tc39
  11. // Spread like objects!
  12. const proposal2 = #{
  13. ...proposal,
  14. title: "Stage 2: Record & Tuple",
  15. };
  16. console.log(proposal2.title); // Stage 2: Record & Tuple
  17. console.log(proposal2.keywords[1]); // tc39
  18. // Object functions work on Records:
  19. console.log(Object.keys(proposal)); // ["contents", "id", "keywords", "title"]
  1. const measures = #[42, 12, 67, "measure error: foo happened"];
  2. // Accessing indices like you would with arrays!
  3. console.log(measures[0]); // 42
  4. console.log(measures[3]); // measure error: foo happened
  5. // Slice and spread like arrays!
  6. const correctedMeasures = #[
  7. ...measures.slice(0, measures.length - 1),
  8. -1
  9. ];
  10. console.log(correctedMeasures[0]); // 42
  11. console.log(correctedMeasures[3]); // -1
  12. // or use the .with() shorthand for the same result:
  13. const correctedMeasures2 = measures.with(3, -1);
  14. console.log(correctedMeasures2[0]); // 42
  15. console.log(correctedMeasures2[3]); // -1
  16. // Tuples support methods similar to Arrays
  17. console.log(correctedMeasures2.map(x => x + 1)); // #[43, 13, 68, 0]

content-visibility 可见渲染

按需渲染做起来总是性能差一点,css的原生能力解决你的烦恼,无脑使用就好了,一般业务不会碰到问题。

content-visibility 属性有三个可选值:

  • visible: 默认值。对布局和呈现不会产生什么影响。
  • hidden: 元素跳过其内容的呈现。用户代理功能(例如,在页面中查找,按Tab键顺序导航等)不可访问已跳过的内容,也不能选择或聚焦。类似于对其内容设置了display: none属性。
  • auto: 对于用户可见区域的元素,浏览器会正常渲染其内容;对于不可见区域的元素,浏览器会暂时跳过其内容的呈现,等到其处于用户可见区域时,浏览器在渲染其内容。

640.gif

image.png

backdrop-filter 毛玻璃

毛玻璃能显著提升精致感,backdrop-filter 可以通过 backdrop-filter 和 -webkit-backdrop-filter 来支持 chrome,edge 和 safari, 除了火狐没人受伤的世界。

  1. backdrop-filter: blur(8px);
  2. -webkit-backdrop-filter: blur(8px);

image.png

webp 加载速度

除了 IE 全部支持。
image.png

效果非常无脑
image.png

我写了一个库,可以将图片转化为webp 。

代码如下

  1. const nodeImagePng = require('node-image-webp');
  2. // 找到文件中所有的图片
  3. const imageList = nodeImagePng.findAllUrl(fileName);
  4. // 从 url 获取图片并转转化为 webp
  5. nodeImagePng.webImageToWebp(url, distPath);
  6. // 将 distPath 上传到cdn
  7. const { url, ...reset } = await zipAndUpload(item.distPath, false);