Hello,又到了每天一次的下午茶时间。酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见!
本文字数 2200+,阅读时间大约需要 8 分钟。
- 【本期掘金酱的下午茶】亮点:
- JavaScript基础与高级应用: 函数式编程
- Electron 启动白屏解决方案
- 一探究竟:深挖网关性能异常背后的秘密
- 分享一次 ShardingJDBC 亿级数据分表真实经验!干货满满
- ......
今日主理人
本期每日掘金由 MiyueFE 负责制作。如有投稿文章,请私信👉 MiyueFE 。
PS:主理人目前正在招募中,有感兴趣的掘友们可以联系 Captain。
每日干货
主理人们会对近期(1-3 天)社区深度技术好文进行挖掘和筛选,优质的技术文章有机会出现在下方列表,排名不分先后。
前端
函数式编程是一种以函数为核心的编程范式,强调通过纯函数和无副作用来实现程序逻辑。它的发展经历了命令式编程和面向对象编程,最终形成了自身的特点。函数式编程强调函数是一等公民、声明式编程、柯里化、纯函数、惰性函数以及函数组合。通过函数的组合,可以实现复杂的逻辑,提高代码的可读性、可维护性和扩展性。
Electron 是一种用于构建桌面应用程序的框架,但在使用过程中,开发者可能会遇到窗口加载过程中长时间白屏的问题。这篇文章探讨了该问题的原因和解决方案。原因分析表明,该问题可能是由主进程加载时间过长或 Web 部分性能优化不足导致的。可能的解决方案包括对 Web 端的性能优化和控制 Electron 主进程加载时机。对 Web 端的性能优化可以采用常规的前端优化手段,例如代码拆分、静态资源压缩合并、CDN 加速、骨架屏技术、减少主线程工作量和避免频繁布局重排。控制 Electron 主进程加载时机可以通过监听 BrowserWindow 上的 ready-to-show 事件或 BrowserWindow.webContents 上的 did-finish-load 或 dom-ready 事件来控制窗口显示。这可以确保在合适的时机创建窗口并在页面加载完成后显示窗口,避免出现白屏。最终,通过这些措施,可以显著减少 HTML 和资源加载渲染的时间,缩短白屏现象。
📗Next.js App Router + Socket.IO 实现简易聊天室
Next.js 是一个流行的 React 框架,但它的官方文档中没有直接提到 WebSocket 的支持。然而,Next.js 可以与 WebSocket 库,如 Socket.IO,结合使用来实现实时功能,如消息推送、实时日志和聊天室。这篇文章以实时聊天功能为例,介绍了在 Next.js 中使用 Socket.IO 的方法。首先,需要创建一个 Next.js 项目并安装 Socket.IO 和其他必要的依赖项。接下来,在项目根目录创建一个 server.mjs 文件,用于设置 Socket.IO 服务器并处理 WebSocket 事件。最后,在客户端中使用 Socket.IO 客户端库与服务器进行通信。文中还提到了一些与 WebSocket 相关的概念,如 Cron 表达式和 Socket.IO 事件的处理。此外,提供了一个简单的聊天室示例,说明了如何在 Next.js 应用中实现实时功能。
📗手把手教你如何实现开源项目的打包构建、版本发布以及贡献指南(终结篇)
本文介绍了如何从零开始掌握开源项目的打包构建、版本发布及贡献指南的制定技巧。在介绍打包构建时,首先介绍了打包工具的选择,包括 Vue CLI、Vite、Webpack 和 Rollup。由于 Vite 在开源社区中独领风骚,因此主要以 Vite 为例介绍了核心库 packages/vue 的打包功能。在介绍版本发布时,逐步介绍了如何生成 changeset、build 构建、发布和关联 git 远程 Tag 的步骤。最后,介绍了如何一键生成组件 cli,以避免团队中工程师在开发一个新组件阶段的不规范所可能产生的问题。
后端
📗pip freeze > requirements.txt 命令输出文件中出现文件路径而非版本号
问题现象:使用 pip freeze requirements.txt 命令输出文件中出现文件路径而非版本号。解决办法:使用 pip list --format=freeze requirements.txt 命令。输出结果:shellappdirs==1.4.4black==21.6b0certifi==2021.5.30click==8.0.1colorama==0.4.4dnspython==2.1.0email-validator==1.1.3Flask==1.1.2Flask-Login==0.5.0flask-mongoengine==1.0.0Flask-WTF==0.15.1idna==3.2importlib-metadata==3.10.0itsdangerous==2.0.1Jinja2==3.0.1MarkupSafe==2.0.1mongoengine==0.23.1mypy-extensions==0.4.3pathspec==0.8.1pip==21.1.3pymongo==3.12.0regex==2021.7.6setuptools==52.0.0.post20210125toml==0.10.2typed-ast==1.4.3typing-extensions==3.10.0.0Werkzeug==1.0.1wheel==0.36.2wincertstore==0.2WTForms==2.3.3zipp==3.5.0对于 Conda 环境,可以使用 conda list -e requirements.txt 命令输出文件中包含版本号的 requirements.txt 文件,或者使用 conda env export --no-builds environment.yml 命令输出包含版本号的 environment.yml 文件。
Kong 深知网关产品的性能与稳定性对客户业务至关重要,因此采用先进的内部基准测试框架和完善的基础设施,确保其产品在这两方面达到最高标准。为了实现自动化和高效的测试流程,它们将测试集群无缝集成到了持续集成/持续部署(CI/CD)流程中。对每个主要版本、次要版本和补丁版本都进行了详细的性能测试,以确保客户在升级到新版本时获得优异的性能体验。它们使用高性能的裸金属集群进行严格的基准测试,并使用 Rust 重新设计了 Router 组件,使其更加灵活且高效地利用计算和内存资源。在重构缓存算法后,Router 可以更高效地生成缓存信息,提高缓存命中率并提高 RPS。
本文介绍了稳定婚配算法(Gale-Shapley算法)的一个应用案例,它用于志愿和招生匹配录取操作程序。稳定婚配算法是一种用于解决两方面的稳定匹配问题的算法。在这个案例中,它应用在招生工作中,考生和志愿院校是两方面。具体来说,有一个请求集合(考生)和一个接受集合(招生院校),每个请求集合中的元素都有自己的意向优先表(志愿列表),每个接收方也都有自己的意向优先表(有序的考生列表)。稳定婚配算法的基本过程是:每个未匹配的请求者向接受方提出匹配请求,如果接受方未匹配,则接受匹配请求,完成匹配;如果接受方已经匹配,则接受方评估当前请求者是否在意向优先列表中更优先,如果是则接受匹配,否则维持当前匹配。通过这个算法,可以确保实现一个稳定的匹配。文中还提供了一个示例代码,展示了如何利用这个算法来解决一个具体的问题。
📗分享一次 ShardingJDBC 亿级数据分表真实经验!干货满满
该文章主要介绍了如何对大规模数据进行分表,以提高数据查询效率和减少数据库压力。首先介绍了分表的基本信息,包括使用新实例、独立数据源、分表策略等。接着讨论了历史数据同步的问题,即如何将存量数据以分表策略优先写入新表。同时,还提到了现有后台查询改造和外部部门通知的问题。最后,提出了DBA操作过程中新产生业务数据同步方案和数据三写同步的问题。该文章提供了一个详细的分表方案,同时也提到了一些需要注意的问题和细节。
Tomcat 是基于 JUC 的线程池进行了扩展,使其更适合处理 IO 密集型任务。扩展点包括:1. 提前创建核心线程,以便在高并发请求到来时能及时处理。2. 任务数量过多时创建非核心线程,即使队列未满。3. 拒绝后再次尝试放入队列,以提升吞吐量。这些扩展使 Tomcat 线程池更适合处理高并发 IO 密集型任务,避免了 JUC 线程池在这方面的缺陷。
📖 投稿专区|下午茶
大家可以在评论区推荐认为不错的文章,并附上链接和推荐理由,有机会登上下一期。文章创建日期必须在近 1-3 天内;可以推荐自己的文章、也可以推荐他人的文章。