← 所有帖子
理智的架构:为什么 Phlo 的极简主义是全栈的未来

理智的架构:为什么 Phlo 的极简主义是全栈的未来

现代网页开发已经陷入了长达十五年的争论,这使我们进入了一个复杂性陷阱。我们用服务器端 PHP 的经过验证的稳定性(它仍然默默地支持着 70% 的网络)交换了一个碎片化的世界,充满了水合不匹配、脆弱的构建链和没有任何单一架构师能够真正审计的依赖树。典型堆栈的层之间的距离已经变得如此之大,以至于没有人再能在脑海中持有整个图景。

Phlo 是对这种常态的有意背离:一个垂直集成的堆栈(语言、应用平台、服务器和操作),旨在从这些臃肿的默认设置中重新夺回所有权。通过将前端和后端之间的距离压缩为一个单一的心理模型,它提供了一条通往稳定性、可预测性和技术监督的回归之路。

以下是该架构的五个要点。

AI agents are first-class citizens

大多数框架是为人类设计的,仅仅被 AI 容忍。Phlo 的构建理念是,一个作为一个封闭循环存在的框架,拥有单一的真相来源,是一个代理可以真正理解的东西。

该平台为 LLM 提供了专门的 SKILL.md 参考文档,因此代理可以在没有先前培训的情况下在代码库上工作。工作流程从 reflect::context 开始,这是一个返回身份、路由/视图计数、加载的包和最近错误的单一调用,快速的定位快照,另外还有单独的调用可用于完整的路由和视图列表。这是一个双平面设计的一部分:reflect::build:: 在应用外部运行,快速且仅读取源代码,而 phlo_eval 在实时应用内部运行,以便代理可以针对真实数据执行代码以验证行为。

使 Phlo 对人类可读的相同属性(一个封闭循环、源映射错误、一个单一的技能文档)使其对代理可操作,并将其视为一项首要目标,成倍增加了小团队的能力。

The bet on zero dependencies

在一个“Hello World”项目引入数百兆字节无法审计的供应商代码的行业中,Phlo 的零依赖立场是对可读性的捍卫。对于一个其整个前提是监督的平台,庞大的供应商树将从内部削弱架构。

引擎本地处理以下内容,而不是管理一个包的墓地:

  • 集成的 CSS 转换器,
  • 内置的 JS 压缩器,
  • 内部图标精灵构建器,
  • 原生 SPA 运行时。

通过拥有这些表面区域,Phlo 避免了困扰现代 JavaScript 堆栈的依赖旋转,且引擎保持足够小,以便能够被完全理解。

A line-based parser, no AST

Phlo 做出了一个令人惊讶的选择,使用基于行的解析器,而不是传统的抽象语法树。解析器只有几百行,可以在一次阅读中理解。因为 .phlo 源中的第 N 行直接映射到生成的 PHP 中的已知行,所以源映射几乎是免费的,错误页面异常精确。

规则集是严格的:语句在换行符处结束,且以 ([{},. 结尾的行被视为隐式延续。权衡是显而易见的:空行终止视图,因此您不能在 HTML 块内部使用空行进行视觉间距。Phlo 对此的回答是更好的诊断,而不是更宽容的解析器:违规会立即停止构建,并提供文件和行号。更宽松的语法会放宽规则,但代价是解析器自身的可读性,而这不是 Phlo 所愿意做的权衡。

Realtime as an additive step, not a requirement

Phlo Realtime 添加了一个 WebSocket 层,它是附加的而不是基础的。一个应用保持为正常的请求-响应应用,只有在 Phlo Daemon 运行时才“点亮”实时行为。

这是一个进程内模型:守护进程拥有套接字连接,并通过与其他地方使用的相同工作池将事件(身份验证、连接、接收、关闭)分派到您的应用中,每个事件在开发主机上是一次性过程,在发布主机上是常驻池,没有每个事件的启动成本。因为无论如何,套接字事件的处理方式与路由完全相同,所以没有特殊的运行时需要学习,数据库保持为真相来源,而不是状态存储在长期内存中。

Reclaiming ownership from the cloud default

“无服务器”默认按请求计费,因此成本随着成功而增加。Phlo 回归到一种模型,其中成本与机器相关,而不是请求量:无论您有十个用户还是一万个用户,账单保持可预测。

Phlo 在负载均衡器后面以相同的、无共享节点水平扩展。为了进一步扩展,工作模式使应用保持在内存中,objPers 允许像数据库连接这样的昂贵资源在请求之间存活,因此工作者在每次调用时不需要支付新的连接成本。设置 prop %MySQL.objPers = true 可以在不放弃简单的纯 PHP 模型的情况下,获得常驻池的性能。

The point of all of it

Phlo 的目标是为小团队提供一个通常被碎片化堆栈所剥夺的监督。它通过 apply() 协议统一语言和平台:服务器发送 DOM 命令,客户端应用这些命令,并且没有手写的客户端胶水需要与后端保持同步。

现在最有用的举措可能不是更多的抽象,而是一个足够小的模型,实际上可以在您的脑海中保持:可负担的、拥有的,并且旨在与人类和代理一起在键盘上工作。

我们使用必要的cookie来使该网站正常工作。在您的许可下,我们还使用分析工具来改善网站。