首页
学习
活动
专区
圈层
工具
发布

高级工程师的晋升之路:如何用 JavaScript 打造十亿级的应用

这个JavaScript框架不是开源的。不开源的原因是,它跟React差不多是同时出来的,我当时有种“既生瑜何生亮”的感觉。...但除了没有开源之外,我感觉从这个框架中学到了很多东西,有必要在这里跟大家分享一下。 超大规模应用,以及这些应用的共同点 我们来讨论下超大规模应用,以及这些应用的共同点。当然,肯定有很多人一起开发。...但如果你用的是RollupJS——这个库也很棒,他们最近也开始支持代码分割了。代码分割肯定是要做,但在引入代码分割时一定要谨慎,因为它会影响到编程模型。 有了代码分割,以前的同步的东西就变成了异步的。...实际上,这种模式非常适合自动生成的代码,它能解决一些生成代码的固有问题。生成代码的时候,有时你得导入一些看不到的文件,有时得猜测它们的名字。...测试不仅是要测试数学函数是否正确。测试也可以用于应用程序的基础设施和主要设计上。 ? (避免在应用程序之外依赖人的判断) 在应用程序之外,尽量避免依赖于人的判断。

1.1K20

松散耦合的分布式系统会让云账单飙升吗

为了展示这种平台的强大功能,我把用自动化代码(以及相应的资源)替换应用程序代码的无服务器重构过程记录了下来。...相比使用 DynamoDB Streams,通过应用程序代码发送事件可以让你更好地控制数据格式,因为 Streams 仅限于数据库中持久化的字段。...情况可能并非如此,具体可以参考我最近写的关于无服务器锁定的文章。 新的解决方案似乎更加优雅,或者我可以说它们就是“云原生”的吗?...了解成本细节是件好事,但要确保考虑到了总体成本,包括调试和解决数据不一致的问题、将代码升级到新的运行时或更新库、增加新的开发人员、更长的构建和测试周期等等所花费的时间。...在下图中,我悄悄定义了“应用程序”和“集成”之间的边界: 这看起来似乎就是自然的职责分离——你几乎可以说表示服务的图标就是按照颜色进行分组的。

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

    构建下一代 HTTP API - 架构

    书接上文:构建下一代 HTTP API - 总览 在构思 Quenya 的时候,我已经有之前 UAPI 和 Goldorin 在生产环境下的应用经验。...后端工程师根据修改后的 spec 生成新的 API 代码,开始后端的开发和 UT。...我先不一一解释图中的要素,请你自己花个 5-10 分钟思考一下为什么各个项目间是这样一种关系。...尽管我们在框架上做了很多公共环节的处理,让开发者只需要撰写 API 接口的 schema 的定义和实现 route action(相当于 handler),但在 UAPI 过去几年的使用过程中我还是看到...大家如果要做类似的项目,还需要妥善处理的一件很重要的事情是:让生成的代码和用户撰写的代码很好地工作。我提供的思路仅是其中一种方案,抛砖引玉而已。

    1K20

    ClaudeDev:全新代码Agent可以在 VS Code 中生成应用程序!(一键创建、修改、运行项目)

    所以大多数时候,当我介绍其他工具时,我总是会将它们与AER进行比较,今天我将再次这样做。 今天这个新的工具,它可以像AER一样生成应用程序并做很多事情,这次的工具是Claude Dev。...好了,使用方法和运行命令已经生成了,它在请求运行命令的权限,我们也批准它。 好了,现在贪吃蛇游戏运行了。这部分非常酷,因为我见过的大多数工具都不会实际运行代码,但这个做到了,非常酷。...好了,现在正在生成更改,你可以在这里查看代码差异,批准它。好了,完成了。 它再次生成了使用说明和运行命令,现在它正在运行,让我们看看这次是否正常。...好了,完成了,这里是运行命令,让我们运行它。 ‍现在添加了重新开始按钮,好了,这真的非常酷。 ‍我是说,它基本上就是AER,但在VS Code里面,并且非常互动,你可以看到代码差异等。...我希望它能支持Ollama或其他提供商,但这不是一个大的问题。有一点不足的是,它没有使用Git来提交或暂存更改,这意味着如果你想要还原它做出的更改,你要么得逐个文件地撤销,要么就只能手动还原。

    1.8K00

    构建Vue项目-身份验证

    通常,在开始使用新框架或新语言工作时,我会尝试查找尽可能多的最佳实践,而我更喜欢从一个易于理解,维护和升级的良好结构开始。...我采用的方法是所有页面都是私有的,除了我们直接标记为公共的页面之外。将可见性默认设置为私有,并通过显式地公开要公开的路由。 在下面的代码中,我们会使用Vue Router中的meta参数。...这正是我们使用api.service.js所要实现的目标—封装Axios库,以便在不可避免地出现新业务逻辑时,我们可以只对该单一服务进行升级,而不必重构整个应用程序。...在某些情况下,最好是在发生401错误时简单地注销用户,但是让我们看看如何在不中断用户体验的情况下刷新访问令牌。这是上面提到的代码示例中的401拦截器。...有一些解决方案可以在401发生时将请求排入队列并在队列中处理它们,但是至少对于我来说,上面的代码提供了一种更为优雅的解决方案。

    8.6K20

    自动删除旧代码?Uber 开源利器「食人鱼」

    关键词:Uber 代码整理 开源工具 整理代码是一件艺术,对于一些过时的陈旧代码,如何优雅又快速地删除,是一件让无数人伤神的事情,但在最近, Uber 给出了一种解决的方案。...使用这个方式拥有诸多优点,它可以将新功能测试完善之后,再将其发布为全面可用,还能够针对不同用户定制差异化服务(A/B 测试),当出现 Bug 时支持回滚,工程师还可以远程禁用应用程序的故障部分。...考虑到 Piranha 的应用背景,Uber 采用了应用静态分析,即通过代码审查,来查找因过时标志遗留下来的废旧代码。 ? 其中可清理的三个关键维度分别是: 删除紧邻功能标志 API 的代码。...通过重构技术解析输入源代码的 AST(抽象语法树),以检测使用功能标志 API 的存在。 如果标记注释与输入处理行为匹配,只需删除测试的注释,如果不匹配,则要丢弃整个测试以处理标记注释测试。 ?...目前使用 Piranha 自动生成 diff 的时间不超过 3 分钟。 通过这一系列的操作,即可轻松实现对代码的审阅和处理,将过时的代码一网打尽。 ?

    89310

    大模型驱动的软件工程实践标准化

    随着大语言模型在软件开发中的应用越来越广泛,传统的软件工程实践开始被重新关注和提及。在诸如于编写清晰的文档、进行代码审查和单元测试等领域,我们可以看到 LLM(大语言模型) 能带来极多在提升。...团队根据需求和设计创建可工作的软件,并在每个迭代结束时进行演示和回顾。 持续测试和集成:在迭代和开发过程中,团队需要持续测试软件,并进行持续集成。...这有助于确保软件的质量和稳定性,并减少缺陷和技术债务。 交付和部署:在每个迭代结束时,团队交付可工作的软件,并进行部署。这样,利益相关者可以尽早地了解软件的功能和特性,并提供反馈。...思考一下,我们在实现一个 API 的功能时,分别需要: 设计 API 时,需要遵循 API 规范设计的规范。 编写测试时,需要按照最佳的测试实践规范。 实现 API 代码时,需要遵循代码规范的规范。...它只拿到了单个的需求,表现得就是一个新人一样。它还需要更多的设计、规范相关的信息。 设计架构之下:规范 DSL 化 作为一个 AI + 软件工程的实践者,我并不相信文档能帮助 LLM 解决这个问题。

    1.2K20

    从2016年11月期《技术雷达》看前端的未来

    Vue.js,如果你在使用Vue.js,那么你更应该找到相当的自信了,现在它已经被列入了评估期了。Vue.js是一个简单易上手的框架,并且相当的轻量,在最近的这段时间里,它发挥得相当的出色。...可惜,宝宝现在在用Angular.js 和 Angular 2,毕竟我现在是开发混合应用的。不过相信在半年后,Angular 2 和 Ionic 2是会上榜的。...起初这是一个传统的Spring + JSP网站,然后我们用JSP创建了JSON API,后来创建了一个新的 API 来服务移动应用和单页面应用,再后来这个 API 被拆分成了几个 API。...API设计及使用—>简单 如我们所见的Spring Boot已经变成推荐采用的程度了,按雷达上的习惯用语:“我们已经在多个项目上使用这个框架”——反正我最近的项目都是用这个框架。...除此,还有接口不好用的问题——“要是你可以在这里使用超媒体 API,那么我的代码就会更加简单了”。 因此在 API 设计上,雷达上给出了两个不错的案例: >>>>强化后台查询 ?

    990100

    从单体式应用到微服务的低风险演变(上)

    关注我的Twitter(@christianposta)或 http://blog.christianposta.com,可以获取最近的更新和讨论。...在上图中,我们对Bar 服务做了同样的处理,把它搬到了一个架构里,在这里,服务拥有自己的数据和开放的API,这听起来已经很像是微服务了。...同样的: 很少能简洁漂亮地将单体式应用模块化 表格间的关系可以高度规范化,而且在各实体之间表现出紧密的耦合或完整性约束 我们不可能完全清楚单体式应用中的某些代码到底调用了哪些表格 虽然我们已将表抽取到了一个新的服务中...在即将发布的整个主题的第二部分中,我们将深入探讨技术框架或平台。 在这张图中,单体式应用将所有模块/组件/UI共同部署到了一个单体数据库中。当我们试图变更时,就会牵一发而动全身。...注意事项 单体式应用(代码和数据库模式)很难变更 变更需要整个重新部署和团队间高度的协调 我们需要进行大量测试来做回归分析 我们需要一个全自动的部署方式 四、抽取UI ?

    55620

    MicroAgent:这个AI智能体一键写代码并且自动测试!它比 Aider 更好吗?(Ollama)

    Aitrainee | 公众号:AI进修生 MicroAgent 是一种 AI 编码代理或文本到应用程序工具,可以生成代码并实时测试生成的代码。不过,它的方法存在一些问题,我将在本文中讨论这些问题。...一般来说,我们目前看到的文本到应用程序软件可以相当不错地生成应用程序,尽管它们大多数有一个问题,那就是生成的代码并不总是可靠的。 这里的可靠性是指代码是否能在首次运行时正确工作。...这会递归进行,直到所有测试用例通过。 他们说,MicroAgent的理念是创建一个明确的测试用例,可以清楚地反馈代码是否按预期工作,并对代码进行迭代,直到所有测试用例通过。...但在此之前,我们需要先设置API密钥和模型。 我会先向你展示如何使用OpenAI,然后再展示如何使用AMA。只需运行这个config set openAI key命令,并输入你的API密钥。...你可以导航到任何之前的项目,或者创建一个新目录并在其中使用它。 我将会在一个新目录中使用它。进入目录后,只需运行micro agent命令。

    74000

    Android Google Maps

    然后我们进入API和服务,然后你就会发现你需要设置账号信息和付款验证信息,这一步还挺麻烦的,主要是那个卡的信息,在前面我已经提过了。   ...在你通过账号信息验证之后就可以创建API秘钥了,创建的API之后需要对应使用应用的包名和SHA1证书指纹,一个API秘钥可以增加多个App进行配置,只有配置之后的App才能通过此API秘钥访问Google...二、项目配置   一般情况这里是要进入项目的创建和配置了,而因为Google这边比较特殊,你可能需要先上架一个应用上去,我这边的正式版的,你可以试试测试版行不行,有应用之后我们就可以通过选择应用,使配置的...我之前在使用的时候就遇到过一个指纹不对的情况,结果发现你的应用有两个指纹,你可以理解为测试版和正式版,如果你遇到这个情况,那么你换一下试试看。...这里我只使用一个。 运行看看效果: 好的,这样就完成了,通过这个获取到的数据还不是最准确的,通过Google API接口去获取比较准备,感兴趣的可以去看看。

    2.4K10

    Testcontainers助您轻松测试

    来自 Alex Williams 的更多内容 测试变得更加容易。如今,测试的重点在于频繁快速地进行。不断迭代以达到所期望的状态。并以DevOps应做的方式来实施——帮助开发者让工作流程持续运行。...如 AtomicJar 的开发者倡导者 Oleg Selajev 最近在一篇报告中所说,开发者可以插入代码来创建“几乎任何能放入容器中的”实例。...“尽管我们在过去十年左右的时间里一直在 DevOps 的旅程中,但是当你与那些组织的平台团队交谈时,你经常会听到这样一种观点,即人们既需要控制,又需要所谓的 ‘自助’。”...我实际上觉得这正是那些趋势的原因,因为开发者能够在代码库中引入这个库,而无需任何人的许可,无需任何人批准或做任何事情,他们能够立即获得生产力和即时反馈,并能够在内部开发中更快地迭代。"...例如,开发者编写新的 MySQLContainer(),而不必指定实现,如 Docker 镜像、端口、卷等。 测试和应用程序代码可以让开发者全神贯注。Docker 的复杂性不需要考虑。

    30110

    讲讲拆分:从单体式应用到微服务的低风险演变

    关注我的Twitter(@christianposta)或 http://blog.christianposta.com,可以获取最近的更新和讨论。...在上图中,我们对Bar 服务做了同样的处理,把它搬到了一个架构里,在这里,服务拥有自己的数据和开放的API,这听起来已经很像是微服务了。...同样的: 很少能简洁漂亮地将单体式应用模块化 表格间的关系可以高度规范化,而且在各实体之间表现出紧密的耦合或完整性约束 我们不可能完全清楚单体式应用中的某些代码到底调用了哪些表格 虽然我们已将表抽取到了一个新的服务中...在即将发布的整个主题的第二部分中,我们将深入探讨技术框架或平台。 在这张图中,单体式应用将所有模块/组件/UI共同部署到了一个单体数据库中。当我们试图变更时,就会牵一发而动全身。...在这里,我们应该继续推演该服务的API和领域模型,以及如何在代码中实现模型。该服务会将新的事务性工作负载存储到其数据库中,并将数据库与其它服务分开。服务访问这些数据时必须经过API。

    94740

    从2016年11月期技术雷达看前端的未来|洞见

    1 前端在可见的未来 在那篇《最流行的编程语言JavaScript能做什么?》的文章里,我们看到了JavaScript在各个领域的应用。...Vue.js是一个简单易上手的框架,并且相当的轻量,在最近的这段时间里,它发挥的相当的出色。 可惜,笔者现在在用Angular.js 和 Angular 2,毕竟我现在的所做的事情是开发混合应用。...ECMAScript 2017:尽管我现在已经倾向于使用TypeScript,不过ES2017还是会用到的,只是我觉得Babel对我来说就是个坑。...起初这是一个传统的Spring + JSP网站,然后我们用JSP创建了JSON API,后来创建了一个新的API来服务移动应用和单页面应用,再后来这个API被拆分成了几个API。...作为一个前端程序来说,我们在调用后台API的过程中,总会遇到这样、那样的问题。除此,还有接口不好用的问题——“要是你可以在这里使用超媒体API,那么我的代码就会更加简单了”。

    82330

    十年积累,5.4万GitHub Star一朝清零:开源史上最大意外损失

    团队从头开始构建了它,以使终端的 API 交互尽可能人性化。 HTTPie(发音为 aitch-tee-tee-pie)可用于测试、调试以及通常与 API 和 HTTP 服务器交互。...在配置文件和存储库方面,GitHub 的概念模型会将用户和组织视为非常相似的实体。在这种情况下,由于我只是想在我们组织的个人资料上重复相同的操作,我的大脑切换到了「自动驾驶」模式。...一番操作之后 当我回到组织页面时,你可以想象我的困惑,我不仅仍然可以看到空的 README,同时我们最受欢迎的 repo 找不到了。片刻之后,我意识到发生了什么事。...最后,尽管我们的 GitHub star 量化为虚无,但 HTTPie 现在发展得非常好,从最初作为一个副项目到现在变成了一家公司,我们的团队正在将 HTTPie 发展成一个 API 开发平台。...用于 Web 和桌面的 HTTPie 私有测试版收到了很好的反馈,我们迫不及待地想在接下来的几周内公开发布它。

    1K40

    如何构建NodeJS微电影服务并使用docker部署

    通过将您的应用分成小单元,它的每个部分都可独立部署和扩展,可以由不同的团队和不同的编程语言编写,并且可以单独进行测试。...消除对技术栈的长期依赖。开发新服务时,您可以选择新的技术栈。 微服务通常组织得更好,因为每个微服务都有一个非常具体的工作,并且不关心其他组件的工作。...在生产中,部署和管理由许多不同服务类型组成,也存在操作复杂性。 在构建新的微服务架构时,您可能会发现许多您在设计时未预料到的交叉问题。...这是我的integration-test集成API测试调用:D。...然后,我们将我们的微服务放入Docker容器中,以便能够进行一些集成测试。 我们在NodeJs中学到了许多,但这只是开始而已。我希望这个东西可以在您使用Docker和NodeJS时帮助你。

    2.8K30

    2023 React 生态系统,以及我的一些吐槽……

    对于初学者来说,选择正确的库可能会很具有挑战性。 在这里,我将列出一些 React 库,供你学习并成为 React 开发者。...它最初的创建目的是解决 Redux 中的三个常见问题: "配置 Redux store 太复杂" "我必须添加很多包才能让 Redux 有用" "Redux 需要太多样板代码" 尽管我们不能解决所有用例...,但我们试图在 create-react-app 的精神下提供一些工具,它们可以抽象化设置过程、处理最常见的用例,并包含一些有用的实用工具,让用户可以简化他们的应用程序代码。...无论你是个新 Redux 用户,还是一个经验丰富的用户希望简化现有的应用程序,Redux Toolkit 都可以帮助改进你的 Redux 代码。...使你的应用程序更易于维护,更容易构建新功能,而无需担心连接新的服务器状态数据源。 对你的最终用户产生直接影响,使你的应用程序感觉比以往更快、更响应。 潜在地帮助你节省带宽并提高内存性能。

    3.7K30

    如何运用领域驱动设计 - 领域服务

    与其把它们强制地归于哪一类,不如顺其自然地在模型中引入一种新的元素,这就是Service(服务)。...它内部的实现方法可能是这样的:(在这里我们假设Itinerary的Places中的最后一个地点就是我们的当前地点,而且我们已经有一个叫做餐厅 Restaurant 的实体,该实体提供了有关餐馆的一系列信息和行为...,在该服务中,我们通过获取到当前的旅程的位置,根据该位置,从系统中存在的餐馆集合中找到了距离该位置最近的餐厅,然后再将这些餐厅中排名评价最好的一道菜推荐给用户。...来看看上面的行为中出现了哪些东西,首先是我们的行程,然后是餐馆。通过合理的处理这两个实体之间的关系,我们完成了我们的一系列操作,并且返回了一个美食信息的集合(在这里美食信息我们定义为了一个值对象)。...从图中可以看到,应用层保持了对领域层的引用关系,也就是说在应用层中,可以访问到领域对象。所以让应用层也具备了编排领域对象的能力。

    98730

    FFmpeg Maintainer赵军:FFmpeg关键组件与硬件加速

    我们可以看到FFmpeg的框架设计得十分精炼,基本上如果需要实现一个AVFormat或AVCodec以对应新的Format/Codec;所以即使一位开发者不了解FFmpeg框架也可以编写一个简单的Format...当然由于输入与解码变成了两个分离的步骤,导致代码中需要大量的While循环来判断此解码过程是否结束。...其次是因为OpenCV已经进行了大量的OpenCL加速,所以当面对这种图像后处理的硬件加速需求时可以考虑把OpenCV集成到FFmpeg中,但在OpenCV发展到v3.0后其API从C切换到了C++,而...上图是VA-API的一些基本概念,在这里我就不做过多阐述。 这是基于VA-API 一个基本流程。FFmpeg的VA-API也是基于此流程做的。...A:VA-API的Encoder从3.3.1开始支持,这部分的代码从2016年到2018年一直在进行重构,在4.0.0时VA-API的Encoder都可以支持。届时是一个开箱即用的状态。

    1.7K31

    再谈 API 的撰写 - 契约

    然而,新的契约出现并不意味着旧的契约的终止,只有当所有使用旧契约的地方都改用新契约时,我们才能安全地废除旧契约。...所以,即便你习惯于随心所欲地创建一个函数,然后在需要的时候重构之,做 API 时,你会受到很多掣肘。...我一开始在 RAML 和 swagger 两者间左右摇摆,写了不少测试代码,如果不是 swagger 的工具链过于吸引人,而 RAML 1.0 版本还处在 beta 阶段,我可能会最终选择 RAML。...契约和实现合二为一 如果我们从 swagger 出发,设计好 API 的接口,然后再用某种语言实现这个接口,显得有些累赘,日后改接口时,得改代码;改代码后如果变动了接口,还得回头改 swagger 的声明...客户端的 SDK 还好,客户端的其他代码都是单向调用 SDK,重新生成并不会影响太大;服务端的代码需要 API 实现者实现,即便生成了 stub,肯定是要修改和添加功能的,所以如果修改 swagger

    1.8K80
    领券