- 博客(78)
- 收藏
- 关注
原创 微信小程序填坑篇 2
微信小程序开发的时候,很多接口都不太能信任,需要作一些额外的兜底处理。保证程序在什么情况下都能尽可能健康的运行。 也要有一套健全的异常收集反馈机制,方便迅速发现问题解决问题。 小程序生态的异常监控体系,主要包含小程序后台的代码运行报错,小程序告警群的使用,具体用户的信息收集上报,代码逻辑中可能的预警上报统计,微信新版本的内测跟进等方面。1.css支持。在ios12上 css3的支持不够好。有时候动画animation的forward无效。现象是动画结束后突然回到初始状态。极少数ios机型会出现a
2020-09-13 10:16:54
1700
原创 分帧加载 异步任务分解
最近在用cocos动画引擎写应用,为了优化性能封装了一个分帧加载的处理,简单讲就是拿到数据之后不一次性把数据展示出来,而是每一帧展示几个节点出来,每一帧作的操作少,应用体验更流畅。1秒大概是60帧,每帧大概是16ms,一帧中做的事情太多,执行时间太久,就会导致卡顿掉帧。 由于js是单线程,单个操作耗时不宜太久,要及时把线程让出来,对庞大的任务就需要作任务分解,异步执行。cocos项目或是传统前端项目,都可以利用异步的思想来分解任务,优化性能。封装一个任务队列,每次不直接执行任务,而是把任务往任务队列里
2020-08-22 15:34:38
937
原创 微信小程序填坑 视频篇
写了一年小程序,每天接受数万付费用户的考验,踩过小程序的坑数不胜数。先写一下视频篇,写一些会影响到用户正常看视频功能和影响业务主体流程的坑。1.一些低端设备无法播放高清视频 1080p需要接入转码,提供2种分辨率的视频。如果检测到播放高清视频报错,自动切入低清视频。也有可能高清视频播放不出来,也检测不到报错,所以还需要一个按钮来手动切换标清视频。问题现象是在有些设备直接播不出来,在有些设备上是有声音但黑屏无图像,可能会报一些类似MEDIA_ERR_DECODE(-4003,-1)这样的报错。2.同层渲
2020-05-16 11:27:20
2615
原创 英语字母笔画绘制功能解析
很多少儿英语启蒙学习的程序都有26个英文字母大小写笔画绘制的功能。小朋友可以跟着提示,一第一笔的将一个字母写出来。这里解析一下该功能实现流程。有一些初步的预想后,参考了竞品,流利说少儿英语,lingokids等。对流利说少儿英语的分析流利说的字母笔画教学,每一笔看起来都很自然,就像是人手写的一样,仔细看会发现,每一次写同一个字母写出来的字都是一模一样的,其实它是有一些预设的轨迹,当用户的触点...
2020-04-25 11:29:06
860
原创 学习类产品100+资源加载体验优化
我们在做很多学习或者游戏类的小程序的时候,经常会有一个场景,在正式进入学习之前,把所有需要的音频图片等资源下载好,这样在学习过程中,会有一种近乎离线学习的体验。这是学习产品中很重要的一个环节。这里总结一下,如何实现一个相对完善的资源加载环节。我们假定会有100个左右的图片音频下载。1.下载并发限制如果我们一次性发100个下载请求,小程序毫无疑问会崩掉。按照官方文档小程序一次性下载的最大数量为...
2020-04-18 11:20:49
248
原创 aeneas 实现音频强制对齐
做英语学习类产品经常会遇到读句子的时候针对单个单词的类卡拉ok的高亮效果。 这里记录一下音频进度和单词的一一对应关系(类似于歌词文件,粒度为单词级别)如何生成。纯人工来校对的话人工成本还是比较大的。 专业的词语是强制对齐(Forced Alignment)。这里介绍python库aeneas,可针对每句或每个单词的时间节点的json文件,还可以批量操作。准确率还不错。文档:https://gi...
2019-04-30 18:00:03
4738
4
原创 前后端分离项目中使用富文本编辑器UEditor
UEditor官网地址 http://fex.baidu.com/ueditor/最近使用富文本编辑器Braft Editor、wangEditor多少都有一些问题。于是使用了比较老牌的富文本编辑器UEditor。虽然也有一些问题,但是好在踩过坑的人多,一般的问题都可以解决。这里总结一下。1. UEditor实现onChange事件。UEditor自身提供了contentChange事...
2019-01-31 10:40:16
4354
原创 ant-design-pro 使用总结—自定义打包 构建配置
ant-design-pro使用了umi.js,没有直接使用webpack,我们要配置自定义的构建打包跟直接的webpack配置不太一样。首先,大部分的webpack打包配置都可以直接修改config/config.js来实现,比如 proxy,publicPath等。参考umi.js配置文档。https://umijs.org/zh/config/#基本配置。这里记录一些针对性的配置。ha...
2018-11-04 16:55:02
32338
17
原创 微信 jssdk 本地调试方案
微信 jssdk 本地调试方案微信公众号开发接口配置需要一个外网能访问的域名。localhost不在这个域名下,wx.config会失败。如果每次修改都发布到测试环境,又太影响开发效率。总结一下除了直接上测试环境之外的两种本地jssdk调试方案。1.使用内网穿透工具让外网能通过某个域名访问到我们本机的localhost。从而实现在本机上修改看效果。参考 https://...
2018-08-24 22:52:58
9431
原创 常见的web攻击方式及预防
1.sql注入。在用户的输入被直接动态拼装sql语句时,可能用户的恶意输入被拼到了sql语句上,而造成了一些恶意操作。比如查询到一些数据甚至删除一些数据。一般应对方法是对sql语句进行预处理。 thinkPHP防sql注入:https://www.kancloud.cn/manual/thinkphp/1844#2.XSS Cross Site Scripting。跨站脚本攻击。...
2018-06-30 11:44:26
2877
原创 使用chrome浏览器插件抢小米8
起因最近准备换手机,作为路痴喜欢小米8的双频gps功能,就决定抢一部。结果抢是抢不到的,从黄牛那里买也是不可能的。那就发挥一下程序员的优势,写个浏览器插件来抢吧。浏览器插件,通常用于在别人的网站上运行我们自己的代码,做一些固定的操作,写浏览器插件,先要明确2点: 1.我们的目的是什么。要达成什么。 2.网站的操作流程是什么。分析与准备我们要快人一步。从选择我们想要的型号,配置,...
2018-06-20 23:00:43
14105
39
原创 leetcode算法练习 JavaScript实现
leetcode表格内容由spider.js从leetcode-cn.com爬取。已做题目答案也从leetcode-cn.com中爬取并生成文件。解题进度:已解决 134/629 - 简单 92 中等 36 困难&am
2018-06-05 20:53:11
8476
3
原创 前端基本功之从大型项目中迅速定位修改位置
前端开发,有一项很重要的基本功,就是在大型项目中,比如几万行js代码中,迅速找到新增功能或调试bug的切入点。特别是你只是接手这个项目,并不了解其中每一个功能点所在的位置,也没有时间一行行读代码的情况,这个基本功显得尤其重要。 这项能力除了娴熟的调试工具使用技巧,更重要的还是对变化的观察力和总结归纳的能力。本文用一个讲一个功能案例的实现。功能背景一款大型canvas应用。我们使用了一些...
2018-05-26 16:32:48
2361
原创 大型canvas 2d应用的事件处理
总结几点大型canvas 2d应用的事件处理机制事件代理canvas画布是一个独立的dom。我们不能给我们绘制的元素单独添加事件。所有的事件都添加在canvas画布上,然后再来分发具体的操作。有点类似于我们的dom事件代理,将事件绑在父层节点,再根据点的dom来决定事件操作。前两年用canvas写小游戏的时候,就是在canvas的dom上绑定事件,然后根据鼠标的位置和所在位置的状态来处...
2018-05-17 18:01:45
742
原创 二叉树遍历(前序,后序,中序,层次)递归与迭代实现JavaScript
最近做leetcode题目。总结一下二叉树遍历的一般方法。数据结构function Node(val){ this.left = this.right = null; this.val = val;}先定义一棵树。node1是根节点。var node4 = {left: null, right: null, val: 4 }; var node5...
2018-05-14 16:03:42
3119
1
原创 探究点击事件在JavaScript事件循环中的表现
本文探究一下点击事件在event loop的情况。点击事件是同步还是异步?点击事件何时加入事件队列?点击事件加入事件队列的是什么,是回调函数吗?
2018-02-04 19:23:52
2041
原创 JavaScript面向对象编程
创建对象//1.字面量var obj1 = {}//2.构造函数function A(){}var obj2 = new A();//{}//3.Object.create()var obj3 = Object.create(obj1)构造函数与实例//构造函数。与普通函数的区别只是调用方式。所以一般约定首字母大写。function A(){ this
2018-01-19 20:03:48
318
原创 一个异步编程的场景分析
一个常见场景,点击保存,获取表单数据,发送请求。一种防重复点击的策略:点击按钮,出现遮罩,提交请求。。。能不能保证只提交一次请求呢?未点保存时页面处理很卡没有响应的情况呢?点了保存后的操作导致页面无响应时继续点保存呢?在表单超复杂,用户的系统配置低的情况下,获取表单数据可能会花很长一段时间,甚至让浏览器停止响应,这时保存操作导致浏览器停止响应而我们又再次点击了保存按
2018-01-19 19:55:42
392
原创 jQuery Placeholder Plugin源码分析
placehoder jQuery插件逻辑。jQuery $valHook $propHook的使用。
2017-11-08 11:20:54
384
原创 在项目中自定义路径放入element-ui并修改编译源码
在项目中自定义路径引入element-ui并自定义修改element-ui源码后编译使用
2017-10-14 23:53:34
9467
1
原创 模拟multiple select,实现不按ctrl单击选中以及拖动选择
模拟multiple select,实现不按ctrl单击选中以及拖动选择
2017-10-09 19:42:09
2310
原创 一个不打开浏览器工具的调试方法
1.IE下的console的bug。2.使用window.onerror在不打开控制台的情况下弹出错误信息解决一些不方便打开控制台的bug。
2017-08-01 20:06:54
1079
原创 JavaScript中正则表达式常见使用函数
最近越来越感觉到正则表达式的强大,可以简化很多代码。并且正则表达式入门并不是很难。简单列一下JavaScript中使用正则表达式的一些方法。//定义几个会用到的变量var href = 'baidu.com?where=b5s&a=b';var regObj = /(\w+)=(\w+)/;//全局搜索var regObj1 = /(\w+)=(\w+)/g;正则对象上的方法1.regObj
2017-06-12 20:16:09
1102
原创 一个简单的chrome拓展程序开发
开发一个简单的chrome插件。实现content script与插件的通信。点击插件图标运行插件,可以让页面上所有的a标签添加一个target="_blank",让页面在新标签页打开。
2016-11-17 22:57:59
9077
原创 Bootstrap的DatePicker日期范围选择
Bootstrap DatePicker实现日期选择 开始日期不大于结束时间,结束时间不小于开始时间,开始日期和结束日期都不大于当前日期。
2016-09-20 00:10:44
23364
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人