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

简看Canvas源码,突发奇想

最近都在和Canvas打交道,前端使用Canvas的方式真的太简单了,你简单调用几个API就能够给你绘制你想要的内容,比如文本、图片、视频

最近都在和 Canvas 打交道,前端使用 Canvas 的方式真的太简单了,你简单调用几个 API 就能够给你绘制你想要的内容,比如文本、图片、视频。但是有些 API 摸不准会不会影响性能,对于某些 API 实现比较好奇,比如 save 和 restore 这两个 API 内部做了哪些事。

好奇之下,决定看一看 Canvas 绘制的源码。因为我写的文章比较多(330+ 篇),文章都会有一些关联。关于浏览器的源码,自然而然想到了 webkit,前面写过浏览器原理相关的文章 精心推荐一些浏览器工作原理的资料看完这本书,前端技术更进一步

webkit 的源码(https://github.com/WebKit/WebKit)可以在 GitHub 上找到,其中 Canvas 的源码在 WebCore 下的 html 目录下。

0135d5c424fd4f6b7a679a8afc4a330f.png

比如我们想看 restore 这个方法的实现,可以用 Xcode 打开源码:

c0ad1fd559c19b75c64ab387bdeeb7fe.png

顺藤摸瓜,再看下 GraphicsContext,GraphicsContext 在 iOS 比较常用,主要用来自定义绘制一些内容。restore 在 GraphicsContext 中的实现如下:

c2b4abc6a30aa49a8ff09fa2914dc942.png

我们再看下 save 的方法:

3e06c6462185a68ef8c4ddde90024a19.png

看到这里,我明白了,Canvas 使用的渲染机制其实和 iOS 底层用的是一样的,相当于同一套渲染机制既服务了 web 又服务了 iOS,很好的实现了跨端。这种方式的巧妙之处在于 js 与 C++ 之间可彼此调用。

写过 iOS 的朋友都知道,在 iOS 中使用 JS 很简单。那么是不是可以把某些业务通过 js 来实现,然后利用 bridge 的能力实现一些通用的服务呢!这种 bridge 不借助于 webview,而是直接把端的渲染能力提供一个 bridge,然后用 js 去调用。

比如我们实现一个通用的文档阅读器,既可以用于 pc、h5,又可以用于 NA,所有的业务逻辑通过 js 实现,App 侧提供渲染能力的 bridge,这样比较简单地实现了跨端逻辑的复用。

当然,以上是我看 Canvas 源码,突然想到的,若有不妥的地方可指出。最近,我的 Canvas 宝贝又新增了一些内容:

7deba917b8385f1c71d8c2969b4efd94.png

地址:

https://github.com/lefex/FE/wiki/Canvas-%E5%AE%9D%E8%B4%9D

大家加油!

0a91e7a474cd0f5925d601cea5bd7b30.png

长按关注

素燕《前端小课》

帮助 10W 人入门并进阶前端

官网:https://lefex.gitee.io/



推荐阅读
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)
    从2月14日开始,上传程序的同学可能会遇到提示上传失败的提示.并且打开自己的钥匙串,发现所有的证书全部都显示此证书签发者无效.出现以下情况:Failedtolocateorgene ... [详细]
  • linux编写弹球游戏,手把手教你开发一款基于Box2D的弹球游戏(一)
    今天我们来介绍一款物理引擎,并基于它完成一个弹球游戏。提到物理引擎,就是在游戏中模拟真实世界的运动,碰撞,摩擦等等。Coco ... [详细]
  • 在应用开发中少不了界面元素的布局、适配、自适应。之前苹果已经为我们提供了 AutoLayout 和 SizeClasses,方便我们实现页面的自适应弹性布局。但对于一些复杂的交互界 ... [详细]
author-avatar
弥囜_550
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有