- 博客(852)
- 资源 (1)
- 收藏
- 关注
原创 echarts:一个复杂的瀑布图制作
分析一下这个需求,主要有几个难点:答:echarts 官方 把这种柱子叫瀑布图,实现的原理就是使用一个透明的柱子给他顶起来。我直接搬过来原文。我本来想到的是 y 轴的 type 设置为 time但是做着做着,发现不行,我们做瀑布图要用到 stack,而 stack 不支持 type = time那就只能用 type = value 了,也就是要把时间转化为一个数值,比如在上面的图中,最底部是 13:00,我们先以 13:00 为 0,那么 12:00 就是 1,11:00 就是 2,以此类推。那么
2024-02-06 11:51:44 1059
原创 抽象语法树AST以及babel原理
什么是AST?借用一下百度百科的解释:在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。其实意思就是将代码以树的格式展现出来,举个例子你就明白了:大家可以在这个网站 https://astexplorer.net/ 上输入代码,会被解析为 AST,如图:可以看到,代码的每一个字符都以树的形式展示了出来。AST的应用
2022-04-10 23:47:29 1102
原创 RN:React Native原理以及新架构JSI、Fabric等概念
说明RN需要一个JS的运行环境, 在IOS上直接使用内置的javascriptcore, 在Android 则使用webkit.org官方开源的jsc.so。 此外还集成了其他开源组件,如fresco图片组件,okhttp网络组件等。RN 会把应用的JS代码(包括依赖的framework)编译成一个js文件(一般命名为index.android.bundle), , RN的整体框架目标就是为了解释运行这个js 脚本文件,如果是js 扩展的API, 则直接通过bridge调用native方法; 如果是UI
2022-02-12 21:56:59 16433
原创 webview原理和JSBridge
webview是一个嵌入式的浏览器,我们平常使用频率最高的就是客户端内嵌的webview特点:运行在webview中的JS代码有能力调用原生的系统API,没有传统浏览器沙箱的限制。目前javascript和客户端(后面统称native)交互的常见方式有两种JSBridgeschemaJSBridge当我们在native内打开m页,native会在全局的window下,为我们注入一个Bridge。这个Bridge里面,会包含我们与native交互的各种方法、比如判断第三方App是否安装、获取网
2022-02-09 18:39:10 6109
原创 小程序底层原理
小程序的 Http Rquest 请求是不是用的浏览器 Fetch API?不是, http request是由逻辑层发起,通过native去触发的,且不支持promise。小程序渲染再同一个线程么?小程序是双线程设计,即视图渲染与业务逻辑分别在运行在不同的线程中。这个设计主要是解决web技术中的一个痛点:web页面开发渲染线程和脚本线程是互斥的,长时间的脚本运行可能会导致页面失去响应或者白屏,体验糟糕。小程序为了更好体验,将页面的渲染线程和脚本线程分开设计在不同线程中执行,具体实现:● 视图v
2022-02-07 19:39:14 1486 1
原创 一文搞清楚软链接和硬链接
前言我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data)元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inod
2022-01-06 16:38:53 3797 6
原创 可能是最全的h5唤起App方案
背景调研 h5 唤起 App 方案目的:引导已下载用户打开APP,引导未下载用户下载APP。先说结论ios9 及以上用 Universal Link(uc/qq浏览器不支持,不过safari占比最大)android6及以上用applink(chrome和小众浏览器支持,市场占比还是比想像中大的)其它情况scheme(各种限制及弹窗确认)微信ios7月的版本已经支持ulink了,android还是乖乖走应用宝吧(引导出微信也行,效果不好)ok,接下来我们一个一个聊URL Scheme有
2021-11-08 18:28:49 18133 25
原创 px、pt、dpi、dip、分辨率、屏幕尺寸等等概念
文章目录基本概念屏幕尺寸屏幕比例像素pxpt/point分辨率DPI(点每英寸)PPI(像素每英寸)DIP/DPdensityandroid最后参考资料基本概念屏幕尺寸屏幕的对角线长度,一般讲的大小单位都是英寸。比如我们说 iphone6 是6.7英寸,就是屏幕对角线为 6.7英寸。屏幕比例只确定了对角线长,2边长度还不一定。所以有了4:3、16:9这种,这样就可以算出屏幕边长了。像素pxpx 不是自然界的长度单位,而是一个抽象的单位,比如:windows桌面属性里的“设置”看到,如果是10
2021-08-15 21:28:37 7295 11
原创 web端自动化部署方案
背景为了提高发布效率,践行DevOps,我们使用 gitlab 的 CI 工具作为我们前端项目的自动化部署方案。集成后的开发&发布模式发布测试环境:代码提交到test分支自动发布。发布正式环境:将test代码合并到master分支自动发布。集成CI/CD思路集成步骤1、集成ci脚本# test、preview和master分支默认支持线上部署# develop分支默认是开发分支,不建议(禁止)触发CI/CD流程,姑不作为默认触发部署分支stages: - instal
2021-01-30 23:52:10 871 3
原创 SEO:基于SPA的搜索引擎优化方案调研
背景由于SPA项目不利于SEO优化,于是有了以下几个方案方案选择方案一:服务端渲染(SSR)直接java或php渲染(那样就又是前后端不分离了,不考虑)服务端起一个node应用优点:SEO 友好首屏渲染快(可在服务端缓存页面,请求到来直接给 html)缺点:代码改动大、需要做特定SSR框架的改动(例如vue的nuxt,react的next)丢失了部分SPA体验node 容易成为性能瓶颈方案二:构建时预渲染方案在项目开发完成之后,将有限的需要SEO的页面挑选出来,借助p
2021-01-14 18:25:19 573
原创 vue:详解vue中的代理proxy
问题我们本地调试一般都是 npm run serve,然后打开 本机ip:8080(localhost:8080)对吧,这时候我们要调接口调试,后端的接口的地址可能在测试环境,也可能是自己电脑的 ip,总之不是你的 lcoalhost:8080,那么你调接口就会产生跨域,那么怎么办呢?就需要proxy出场了复习一下跨域的解决方案jsonpcorsNode中间件代理(两次跨域)nginx反向代理CORS支持所有类型的HTTP请求,是跨域HTTP请求的根本解决方案JSONP只支持GET请求,
2020-07-11 22:58:47 69405 40
原创 js:浅谈函数式编程
背景函数式编程是一种编程思想,其余的还有声明式与命令式函数式举例假设我们要把字符串 functional programming is great 变成每个单词首字母大写var string = 'functional programming is great';var result = string .split(' ') .map(v => v.slice(0, 1).toUpperCase() + v.slice(1)) .join(' ');整个过程就是 join(m
2020-05-09 15:18:02 513
原创 RN报错:Timeout of 120000 reached waiting for exclusive access to file: /Users/xx/.gradle/wrapper/
RN报错:Timeout of 120000 reached waiting for exclusive access to file: /Users/xx/.gradle/wrapper/
2024-04-11 16:30:10 189
原创 English: fragmentary knowledge
如果强调知识的逐步积累或分阶段获取,可以使用 “piecemeal”。零碎的知识,可以使用 “fragmentary” 或 “piecemeal”,这两个词都可以用来描述部分或不完整的事物。然而,它们在语境中可能会有一些微妙的差异。当我们使用 “what” 引导一个问句时,如果后面跟的是一个动作或行为,通常需要使用辅助动词,比如 “do” 或 “would”,以构建一个完整的疑问句。“Fragmentary” 指的是由碎片组成的,表示整体被分解为片段或碎片。在描述知识时,可以强调知识的不完整或部分性。
2024-03-11 18:00:21 204
原创 English:about ‘do’
do” 的不同形式用于构成不同时态和人称,这些形式包括 “do,” “does,” 和 “did”。总的来说,系动词用于连接主语和描述主语的状态,而助动词用于帮助构建句子的其他方面,如否定、疑问等。“do” 是一个多功能的英语动词,具有多种用法。以上是一些常见的 “do” 的用法,具体用法可能根据上下文而有所变化。这些变种有助于构建正确时态和人称,使句子更加准确和清晰。这些形式的使用取决于时态和人称。
2024-02-27 14:24:15 911
原创 English:First Person、Second Person and Third Person
English:First Person、Second Person and Third Person
2024-02-27 11:42:20 240
原创 English: go through customs
go through customs English,different scenarios
2023-12-28 14:55:42 1271
原创 java:Springboot集成redis
做一个入门的Springboot集成redis案例,当在 redis 查到键名 redis_name 有数据的话,就返回缓存的数据,如果没有数据,就从数据库里查询出 redis_name 对应的数据返回。上面 utils 中我们使用 RedisTemplate 存储字符串会包含一些二进制的内容,其实就是看起来难受,对存取没有影响,如果介意可以使用StringRedisTemplate。
2023-12-07 17:27:48 170
原创 docker:安装nginx并部署一个前端项目
但是据我所知,前端项目一般不会像这样打包成镜像,因为前端对 nginx 没有那么的依赖,比如,两个人同时开发一个项目,基本就是 node 版本的不同可能会导致环境不同,但是最终都是打包成 dist 静态文件部署到 nginx 上,所以没必要把 nginx 和项目捆绑在一起。所以,我遇到的前端项目基本就是服务器直接安装 nginx,并不使用 docker,当然用 docker 维护一个Nginx也是不错的选择。
2023-12-06 18:52:21 434
原创 java:slf4j、log4j、log4j2、logback日志框架的区别与示例
java:slf4j、log4j、log4j2、logback日志框架的区别与示例
2023-12-05 11:43:57 1810
原创 java:封装统一的响应体code、data、msg、paging
我们在写接口的时候一般不会直接返回给前端数据,而是会有响应体,比如 code、data、msg,这样就有一个统一的结构方便前端处理,那么今天就来封装一个统一的响应体。1、在 config 包里新建 ApiResponse.java。这是一个非常简单的封装,如果更复杂的可以在这个基础上增加。
2023-12-04 15:33:20 551
原创 java:spring-boot-starter-actuator的使用
java:spring-boot-starter-actuator的使用
2023-12-01 15:50:18 360
原创 java:springboot3集成swagger(springdoc-openapi-starter-webmvc-ui)
springboot3集成swagger报错Typejavax.servlet.http.HttpServletRequest not present,来使用springdoc-openapi-starter-webmvc-ui
2023-12-01 11:31:10 1784
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人