1.uni-app实现定位功能
2.利用好 git bisect 这把利器,附近附近帮助你快速定位疑难 bug
3.生产上的定位定位问题你不会用 sourcemap 定位吗?
4.Android webview html5å°çå®ä½
5.国内最大的源码交易平台
6.你不知道的Popperjs上篇
uni-app实现定位功能
uni-app实现定位功能的步骤如下:
首先,获取用户地理位置权限。源码源码使用uni-app内置的附近附近authorize方法,请求用户授权。定位定位在manifest.json文件中,源码源码tinycc源码分析点击"源码视图",附近附近在mp-weixin配置部分添加相关配置代码。定位定位
接下来,源码源码确保在app.json文件中也配置好权限请求。附近附近运行项目到微信开发者工具,定位定位再次配置相关代码。源码源码在authorize方法中,附近附近设置scope参数为userLocation,定位定位以请求获取位置信息。源码源码若用户拒绝授权,提示他们访问小程序设置页面。
在实际使用前,要检查是否已获取到定位权限。如果未授权,应适时提示用户并请求授权。
若需实现精准定位,可以借助腾讯地图。首先,注册腾讯地图开发者,获取key并下载qqmap-wx-jssdk.min.js。然后,在该文件末尾替换相关代码,并将SDK文件放入libs文件夹。创建腾讯地图对象后,智能优化系统源码调用逆地址解析方法获取位置信息。
对于常见问题,解决方案包括:
- 如果微信小程序定位出错,检查manifest.json的配置,确保已添加正确的权限代码,并在app.json中同步配置。然后,重新编译项目并启动,uni.getLocation方法应该能正常返回经纬度。此外,务必确认AppID已正确配置,可在manifest.json的"微信小程序配置"部分查看。
利用好 git bisect 这把利器,帮助你快速定位疑难 bug
利用好 git bisect 这把利器,帮助你快速定位疑难 bug
使用git bisect二分法定位问题的基本步骤:
1. git bisect start [最近的出错的commitid] [较远的正确的commitid]
2. 测试相应的功能
3. git bisect good 标记正确
4. 直到出现问题则 标记错误 git bisect bad
5. 提示的commitid就是导致问题的那次提交
问题描述
我们以 Vue DevUI组件库的一个bug举例子
5dcb这一次commit,执行yarn build报错,报错信息如下:
我可以确定的是上一次发版本( dce4)是可以build成功的。
git bisect 简介
git bisect命令使用二分搜索算法来查找提交历史中的哪一次提交引入了错误。它几乎能让你闭着眼睛快速定位任何源码导致的问题,非常实用。
你只需要告诉这个命令一个包含该bug的坏commit ID和一个引入该bug之前的好commit ID,这个命令会用二分法在这两个提交之间选择一个中间的commit ID,切换到那个commit ID的代码,然后询问你这是好的commit ID还是坏的commit ID,你告诉它是好还是坏,然后它会不断缩小范围,直到找到那次引入bug的凶手commit ID。
这样我们就只需要分析那一次提交的代码,就能快速定位和解决这个bug(具体定位的短线行情指标源码时间取决于该次提交的代码量和你的经验),所以我们提交代码时一定要养成小批量提交的习惯,每次只提交一个小的独立功能,这样出问题了,定位起来会非常快。
接下来我就以 Vue DevUI之前出现过的一个bug为例,详细介绍下如何使用git bisect这把利器。
定位过程
其中5dcb这次是最近出现的有bug的提交,dce4这个是上一次发版本没问题的提交。
执行完启动bisect之后,马上就切到中间的一次提交啦,以下是打印结果:
可以看到已经切到以下提交:
执行命令:
构建成功,所以标记下good:
标记万good,马上又通过二分法,切到了一次新的提交:
再次执行build命令:
build失败了,出现了我们最早遇到的报错:
标记下bad,再一次切到中间的提交:
以此类推,不断地验证、标记、验证、标记...最终会提示我们那一次提交导致了这次的bug,提交者、提交时间、提交message等信息。
最终定位到出问题的commit:
github.com/DevCloudFE/v...
整个定位过程几乎是机械的操作,不需要了解项目源码,不需要了解最近谁提交了什么内容,只需要无脑地:验证、标记、验证、全民核酸检测源码标记,最后git会告诉我们那一次提交出错。
这么香的工具,赶紧来试试吧!
问题分析
直到哪个commit出问题了,定位起来范围就小了很多。
如果平时提交代码又能很好地遵循小颗粒提交的话,bug呼之欲出。
这里必须表扬下我们DevUI的田主(Contributor)们,他们都养成了小颗粒提交的习惯,这次导致bug的提交c0c4cc1a,只提交了4个文件,涉及多行代码。
我们在其中搜索下document关键字,发现了两处,都在drawer-service.ts整个文件中:
一处是行的:
另一处是行的:
最终发现罪魁祸首就是行的代码!
破案!
此处@lnzhangsong我们的田主,有空麻烦修下这个bug。
生产上的问题你不会用 sourcemap 定位吗?
生产上的问题你不会用 sourcemap 定位吗?
sourcemap 是一个以.map 为后缀的文件,它以 json 形式存储了源代码打包转换后的位置信息。它的主要作用是实现运行时代码和开发时代码都能拥有相同准确的信息提示。常见的开发时代码提示如上图所示,而运行时代码提示如上图所示,运行时代码提示的信息不够详细准确。而 sourcemap 可以在不同的处理阶段中构建出运行时代码和开发时代码的映射关系,使得运行时代码也能够提供给我们详细而准确的信息,帮助我们在生产环境中快速定位到源代码中的位置。
要快速生成 sourcemap,linux内核源码代码前端构建工具有很多,这里列举两个常用的:vite 和 webpack。在 vite 中,只需要设置 build.sourcemap 的选项配置即可。在 webpack 中,则需要设置 devtool 的选项配置,值类型包括以下类型的组合。
要使得sourcemap 发挥作用,除了生成对应的映射规则外,还需要一个解析工具负责将源代码和 sourcemap 规则真正进行映射。通常,浏览器、异常监控系统(如:sentry)和手动映射都可以完成此任务。浏览器通常会默认启用sourcemap 映射功能。在 Sentry 监控系统中,接入、异常捕获和添加 sourcemap 的流程如下:
首先,在 Sentry 监控平台上注册/登录拥有自己的账号,然后可以构建一个对应的项目,项目创建好后会生成一个 dsn,在接入 Sentry 时需要传入。其次,在项目入口文件(main.js)中初始化接入 Sentry 即可。经过以上处理,Sentry 已经可以自动获取到错误信息,但没有接入 sourcemap 的错误信息在 Sentry 中也无法进行快速定位。因此,下一步就是需要给 Sentry 上传 sourcemap 相关的文件。
在 .map 文件中有 mappings 字段,它以 Base VLQ 编码形式存储了映射到源代码行、列等信息。使用 Base VLQ 编码可以减少文件体积,因为它是一种压缩数字内容的编码方式。每个分号中的第一串英文用来表示代码的第几行、第几列的绝对位置,后面的都是相对于之前的位置做加减法。
sourcemap 的生成、解析及应用在前端开发中是非常重要的,希望本文能帮助你更好地理解及应用 sourcemap。同时,编写文章的原则是首先保证自己有收获,其次,看看各位掘友对同一个问题都会有什么更好的方案。欢迎关注同名公众号《熊的猫》,文章会同步更新!
Android webview html5å°çå®ä½
ææ¥çäºä¸æºç 解å³äºï¼ä¸»è¦ä»£ç å¦ä¸ï¼//å¯ç¨æ°æ®åºwebSettings.setDatabaseEnabled(true);Stringdir=this.getApplicationContext().getDir("database",Context.MODE_PRIVATE).getPath();//å¯ç¨å°çå®ä½webSettings.setGeolocationEnabled(true);//设置å®ä½çæ°æ®åºè·¯å¾webSettings.setGeolocationDatabasePath(dir);//æéè¦çæ¹æ³ï¼ä¸å®è¦è®¾ç½®ï¼è¿å°±æ¯åºä¸æ¥ç主è¦åå webSettings.setDomStorageEnabledï¼trueï¼//é ç½®æéï¼åæ ·å¨WebChromeClientä¸å®ç°ï¼publicvoidonGeolocationPermissionsShowPrompt(Stringorigin,GeolocationPermissions.Callbackcallback){ callback.invoke(origin,true,false);super.onGeolocationPermissionsShowPrompt(origin,callback);}é ç½®æéï¼<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
国内最大的源码交易平台
国内最大的源码交易平台是CSDN软件开发网。
CSDN软件开发网,作为国内知名的IT技术交流平台,已经发展成为国内最大的源码交易平台。它提供了广泛的源码资源,涵盖了各个开发领域,如Web开发、移动应用、数据库管理、人工智能等。这个平台不仅为开发者提供了丰富的源码参考,还搭建了一个源码买卖的市场,让开发者之间可以方便地进行源码的买卖交易。
CSDN源码交易平台的优势在于其资源的丰富性和交易的便捷性。平台上汇聚了大量的优质源码,这些源码往往由经验丰富的开发者上传,质量有保证。同时,平台提供了详尽的源码分类和搜索功能,帮助用户快速定位到所需的源码资源。交易流程也设计得十分简洁明了,从浏览源码、下单购买到完成交易,用户都能获得流畅的体验。
除了基本的源码交易服务,CSDN还提供了一系列的附加服务,如源码定制开发、技术咨询等,这些服务进一步增强了用户粘性,也为平台吸引了更多的专业开发者。举例来说,如果一个企业需要一套特定的管理系统源码,他们不仅可以在CSDN上找到现成的源码进行购买,还可以联系平台上的专业开发者进行定制开发,这种一站式的服务大大提升了交易效率和用户满意度。
综上所述,CSDN软件开发网以其丰富的源码资源、便捷的交易流程和完善的附加服务,稳坐国内最大源码交易平台的宝座。无论是对于需要源码的个人开发者,还是寻求技术解决方案的企业,CSDN都是一个值得信赖的选择。
你不知道的Popperjs上篇
ElementUI中Tooltip、Select、Cascader、TimePicker等组件是如何实现提示框定位到目标元素的?答案是借助于Popperjs,本文将深入探讨Popperjs的用法和特性。
在ElementUI的源码中首次了解到Popperjs,但不清楚其具体版本。通过对比ElementUI代码与Popperjs 0.5.2版本,发现二者高度相似,因此可以判断ElementUI使用的是0.5.2版本的Popperjs。接下来,我们将从0.5.2版本开始,学习Popperjs的使用。
Popperjs的主要功能是将一个DOM元素定位到目标DOM元素附近,例如Tooltip、Popover、Popconfirm、Dropdown、Select等组件的提示框或弹窗位置。通过`getBoundingClientRect()`方法获取目标元素的位置,设置Popper元素的样式,使得其位于目标元素的右侧。
实现定位的基本思路是获取目标元素的位置,将Popper元素设置为固定定位,并根据目标元素的`right`和`top`值调整自己的位置。考虑到兼容性问题,对于IE9及以下浏览器,需要对`getBoundingClientRect()`方法进行兼容性处理。
除了基本功能实现,Popperjs还提供了丰富的扩展使用场景,如在不同方位定位Popper元素。通过配置属性`placement`,可以指定Popper元素的定位方位,如`top-start`、`top-end`、`bottom-start`等。
为了实现不同方位的定位,Popperjs内部定义了`baseOffsets`数组,用于存储不同方位的默认位置。在计算最终位置时,根据`placement`值和`start`、`end`属性进行定位。此外,还需要考虑`margin`值对元素大小的影响,通过`getOuterSizes()`函数计算Popper元素的实际大小。
实现定位的代码中还包含了对`Window.getComputedStyle()`方法的使用,以获取元素的样式属性值。`_getOffsets`函数用于获取参考元素和Popper元素的位置和尺寸,计算最终的定位信息。在定位过程中,`_getOffsets`函数中使用了`shift`函数调整位置,确保`right`和`bottom`值的正确计算。
为了提升定位性能,可以利用CSS3硬件加速。通过`transform`属性实现元素的平移,避免页面重排和重绘。同时,需要对计算值进行四舍五入处理,以避免字体模糊。考虑到浏览器兼容性问题,需要添加获取当前浏览器支持的前缀属性。
最后,将定位功能封装在`applyStyle`函数中,提供了一套完整的定位解决方案。此外,Popperjs还支持滚动容器、保持DOM上下文、兼容性、可配置性、避免裁剪和溢出、快速翻转等特性。
本文仅介绍了Popperjs的扩展使用场景和CSS3硬件加速的基本概念。下篇将深入探讨保留DOM上下文、处理滚动条、裁剪和溢出、快速翻转等场景,以及如何进行自定义扩展。敬请期待。