热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2021TWeb腾讯前端技术大会精彩回顾(附PPT)

点击上方前端Q,关注公众号回复加群,加入前端Q技术交流群周日参加了TWeb腾讯前端技术大会,这里根据自己的理解,对部分主题进行总结回顾,一些主题本文只是

点击上方 前端Q,关注公众号

回复加群,加入前端Q技术交流群

周日参加了 TWeb 腾讯前端技术大会, 这里根据自己的理解, 对部分主题进行总结回顾, 一些主题本文只是做概要性的介绍, 如果对主题感兴趣, 可以关注 "前端Q", 号内回复 tweb 领取大会全部 ppt.

我们来看第一个主题~

腾讯文档渲染优化之路

讲师: 肖骏 - 腾讯前端开发工程师

腾讯文档目前有 1.6 亿月活, 日活用户峰值超过了 1600 万, 它需要支撑起千人同时编辑, 极限情况下,需要支撑数十万行的数据渲染交互不卡顿.

讲师讲述了在河南暴雨汛情期间, 一份 "救命文档" 写下的民间史诗. 验证了腾讯文档的高性能以及重要性.

11cd73c6ea057e3907ccd13f8426204f.png

腾讯文档是怎么一步步优化性能的呢? 讲师从以下几步做了阐述

  • dom 时代:

    • 使用will-change 或translateZ 等提升元素层级

    • 使用transform 和opacity 属性

    • 尽量避免改变元素的几何属性(例如宽度、高度、左侧或顶部位置等)

    • 修改“paint only”属性(例如背景颜色、文字颜色等)-> repaint

    • layout

    • paint 优化

    • dom 滚动复用, 通过虚拟列表减少渲染的 dom 数量

  • canvas 时代:

    • 遍历待绘制内容

    • 相同状态内容整理

    • 分类渲染

    • 单元格使用 canvas 渲染

    • 减少渲染时触发 GC

    • canvas 切换状态机优化

    • 离屏 canvas 与复用

讲师除了介绍腾讯文档的优化手段, 还介绍了如何精确、自动化地统计 FPS, 这里就不展开了, 详细的可以在 ppt 查看, 我们继续下一个主题~

Flutter 音视频开发实践

讲师: 牛赞 - 腾讯前端高级工程师

根据 statista 和 stackoverflow 的统计数据, 今年 flutter 的热度已经超过了 react native.

ff7afcb6efdb5502678211443a17fee7.png

讲师介绍了 Flutter 的架构, Flutter 和 Web 开发的差异. 也介绍了腾讯实时音视频 TRTC(Tencent Real-Time Communication)在互动直播, 会议, 在线教育等场景的应用. 尤其在疫情期间, 是怎么助力线下业务搬到线上的.

期间, 讲师详细介绍了 TRTC 的架构, 以及 Flutter 在这个架构中扮演的角色.

最后, 讲师介绍了 TRTC Flutter 音视频的 SDK 设计, 主要围绕以下面临的几个挑战来阐述:

3062c8433774d8bf78e2bbd36bcddbf0.png

这些问题, 读者如果感兴趣, 可以获取到 ppt 后进一步了解~

我们来看下一个主题:

如何设计一门上万人使用的 DSL - 腾讯问卷 DSL 实践之路

讲师: 李泽帆 - 腾讯前端工程师

腾讯问卷的开发同学会做一些问卷的定制开发, 每份问卷, 和需求方沟通, 可能要 3 天时间才能开发完. 通常会出现如下情况:

e876b0fdc7fdf7728e702c426bf4bc8b.pnge7df043fc51abeec5bae59d658a6fe43.png

面对这种沟通成本巨大的场景, 需求方清楚地知道逻辑, 但不会写代码. 这种情况就适合用 DSL 来解决.

这里简单介绍下 DSL (Domain-specific language), 中文翻译为领域特定语言,例如 SQL、JSON、正则表达式等。与之形成对比的是 GPL(General Purpose Language),中文翻译为通用编程语言,我们熟悉的C、C++、Javascript、Java 语言等就是。

DSL 有如下特点:

  • 是一门便于人们理解的编程语言或规范语言,并且可以被计算机解释执行。

  • 相比于通用编程语言,只能表达有限的逻辑。

  • 因为受限的表达性,所以只会在某一些领域广泛应用。

我们来看一下腾讯问卷实现的 DSL

8228668cf96f172104ebca40c370ee98.png

我们来简单了解下实现原理:

  • 通过使用解析器生成器将 DSL 翻译成可执行的语句, 腾讯问卷使用了 PEG.js

    5d11ef19640426675766040ed5f32f22.png

来看一个案例, 如何通过 DSL 表述两分钟前:

56ce76601e5ab07adfd45ff2e297e85a.png

来看一下基于 peg.js 的实现:

ff078708ec74660efa90bd9b0983a31f.png

可以看到, 有了 PEG.js, 我们不需要了解编译原理, 就可以很好地完成一个简单的 DSL 语言的编写.

讲师除了介绍 DSL 的实现方法之外, 还介绍了怎么设计更容易被书写, 以及 DSL 利弊. 详情还是查看 ppt 啦~

远程办公下开发测试协同如何提效

讲师: 杨晨(腾讯前端工程师) & 吴文斌 (腾讯前端高级工程师(whistle 作者))

两位讲师主要介绍了一个基于【Whistle】的代理集成多种功能的免代理平台 TDE (Tencent Debugging Experience). 对于还不了解 whistle 是什么的同学, 可以点击这里了解:Whistle实用功能介绍

3547792b87bf9f838f2559729721c352.png

拥有了 TDE, 我们就可以不用在本地安装 whistle, 而是通过一套系统, 在被测界面上注入操作面板解决各种代理, 抓包问题. 比如切换环境只需要在被测界面的面板点一下. 另外就是可以做到云抓包, 比如开发可以抓到测试同学的包. 同时 TDE 也解决了我们的代理配置无法共享的问题:

35ae2ed35ba2a60e44d93d6515b03a16.png

本次分享, 讲师还详细介绍了实现原理, 比如 whistle, nohost 的架构和实现细节, 安全机制等.

这个主题很多很多干货,就不列举了,只能说不能错过。 大家感兴趣的话还是进一步查看 ppt 哈~

Kubernetes 微服务体系下的便捷 BFF 开发

讲师: 王振威 - CODING 研发总监

讲师介绍了 BFF (Backend for Frontend) 的由来, 在没有 BFF 层时, 前端向后端请求数据, 会面临一个 N + 1 问题 (一个界面请求 N 个接口), 如:

9e23f0152718d6f8cb742a8a45bfcd79.png

这是不合理的, 渲染一个博客列表, 不仅需要查询博客列表, 还需要查询博客详情, 另外还要再分别发请求获取博客的评论, 点赞信息的请求.

这里的本质问题是前端是界面思维, 后端是数据思维, 这么直接请求, 就会导致接口调用复杂失控, 不利于后期维护:

ecd868e12906cf42229159d0dc65c621.png

所以我们需要 BFF 层:

f63dd093c34ddc3ff4ebb741afcd3a4f.png

如此, 前端就不再需要请求 N 个接口, 而是将这部分工作交给了 BFF 层, 而 BFF 层请求 N 个接口, 不存在外网延时, 鉴权等问题, 服务更加可控和高效.

接着, 讲师介绍在 kubernetes 下, BFF 会面临以下问题:

  • 环境搭建

    • 微服务数量多, 环境搭建复杂

    • 环境脆弱,易损坏

  • 本地资源不够用

    • 微服务占用资源太多

  • 编码自测循环耗时太久, 有些服务本地无法完成调试, 需要部署到开发或测试环境.

讲师介绍了通过 K8s 生态打造弹性环境体系来解决以上问题, 弹性环境体系可以确保每个人拥有云上独立的开发测试环境, 此外还可以通过 vscode 插件直连开发环境, 做到修改代码及时生效.

e497e20146e0c44a93b3a9fb85ea39a7.png

这一切, 都封装在背后, 对于开发者而言, 只是简单的改动代码, 环境, 资源都不需要考虑.

957250893b8e635fad91f1b49b2cbece.png

如上图, vscode 通过安装 nocalhost 插件, 点击开发环境右侧的小锤图标按钮, 即可在本地开发代码, 而这些代码, 包括 vscode 中的命令行, 都是一个云上的, 改完代码重启服务可以立即看到效果, 而无需等待漫长的 CI CD 流程.

如果大家想进一步了解 nocalhost, 可以观看如下视频, 或查看 ppt:

TWeb 还有很多主题这里没有介绍, 如低代码, 可视化, 跨端, 编辑器和效能方面的一些主题, 限于篇幅, 这里就不一一展开了, 大家可以关注 "前端Q", 号内回复 tweb 领取大会全部 ppt 进行学习哦~

37174b8d3e83ffcc466cf9c3e33edc22.png

往期推荐

大厂面试过程复盘(微信/阿里/头条,附答案篇)

83f6c7d271ebad670293023a3ee56a64.png

面试题:说说事件循环机制(满分答案来了)

7b5423e501c5a6daa26891c0a800a5a0.png

专心工作只想搞钱的前端女程序员的2020

fffb4e58c3a5f76f3c56fd84afa2e758.png


最后

  • 欢迎加我微信,拉你进技术群,长期交流学习...

  • 欢迎关注「前端Q」,认真学前端,做个专业的技术人...

6b719d8c17ff889369092d92164fc487.png

5fb7408250f83d5c04e847411bd92ff1.png

点个在看支持我吧

cec2b64d6c0597a9faccda952ace6ad2.gif



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
author-avatar
蛋蛋小可爱的诱惑_360
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有