首页 文章 精选 留言 我的

精选列表

搜索[非自回归核心技术],共10000篇文章
优秀的个人博客,低调大师

淘系自研前端研发工具 AppWorks 正式发布

经过了一年的迭代, 近 2 个月集中开发,AppWorks正式发布。 AppWorks地址:https://appworks.site/ AppWorks 是社区受到开发者广泛关注的 VS Code 套件,在 VS Code 插件市场有 2w+ 的下载量,是 VS Code 插件市场受开发者喜爱的百佳套件之一,多次登陆 VS Code 插件市场周/月趋势榜。在淘宝内部,AppWorks 日均创建项目 50+ 次,日均区块被使用 50+ 次,DAU 400+。 AppWorks 正式版本定位前端研发工具集,目标是让前端应用的开发更快更好更轻松 什么是工具集?工具集是指 AppWorks 包含了一系列面向前端研发各场景的工具(桌面客户端、编辑器插件、命令行工具等)。 为什么是更快更好更轻松?快、好和轻松是指前端研发过程中需要解决的三个核心问题:研发效率(要更快)、代码质量(要更好)、研发门槛(要更轻松)。 这篇文章将主要介绍 AppWorks 有哪些能力,以及如何使用这些能力解决这些问题的。 让开发门槛再低一点 好的工具应该是人人都用得起的。AppWorks 首要解决的问题是让人人都可以快速地开始前端研发。面对这个问题,AppWorks 提供的解法是 GUI 工具 + 海量可复用物料。 ▐开发工具箱 要开始前端应用程序的开发,首先需要安装必要开发工具和配置相应的开发环境: 必要的开发工具包括:Visual Studio Code、Google Chrome、Charles等等; 配置的开发环境包括:Node.js、npm、git等等。 VisualStudioCode地址:https://code.visualstudio.com/ Google Chrome地址:https://www.google.cn/chrome/ Charles地址:https://www.charlesproxy.com/ Node.js地址:https://nodejs.org/en/ npm地址:https://www.npmjs.com/ git地址:https://git-scm.com/ 为此 AppWorks 提供前端开发工具箱 ——AppWorks Toolkit来帮助开发者简单快速搭建前端开发环境。 AppWorks Toolkit地址:https://github.com/appwork4s-lab/toolkit Toolkit 是一个桌面客户端,开发者可以快速安装和使用。其核心能力有: 一键安装前端开发工具,这些工具包括但不限于:桌面客户端、编辑器插件、浏览器插件、命令行工具等等; 可视化管理前端开发工具,覆盖工具查找、安装、升级、卸载完整的软件生命周期管理; 可视化配置前端开发环境,这些配置包括但不限于:Node 配置、npm 配置、Git 配置等等。 更详细的说明可以参见:《前端环境》 阅读地址:https://appworks.site/pack/basic/toolkit.html ▐海量可复用物料 前端开发的第二步需要有海量可复用的物料。物料只有海量和可复用,才能正在地服务于前端应用的开发,其要求是: 海量:面向不同的终端有对应的跨端跨框架的物料; 可复用:需有较高的领域抽象度和可维护的代码质量。 为此 AppWorks 提供物料解决方案 ——AppWorks Material来满足这些要求: AppWorks 物料方案的特点有: 丰富且高质量的物料:从业务中抽象并经过多轮 Review,支持了 Fusion Design、Ant Design、Rax 等不同 UI 组件的物料; 可定制物料的能力:提供脚手架工具供不同团队快速定制业务领域的模板、区块和组件形成物料库; 低成本的文档站点:打通 Fusion 物料中心的托管,可以快速形成物料的站点和文档。 让好的开发体验促进效率的提升 好的工具应该能够提供好的开发体验并促进效率的提升。为此 AppWorks 提供了基于 VS Code 的前端研发套件 ——AppWorks Pack从以下几个方面来提高源码开发领域的体验和效率。 AppWorks Pack地址:https://marketplace.visualstudio.com/items?itemName=iceworks-team.iceworks ▐极简的开发流程 Pack 将创建、调试和发布项目等操作通过插件的方式集成到了 VS Code 中,在编辑器内即可完成常见的工程操作以及与线上平台的对接。这些能力的集成使得开发者不需要频繁地在多个客户端、平台间进行切换和学习: ▐友好的可视化开发 Pack 提供了基于物料的可视化开发方式,基于AppWorks Material提供的海量物料,通过区块组装生成页面,一键添加物料到代码,物料的文档、示例都可以在编辑器中直接触达: 更详细的说明可以参见:《使用物料》 阅读地址:https://appworks.site/pack/basic/materials.html ▐强大的编码辅助 Pack 提供的编码辅助能力包括:代码提示(自动补全、信息提示和定义跳转)、代码重构和代码片段等功能,这些功能是覆盖多种编程语言(JavaScript、CSS)和多种 DSL(React、Rax)和多套研发框架(rax-app、ice.js)的。 以 Pack 提供代码重构功能为例,可以快速删除组件文件及组件文件所有的引用,同时删除掉由于组件属性所带来的不需要的变量: 更详细的说明可以参见:《代码补全》、《代码重构》 阅读地址: 《代码补全》:https://appworks.site/pack/basic/intelli-code.html 《代码重构》:https://appworks.site/pack/basic/refactor-code.html 让好的代码获得持续的关注 好的代码质量是软件工程的立身之本,好的开发工具应该能够为软件工程的代码质量提供保障。 为此 AppWorks 提供了代码质量解决方案 ——AppWorks Doctor来解决该问题。Doctor 提供了代码规范和项目质量评估模型,并结合编辑器来进行自动修复规范问题和产出项目质量评估报告;线上则提供数据大盘来全面了解团队和项目的质量情况,帮助开发者和管理者对代码质量保持持续的关注。 ▐代码规范 Doctor 通过@appworks/spec包来声明和约束代码规范。该规范遵循阿里巴巴前端编码规范,并结合了我们在ICE和Rax项目的最佳实践,包含 ESLint、stylelint、commitlint 及 Prettier 的相关规则,开发者可以很方便地与自己的前端项目进行结合。 地址: @appworks/spec:https://www.npmjs.com/package/@appworks/spec ICE:https://ice.work/ Rax:https://rax.js.org/ ▐质量分析 Doctor 建立了项目质量评估模型,该模型包含以下几个维度的分析: 代码规范:通过 @appworks/spec扫描代码,并提供一键修复功能(Doctor 提供了默认的配置,但用户项目的 @appworks/spec 配置优先级将更高)。 代码可维护度:通过typhonjs-escomplex扫描代码。复杂度评分低说明代码的判断逻辑复杂,可能质量低且难于阅读、测试和维护。 代码重复度:通过jscpd扫描代码。重复的代码一旦出错,意味着加倍的工作量和持续的不可控。将提示进行代码抽象和重构来减少冗余代码。 地址: typhonjs-escomplex:https://www.npmjs.com/package/typhonjs-escomplex jscpd:https://www.npmjs.com/package/jscpd 开发者可以在 VS Code 中对自己的本地项目进行质量检测,并自动修复规范问题,查看维护度和重复度方面的分析及优化建议: 亦或者针对依赖的基础库和框架进行自动化的升级,Doctor 也提供了人为监督和偶尔干预的方式: ▐线上治理 代码规范和质量分析让开发者可以在本地主动地去优化项目的质量。但对于团队来说,依然需要有被动的方式来促进项目的质量治理。例如了解重点项目的质量趋势情况,团队成员的质量情况,推进落地最佳实践或某些依赖包的升级等等。 在阿里内部,Doctor 通过对接 DEF 工程平台,在项目的发布部署环节收集项目的质量信息,并给开发者发送此次迭代的质量报告,由此来提升团队成员的质量意识。同时发布环节的质量检测是可控的,当遇到一些特殊情况时,例如我们发现了某个有重大缺陷或安全问题的代码或依赖包,可以中断此次发布流程: 通过对项目发布时质量情况的采集,Doctor 能够知道团队内项目和成员的质量概况和趋势,在AppWorks Data Platform上进行数据的展示和分析: 地址: AppWorks Data Platform:https://appworks.alibaba-inc.com/ 这里面目前开发经常使用的场景是在线上网站展示项目的质量信息,开发者可以通过跳转到 WebIDE 唤起 Doctor 插件完成一键修复和优化代码: 让提升代码编率可度量 广义的研发效率是指软件从需求到上线的完整过程中的投入和产出比。编程效率是指单位时间内有效的代码产出,编程效率是研发效率的重要组成部分。 AppWorks 目标通过定义编程效率的评估标准,产出团队的编程效率报告,分析影响编程效率的因素,制定提升编程效率的方案,对方案进行实施,观测效率数据变化,调整提效方案,最终达到提升个人和团队编程效率的目的。 现阶段,AppWorks 主要完成了编程数据的采集及统计。 ▐数据采集 AppWorks 通过 Time Master 插件来将自动追踪开发者在编辑器中的编码行为,Time Master 采集的数据包括开发者的编辑器使用时长及其在编辑器上针对代码文件的所有操作,例如打开文件、关闭文件、在代码文件上进行键入等; 最终可以做到统计开发者在每个文件、每个项目的详细编辑行为,例如: 停留时长 编辑时长 添加、删除的代码行数 添加、删除的字符数 键盘输入数 等等 在阿里内网环境,Time Master 将会把这些数据上报到 AppWorks Data Platform。 ▐数据分析 基于上报的数据,AppWorks Data Platform 可以提供个人、项目和团队编程数据的统计和分析: 项目大盘:提供具体项目的成员开发投入情况的数据统计及分析; 个人大盘:提供个人质效数据统计及分析,并与团队的整体情况进行对比; 团队大盘:提供团队整体的项目质效数据统计及分析,团队成员的质效概况。 未来展望 ▐编码辅助增强 从过往一年的用户使用数据来看,编码辅助功能依然是开发者使用最频繁的功能,对该功能准确率的提升会促进曝光率和转换率的提升: 转换率:使用量/曝光量 曝光率:曝光量/活跃用户数 从日常的用户访谈来看,开发者对基础库和框架的代码提示和代码重构有迫切的期待,诸如快速提取代码、快速变量命名、Inline Style to CSS 等操作,能为开发者提供愉悦的编码体验。未来 AppWorks 将持续增强编码辅助能力,并结合 Time Master 对相关功能的实际编码效率提升进行量化。 ▐项目质量治理 AppWorks 在上一个年度完成了 Data Platform 的雏形,打通了质量数据的上报、存储和统计链路。 但有数据只是提供了参考价值,基于数据做出行动,持续完善数据模型,使得指标数据提升,才能完成体现数据中心的价值。 未来 AppWorks 将通过线上网站和编辑器端信息的触达,让开发者和管理者了解基础库和框架的最新动态,配套升级工具,推动团队基础设施的升级。例如通过线上线下的联动,推进 React 15 升级到 17,Rax 核心库从 0.6 升级到 1.0 等等。 ▐工具箱能力完善 AppWorks Toolkit 的第一个版本中已完成快速安装必备工具和管理 Node 版本功能。未来将持续完善对前端工具和开发环境的管理和配置能力,成为前端开发的第一入口,帮助初学者快速开始前端开发,引导开发者用好工具,排查和修复开发环境问题。例如: 全局 npm 的管理 Git/SSH 配置 浏览器/编辑器插件管理 ▐编程数据价值挖掘 AppWorks 在上一个年度完成了编程数据的上报、存储和统计链路。未来 AppWorks 将主要通过 API 或离线数据分享的方式,让业务平台和工程平台利用编程数据进行研发效能的度量或分析,使得数据价值更大化。 写在文末 AppWorks 将持续重视用户体验,做开发者喜欢的、好用的工具。任何建议或意见,可以提交 issue 给我们:https://github.com/appworks-lab/site/issues 相关资料 AppWorks 官网:https://appworks.site AppWorks Toolkit: https://github.com/appworks-lab/toolkit AppWorks Pack: https://marketplace.visualstudio.com/items?itemName=iceworks-team.iceworks AppWorks Material: https://appworks.site/materialCenter/fusion

优秀的个人博客,低调大师

ElasticSearch 8.X:放弃复杂,回归简单的搜索引擎新时代

> 当搜索速度提升5倍,代码量减少一半,我们终于有时间去思考真正的业务价值 --- ## 一、那个被"复杂"支配的恐惧年代 如果你在2020年前后用过ElasticSearch,你一定经历过这样的场景: 凌晨两点,线上报警:ES集群CPU飙升到90%。你爬起来打开Kibana,看到一堆`fielddata`警告。于是你开始调`indices.fielddata.cache.size`,调`circuit_breaker`,调`refresh_interval`……折腾两小时后,问题没解决,你反而把`replicas`调成了0。 第二天,被同事戏称为"ES调参侠"。 **那时的ElasticSearch,强是真的强,但疼也是真的疼。** 倒排索引、分词器、Mapping、DSL查询语法、聚合桶……你得像半个搜索引擎专家才能用明白。更别提版本升级时那些Breaking Changes,简直比换女朋友还难伺候。 而ElasticSearch 8.X的出现,像是有人在你耳边说了句:**"别折腾了,我帮你搞定。"** --- ## 二、25行代码,把搜索当"傻子"用 先看一个最直观的变化:**你不用再写那一长串嵌套的JSON DSL了。** 8.X引入了新的ES|QL(Elasticsearch Query Language),用一种接近SQL的语法,把搜索、聚合、过滤一气呵成。 下面是用Java客户端连接ES 8.X,执行一次"商品搜索+价格聚合"的核心代码: ``` // 1. 构建客户端(比7.X简洁太多了) ElasticsearchClient client = new ElasticsearchClient( new RestClientTransport( RestClient.builder(new HttpHost("localhost", 9200)), new JacksonJsonpMapper() ) ); // 2. 执行ES|QL查询(像写SQL一样写搜索) String query = """ FROM products | WHERE name LIKE "%手机%" | WHERE price q.query(query))); response.records().forEach(row -> { System.out.println("品牌: " + row.get(0) + ", 均价: " + row.get(1) + ", 数量: " + row.get(2)); }); ``` **这段代码如果放在7.X时代**,你需要先写一个`BoolQueryBuilder`嵌套两层`must`,然后再套一个`TermsAggregation`,再在里面嵌套`AvgAggregation`……光构造Query对象就得20行,还容易漏掉`.size(0)`这种"反人类"的设置。 **8.X用25行干了以前50行的活**,而且可读性直接从"天书"降级为"Excel筛选器"水平。 --- ## 三、速度不是"挤"出来的,是"换"出来的 8.X最让我震惊的优化,不是多写了多少代码,而是**删掉了大量历史包袱**。 ### 1. 向量检索成为"一等公民" 现在做语义搜索,不需要再单独搭一套向量数据库。8.X把`dense_vector`字段和KNN搜索直接内置了: ``` # Python客户端示例:用向量找相似商品 from elasticsearch import Elasticsearch es = Elasticsearch("http://localhost:9200") # 索引时:存向量 es.index(index="products", document={ "name": "AI智能音箱", "embedding": [0.12, -0.34, 0.56, ...] # 384维向量 }) # 搜索时:用knn查询 response = es.search(index="products", knn={ "field": "embedding", "query_vector": [0.11, -0.32, 0.55, ...], "k": 5, "num_candidates": 100 }) ``` 就这么简单。以前你要单独部署Faiss或Milvus,现在**直接在一个ES集群里搞定全文检索+向量检索的混合召回**,性能还提升了4-5倍(官方压测数据)。 ### 2. 存储格式升级:Lucene 9.0 8.X底层换上了Lucene 9.0,引入了新的`MMAP`索引方式。简单说就是:**磁盘读得快了,内存用得少了。** 我自己实测,同样200G的数据,7.17需要28G堆内存,8.2只需要18G。省下来的内存就是钱。 --- ## 四、但真正让我感动的,是"容错" 如果你是个"手残党"(比如我),8.X还有两个救命功能: ### 1. 自动熔断器,再也不用调`fielddata`了 以前你对着一个`text`字段做`terms aggregation`,ES直接就给你爆`Fielddata is disabled`。你得手动开,开了又怕内存爆。8.X默认开启`fielddata`的**自动限制**:单个字段的fielddata内存超过堆内存5%就**自动熔断**,并抛出清晰异常。代码不用改,配置不用管。 ### 2. 索引"可插拔"分析器 以前改个分词器要`close`索引 -> `update`设置 -> `open`索引,中间得停服务。8.X支持**运行时字段(runtime fields)**,你可以在查询时动态加一个"虚拟字段"做分词: ``` // 索引不用动,查询时动态定义一个"中文分词"的临时字段 { "runtime_mappings": { "chinese_content": { "type": "text", "script": "emit(doc['content'].value)" } }, "query": { "match": { "chinese_content": "智能音箱" } } } ``` 这种"后悔药"机制,对于经常被产品经理改需求的研发来说,简直是救星。 --- ## 五、从"调参侠"到"搜索架构师" 经历了8.X这半年的实战,我最大的感悟不是代码写得少了,而是**我终于能把时间花在真正重要的事情上**了。 以前我花40%的时间调性能参数,30%的时间排查奇怪的OOM,20%的时间写复杂的DSL,只有10%的时间在想: - 我们的业务需要什么样的相关性? - 怎么结合用户点击日志优化排序? - 要不要上语义搜索?数据怎么标注? 现在8.X把这些脏活累活全包了,我的时间分配变成了: - 10%配置集群 - 30%设计索引结构 - **60%思考搜索体验本身** 这才是ElasticSearch应该有的样子:**它依然强大,但不再咄咄逼人。它变成了一个沉默而可靠的伙伴,把复杂留给自己,把简单留给开发者。** --- ## 六、给还在观望的你 如果你是ES 6.X或7.X的老用户,我知道你在担心什么:"迁移成本高不高?语法变化大不大?" 我的答案是:**8.X的Java API虽然变了(多了很多Lambda风格),但Rest API的兼容性做得非常好。** 你可以从最基础的`match`查询开始用,先把集群升级到8.X(官方提供滚动升级方案),然后**用混搭模式**——老查询照跑,新功能逐步用。 最后送你一段我常写的"健康检查代码",8.X里它短到了极致: ``` # 一行命令看集群健康(以前要写几十行Java) curl -X GET "localhost:9200/_cluster/health?pretty" ``` 返回的`status`字段如果是`green`,你可以放心睡觉了——因为8.X的集群稳定性和容错能力,已经让"凌晨两点爬起来救火"成了过去式。 > "好的搜索引擎,应该像自来水一样:打开就有,清澈透明,你从不会想起它,但它一直在那里。" 而ElasticSearch 8.X,终于做到了。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册