首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原 微信小程序踩坑录(canvas、pos

坑一:canvas适配 刚开始做这方面的时候,一直以为获取不到机型以及手机宽高,所以硬生生把canvas宽高设成了固定320px,想想偌大平板上就320那么大有多丑,产品估计也想把活活掐死...坑三:canvas画笔粗细 当时做了画画功能,微信开发者工具上都是好好,但一到真机上,每次一选择画笔粗细时候,就画不出来东西了,当时也是郁闷好久,后来也不知道怎么找到原因,但最后解决了。...坑七:刷新页面 刷新页面的坑其实挺多罗列一下: 1、以前总有双击tabBar就能刷新页面,现在没法控制tabBar,这个也就没办法实现了; 2、只有下拉刷新样式(三个点转呀转那个),但没有上拉加载样式...想让页面返回时候就刷新,那就要用到onShow这个生命周期函数了,onShow是每次打开页面都会调用一次,然后再和setData()结合就完美了。...今天就写这么多吧,一直踩坑中,上面也还有很多没解决问题以及可能不对地方,希望大家多多给我提意见哈。

1.5K80

原 微信小程序踩坑录(canvas、pos

坑一:canvas适配 刚开始做这方面的时候,一直以为获取不到机型以及手机宽高,所以硬生生把canvas宽高设成了固定320px,想想偌大平板上就320那么大有多丑,产品估计也想把活活掐死...坑三:canvas画笔粗细 当时做了画画功能,微信开发者工具上都是好好,但一到真机上,每次一选择画笔粗细时候,就画不出来东西了,当时也是郁闷好久,后来也不知道怎么找到原因,但最后解决了。...坑七:刷新页面 刷新页面的坑其实挺多罗列一下: 1、以前总有双击tabBar就能刷新页面,现在没法控制tabBar,这个也就没办法实现了; 2、只有下拉刷新样式(三个点转呀转那个),但没有上拉加载样式...想让页面返回时候就刷新,那就要用到onShow这个生命周期函数了,onShow是每次打开页面都会调用一次,然后再和setData()结合就完美了。...今天就写这么多吧,一直踩坑中,上面也还有很多没解决问题以及可能不对地方,希望大家多多给我提意见哈。

70660
您找到你想要的搜索结果了吗?
是的
没有找到

微信小程序实战开发四:小程序获取用户信息流程及信息存储方式解析

人家APP.JS里面有介绍,由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回,所以页面加载成功时候有可能这个值还没返回过来,然后就有了 elseif...当APP.JS加载完成之后,再点击其它页面的时候,这个APP.JS里面的东西不会重新加载,因为它代码是写在 onLaunch: function () 时面的。这个代表页面加载时运行。...经过测试发现 APP.JS只加载时候运行一次,而且当运行完成之后再点击其它页面之时 app.globalData.userInfo 已经有值了,其它页面调用时候就可以走这一层,直接去拿用户信息。...但这样的话每次想要使用用户信息数据之时需要写JS去获取,感觉很麻烦。 所以我选择了 APP.JS中获取完用户信息后把用户信息用全局存储方式存起来。 ?...总结: APP.JS里面获取用户数据,只加载时运行一次,加载完成之后再点任何页面都不会重新加载

1.2K20

css加载会造成阻塞吗

可能大家知道,js执行会阻塞DOM树解析和渲染,那么css加载会阻塞DOM树解析和渲染吗?接下来,就来对css加载对DOM树解析和渲染影响做一个测试。...代码,应该要在css加载完成后才会运行 实际结果: 由上图我们可以看出,位于css加载语句那个js代码先执行了,但是位于css加载语句后面的代码迟迟没有执行,直到css加载完成后,它才执行。...这也就说明了,css加载会阻塞后面的js语句执行。...而onLoad没什么好说,就是等待页面的所有资源加载完成才会触发,这些资源包括css、js、图片视频等。 而DOMContentLoaded,顾名思义,就是当页面的内容解析完成后,则触发该事件。...当页面里同时存在css和js,并且jscss后面的时候,DomContentLoaded必须等到css和js加载完毕才触发。 我们先对第一种情况做测试: <!

4.1K60

css加载会造成阻塞吗

可能大家知道,js执行会阻塞DOM树解析和渲染,那么css加载会阻塞DOM树解析和渲染吗?接下来,就来对css加载对DOM树解析和渲染影响做一个测试。...由上图我们可以看出,位于css加载语句那个js代码先执行了,但是位于css加载语句后面的代码迟迟没有执行,直到css加载完成后,它才执行。这也就说明了,css加载会阻塞后面的js语句执行。...其中一个解决防范是文件名字后面加一个版本号) 减少http请求数,将多个css文件合并,或者是干脆直接写成内联样式(内联样式一个缺点就是不能缓存) 原理解析 那么为什么会出现上面的现象呢?...而onLoad没什么好说,就是等待页面的所有资源加载完成才会触发,这些资源包括css、js、图片视频等。 而DOMContentLoaded,顾名思义,就是当页面的内容解析完成后,则触发该事件。...当页面里同时存在css和js,并且jscss后面的时候,DomContentLoaded必须等到css和js加载完毕才触发。 我们先对第一种情况做测试: <!

1.5K20

埋点统计优化,首屏加载速度提升

埋点统计我们业务里经常有遇到,或者很普遍,我们自己网站也会加入第三方统计,我们会看到动态加载方式去加载jsdk,也就是你常常看到insertBefore操作,我们很少考虑到为什么这么做,直接同步加载不行吗...同步引入方式,当然会,业务代码还没加载,首屏就加载一大段统计jsdk,移动端页面打开要求比较高苛刻条件下,首屏优化,你可以埋点统计上做些优化,那么页面加载会有一个很大提升,本文是一篇笔者关于埋点优化笔记...中,我们执行完同步任务后,就会执行app.js,当1s后,才真正执行了这个插入脚本,而且统计脚本你会发现此时是先执行了app.js再加载tj.js 当执行setTimeout时,我们会发现先执行了内部脚本...我们再继续上一个问题,为什么不同步加载把代码改造一下,去除了一些无关紧要代码 <!...很大,那么是会阻塞影响页面首屏打开速度,所以之前采用异步,定时器方式,首屏加载会有显著提升。

88420

Next.js静态页面渲染技术(静态生成和服务端渲染):BSRSSRSSG

中通过标签href链接定位路由可实现预加载路由页面,可使点击跳转无需发送请求。...同构代码:一份代码两端运行,一处使用console.log调试,可在服务端和客户端页面显示出log,这样更方便调试。...适合前后端交互不多页面,如CMS(文章管理系统)生成静态页面、SSR(服务端渲染)是每次请求生产新HTML(传统BS框架PHP、Python、Ruby、Java后台基本功能)Sever Site...SEO不友好:因为搜索引擎访问页面, 默认不会执行 JS,只能看到 HTML,而不会等待 AJAX 异步请求数据,所以搜索不到页面内容文章列表页面里,其实每个用户查到内容都是一样为什么还需要在每个人浏览器上渲染一遍呢...为什么不在后端渲染好,然后发给每个人这样就可以N 次渲染变成了 1 次渲染N 次客户端渲染变成了 1 次静态页面生成这个过程成为 动态内容静态化静态页面生成(SSG)前提:如果每个人请求一个相同资源

3.4K20

前端面试必备技巧

三次握手四次挥手,https 为什么安全为什么慢,跟 http 区别,http2.0 都有哪些优化,浏览器输入url到看到页面的整个流程… 安全类常见攻击手段,记好 CSRF 和 XSS 攻击原理和防范措施就好了...解决了前两种缺陷。 但是,实例化 Child3 时候,父类 Parent3 构造函数被执行了两遍,这是没必要为什么行了两遍父类构造函数?...理解哪些语句会放入异步任务队列 理解语句放入异步任务队列时机 11.1 为什么 JavaScript 是单线程 JavaScript语言一大特点就是单线程,也就是说,同一个时间只能做一件事。...from disk cache:同上类似,此资源是从磁盘当中取出,也是已经之前某个时间加载过该资源,不会请求服务器但是此资源不会随着该页面的关闭而释放掉,因为是存在硬盘当中,下次打开仍会from...十三、错误监控 13.1 前端错误分类 前端错误分为两大类: 即时运行错误(代码错误) 资源加载错误 13.2 错误捕获方式 即时运行错误捕获方式 try...catch window.onerror

92541

重磅!哈啰 Quark Design 正式开源,下一代跨技术栈前端组件库

前端Q 是winty,专注分享前端知识和各类前端资源,乐于分享各种有趣事,关注,一起做个有趣的人~ 大家好,是winty!新一周,基于 Web Components 组件库来了。...比如首次加载时,你页面中有一个复杂交互组件,交互组件中又包含 N 多逻辑和按钮等小组件,此时页面的首次加载不应该优先去执行这些细节逻辑,而首要任务应当是优先渲染出整体框架或核心要素,而后再次去完善那些不必要第一时间完成细节功能...当我们使用 Web Components 来优化 React 时候,这个执行过程将会变得简洁多,比如我们注册了一个复杂逻辑组件, React 执行时只是执行了一个 createElement 语句...我们也可以简单理解为,部分逻辑之后进行执行然后被 render 到指定 id Div 中,那么为什么传统组件为什么不能这么做呢?而非得 Web Components 呢?...我们知道页面 DOM 节点数越多,运行时性能将会越差,这是因为 DOM 节点相互作用会时常在触发重绘(Repaint)和重排(reflow)时会关联计算大量 Frame 关系。

56420

JS模块化规范总结(面试必备良药)

文章说明 本文为之前总结笔记,因为内容面试中问得比较多,因而搬运过来,作为面试系列文章之一。...模块化解决问题: 命名冲突 文件依赖 commonJS 1、模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。.../a.js'); console.log(moduleA.a); // 打印出:hello world }); AMD与CMD区别 最明显区别就是模块定义时对依赖处理不同 AMD推崇依赖前置...同样都是异步加载模块,AMD加载模块完成后就会执行改模块,所有模块加载执行完后会进入require回调函数,执行主逻辑,这样效果就是依赖模块执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来...(编译时加载) 2、import和export命令只能在模块顶层,不能在代码块之中(如:if语句中),import()语句可以代码块中实现异步动态按需动态加载 适用场景:浏览器或服务器环境(以后可能支持

1.7K20

重磅!哈啰 Quark Design 正式开源,下一代跨技术栈前端组件库

大家好,是若川。持续组织了近一年源码共读活动,感兴趣可以 点此扫码加我微信 ruochuan12 参与,每周大家一起学习200行左右源码,共同进步。...比如首次加载时,你页面中有一个复杂交互组件,交互组件中又包含 N多逻辑和按钮等小组件,此时页面的首次加载不应该优先去执行这些细节逻辑,而首要任务应当是优先渲染出整体框架或核心要素,而后再次去完善那些不必要第一时间完成细节功能...当我们使用 Web Components 来优化 React时候,这个执行过程将会变得简洁多,比如我们注册了一个复杂逻辑组件, React 执行时只是执行了一个 createElement 语句...我们也可以简单理解为,部分逻辑之后进行执行然后被 render 到指定 id Div 中,那么为什么传统组件为什么不能这么做呢?而非得 Web Components 呢?...我们知道页面 DOM 节点数越多,运行时性能将会越差,这是因为 DOM 节点相互作用会时常在触发重绘(Repaint)和重排(reflow)时会关联计算大量 Frame 关系。

25620

「前端进阶」从多线程角度来看 Event Loop

对很多初学JS的人来说,根本搞不清楚单线程JS为什么拥有 异步能力,所以,试图从 进程、 线程角度来解释这个问题。 CPU ? 算机核心是 CPU,它承担了所有的计算任务。...对于这种 子进程扩展方式,我们可以称这个应用程序是 多进程。 而对于浏览器来说,浏览器就是多进程Chrome浏览器中打开了多个tab,然后打开windows控制管理器: ?...为什么 GUI 渲染线程为什么与 JS 引擎线程互斥 这是由于 JS 是可以操作 DOM ,如果同时修改元素属性并同时渲染界面(即 JS线程和 UI线程同时运行), 那么渲染线程前后获得元素就可能不一致了...但在进行渲染前执行了微任务, 微任务中将背景变成了黑色,然后才执行渲染 第二个例子: setTimeout(() => { console.log(1) Promise.resolve...(3).then(data => console.log(data)) }, 0) setTimeout(() => { console.log(2) }, 0) // print : 1

64810

「硬核JS」一次搞懂JS运行机制

,内容也会牢记于心) 顺道给大家看看(太难了,深夜码字,反复修改,说这么多就是想请你点个赞在看) 参考了很多资料(帖子),取其精华,去其糟糠,都在文末,可自行了解 是时候搞一波大js了 从零到一百再到一...,CPU在运行一个进程时,其他进程处于非运行状态,CPU使用 时间片轮转调度算法 来实现同时运行多个进程 什么是线程 线程是CPU调度最小单位 线程是建立进程基础上一次程序运行单位,通俗点解释线程就是程序中一个执行流...JS执行时间过长,造成页面的渲染不连贯,导致页面渲染加载阻塞(就是加载慢) 例如浏览器渲染时候遇到标签,就会停止GUI渲染,然后js引擎线程开始工作,执行里面的js代码,等js执行完毕...,再变成黑色背景,页面上写是200毫秒,大家可以把它当成0毫秒,因为0毫秒的话由于浏览器渲染太快,录屏不好捕捉,又没啥录屏慢放工具,大家可以自行测试,结果也是一样,最安全方法是写一个index.html...,没有经过蓝色阶段,是因为,我们宏任务中将背景设置为蓝色,但在进行渲染前执行了微任务, 微任务中将背景变成了粉色,然后才执行渲染 微任务宏任务注意点 浏览器会先执行一个宏任务,紧接着执行当前执行栈产生微任务

1.9K10

setTimeout和requestAnimationFrame

浏览器内核中线程之间关系 GUI渲染线程和JS引擎线程互斥 js是可以操作DOM,如果在修改这些元素同时渲染页面(js线程和ui线程同时运行),那么渲染线程前后获得元素数据可能就不一致了。...JS阻塞页面加载 js如果执行时间过长就会阻塞页面 浏览器是多进程优点 默认新开 一个 tab 页面 新建 一个进程,所以单个 tab 页面崩溃不会影响到整个浏览器。...现在我们回到最开始一个例子 setTimeout(() => { console.log(1); }, 0) console.log(2); 输出 2, 1; setTimeout第二个参数表示执行代码前等待毫秒数...setInterval:以指定周期调用函数,而setInterval则是每次精确隔一段时间推入一个事件(但是,事件执行时间不一定就不准确,还有可能是这个事件还没执行完毕,下一个事件就来了)....('被调用了'); setTimeout(fn, 100); },100); 这个模式链式调用了setTimeout(),每次函数执行时候都会创建一个新定时器。

1.7K20

利用交叉观察者这个小宝贝儿,轻松实现懒加载、吸顶、触底

(理解这句就行了,管他交不交叉呢),好像在开车,但是你们没有证据 ... ?...为什么要举例以上两种情况呢,因为entries是返回当前已监听并且发生了交叉目标集合,第一种情况,大家一起发生交叉,固每次返回集合长度都为三;第二种情况则是每个目标轮流发生交叉,且当前只触发了一个...,所以每次返回集合长度只有一✅ 3....设置rootMargin偏移值为"0px 0px -100px 0px"(底部向内收缩): ? 该方法还有一个好处,那就是当页面上某个节点存在横向滚动条时候,一样应对自如: ?...; let top = item.boundingClientRect.top; // 当参照元素top值小于0,也就是视窗顶部时候,开始吸顶,否则移除吸顶 if (top <

62020

《JavaScript 模式》读书笔记(4)— 函数3

我们来看这段代码,自以为是的又加了一层,于是,希望不用说,你也已经懂了。   最后,再说一下,为什么赋值给一个其它名字变量以及用对象方法来使用时候,重定义永远没有发生。...个人理解,因为你每次执行时候,赋值动作是有的,但是并没有把覆盖,所以,每次都是重定义,每次无法执行新内部逻辑。...所以,最开始那个例子里,当你第一次调用scareMe()时候,就走了Double Boo!语句。因为前面prank()或者spooky.boo()每一次执行,重新定义了scareMe()。...比如:当页面加载时,代码必须初始化执行一些设置任务,比如附加事件处理程序、创建对象等诸如此类任务。所有这些工作仅需要执行一次,因此没有理由去创建一个可复用命名函数。...(o.getMsg()) console.log(o.message)   这个例子中,message是一个字符串属性,而不是一个函数,但是它需要一个脚本加载时执行函数来帮助定义该o.message

37620

《JavaScript 模式》读书笔记(4)— 函数3

我们来看这段代码,自以为是的又加了一层,于是,希望不用说,你也已经懂了。   最后,再说一下,为什么赋值给一个其它名字变量以及用对象方法来使用时候,重定义永远没有发生。...个人理解,因为你每次执行时候,赋值动作是有的,但是并没有把覆盖,所以,每次都是重定义,每次无法执行新内部逻辑。...所以,最开始那个例子里,当你第一次调用scareMe()时候,就走了Double Boo!语句。因为前面prank()或者spooky.boo()每一次执行,重新定义了scareMe()。...比如:当页面加载时,代码必须初始化执行一些设置任务,比如附加事件处理程序、创建对象等诸如此类任务。所有这些工作仅需要执行一次,因此没有理由去创建一个可复用命名函数。...(o.getMsg()) console.log(o.message)   这个例子中,message是一个字符串属性,而不是一个函数,但是它需要一个脚本加载时执行函数来帮助定义该o.message

40840

利用交叉观察者这个小宝贝儿,轻松实现懒加载、吸顶、触底

(理解这句就行了,管他交不交叉呢),好像在开车,但是你们没有证据 ... ?...为什么要举例以上两种情况呢,因为entries是返回当前已监听并且发生了交叉目标集合,第一种情况,大家一起发生交叉,固每次返回集合长度都为三;第二种情况则是每个目标轮流发生交叉,且当前只触发了一个...,所以每次返回集合长度只有一✅ 3....设置rootMargin偏移值为"0px 0px -100px 0px"(底部向内收缩): ? 该方法还有一个好处,那就是当页面上某个节点存在横向滚动条时候,一样应对自如: ?...; let top = item.boundingClientRect.top; // 当参照元素top值小于0,也就是视窗顶部时候,开始吸顶,否则移除吸顶 if (top <

1.4K40

能把队友气死8种屎山代码(React版)

前几天在前端技术群里聊起Code Review事,大伙儿似乎憋了一肚子气: 觉得这份难言之隐应该要让更多人看到,就跟Henry约了个稿: 于是Henry赶在周末,一边带娃,一边给我抹眼泪整理...useEffect(() => { console.log('no deps=====') // code... }); 这样的话,每次页面有重渲染,该useEffect都会执行,带来严重性能问题...例如我们项目中,这个useEffect内部执行是第一点中内容,即每次都会绑定一个scroll事件回调,而且页面中有实时轮询接口每隔5s刷新一次列表,用户页面稍加停留,就会有卡顿问题出现。...乍一看代码逻辑很清晰,但再想深一层,兜底值具体含义是什么?为什么要用这两个值来兜底?写这行代码同学可能很快可以解答,但是一段时间之后,写代码的人和提需求的人找不到了呢?..."当前没有可用房间" : "数据加载中"} 真的很难理解,明明只是一个简单提示语句判断,却需要拿出分析性能精力去理解,多少有点得不偿失了。

25730

读懂CommonJS模块加载

叨叨一会CommonJS Common这个英文单词意思,相信大家认识,记得有一个词组common knowledge是常识意思,那么CommonJS是不是也是类似于常识性,大家理解意思呢?...首先肯定是解析路径,系统给我们解析出一个绝对路径,我们写相对对路径是给我们看,绝对路径是给系统看,毕竟绝对路径辣么长,看着很费力,尤其是当我们项目N个文件夹之下时候。...我们知道JS中,函数调用时栈stack方式,也就是先近后出,也就是说require这个函数触发之后,图中运行时从下到上运行。也就是蓝色框最先运行。把他部分代码扒出来,研究研究。...模块,而且这个标签默认是异步加载,也就是页面全部加载完成之后再执行,没有这个标签的话代码不然无法运行哦。...大家可以看这个例子,写了一个改变object值小测试,大家会发现utils.js中count初始值应该是0,但是运行了addCount所以count值动态变化了,因此count值变成了2。

1.3K30
领券