写点什么

Origami:基于组件的 Web 应用程序

  • 2014-12-16
  • 本文字数:1428 字

    阅读完需:约 5 分钟

Velocity Europe 2014 大会上, FT Labs 的总监 Andrew Betts 为与会者展示了由他们自行开发的一套用于 web 开发的标准与工具,目标是以它来应对创建与维护总数超过 800 个的 *.ft.com 网站的开发中的挑战。FT Labs 的主要策略是将 web 页面分解为多个组件,由合理定义的规则来构造这些组件。

FT Labs 是隶属于金融时报(Financial Times)的一个团队,专注于 web 技术。由于金融时报的电子资产的快速发展,公司面临着一系列的挑战,这些挑战都与规模的扩大有关。在他们管理的大量网站中缺乏通用与结构化的规则和工具,意味着大量的工作被不断重复。不断扩大与趋于复杂化的 web 生态系统对公司的发展生产了极大的阻力:难以维护及更新 web 应用程序;遗留的代码无法消除;费解的应用程序集成过程;所需要的端到端的工程技术又难以找到。

因此 FT Labs 计划寻求一种能够解决这些问题的解决方案,并决定了这套基于组件的方案。这套方案是由一系列准则推动的,以下仅举几例:

  • 必须完全遵守标准
  • 不允许对某个单一的产品(例如网站)创建特定的组件
  • 组件应当易于使用,并且具有灵活性
  • 组件使用者对于所使用的组件有权决定在何时进行升级
  • 组件应当被封装,或者使用命名空间,以确保不会与其它组件产生冲突
  • 对外部系统的依赖应降至最低,因此保证了整个解决方案的高可靠性与快速发布能力

组件以两种形式存在:模块(module)与 web service。

基于 Origami__ 组件创建的应用程序(图片来自于 Origami网站)

模块是指静态资源(例如 CSS 文件)或 CommonJS 模块,因此它的主要目的在于为多个网站提供相同的 UI 体验。每个模块必须遵守规格说明,包括命名规则、打包及构建配置、测试及演示规则,以及一些其它需求。举例来说, o-grid 是一套适应响应式布局的网格系统, o-date 专用于日期的格式化与修改, o-ft-typography 则是专门用于 FT 的排版样式。这些模块的文档说明了遵循规格开发可实现的效果。

如同名称所示,web service 通过 URL 终结点提供内容与数据。Web service 同样必须遵循一套规格说明,其中定义了一些需求,例如过期规则、必须提供的终结点(用于运行情况诊断、度量以及文档化),版本化规则以及多web service 环境的规则。Origami web service 的例子包括 responsive-image-proxy ,它是一个用于改变图片大小与进行图片优化的代理服务。

Origami 为模块提供了一套构建服务,通常在运行时进行触发。如果某个网页中包含了以下格式的标签:

复制代码
<link rel="stylesheet" href="//build.origami.ft.com/bundles/css?modules=o-ft-icons@^2.3.1" />

那么构建过程中会进行以下处理:

  • 安装 o-ft-icons 模块的 2.3.1 版本(或升级至下一个主要版本)
  • 如果存在任何依赖项,则自动进行安装
  • 运行构建过程
  • 对 CSS 输出内容进行压缩(Minify)
  • 进行 GZip 压缩并进行缓存
  • 由某个 CDN 进行托管

与之类似的是,script 标签会触发 JavaScript 的构建过程,其内容基本相同。

FT Labs 为组件提供了一份注册信息,可以为任何人使用。当然,如同我们所看到的那样,某些组件是专门为金融时报网站所使用的。

在报告的最后,Andrew 为与会者演示了FT Labs 的 Polyfills 服务。Polyfills 是一种 JavaScript 代码,它能够为 web 浏览器加入本身不支持的特性,以此减少各个浏览器提供商与各种版本所带来的差异。这个服务是可自定义的,但使用起来极其简单,只要在 web 页面中加入以下 script 标签即可。

复制代码
<script src="https://cdn.polyfill.io/v1/polyfill.min.js"></script>

查看英文原文: Origami: Component-Based Web Applications

2014-12-16 09:362073
用户头像

发布了 428 篇内容, 共 186.3 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

vue项目实战经验汇总

徐小夕

Java 面试 Vue 大前端 Vue3

在Codurance是如何面试技术人员的

sherlockq

面试 TDD

注册中心原理剖析

石刻掌纹

我真的尽力了,最经典Redis面试14题,没时间复习就看这个吧

小Q

redis 学习 编程 架构 面试

甲方日常53

句子

工作 随笔杂谈 日常

面经手册 · 第18篇《AQS 共享锁,Semaphore、CountDownLatch,听说数据库连接池可以用到!》

小傅哥

Java 并发编程 共享锁 Semaphore 信号量

CSS 排版与正常流 —— 重学CSS

三钻

CSS 排版

架构师训练营 -week09-总结

大刘

极客大学架构师训练营

数字货币引发的金融变革

CECBC

数字化时代

高承实:区块链的工业革命带来了什么?

CECBC

区块链 分布式

Redis 持久化之 RDB 与 AOF 详解

AI乔治

Java 架构 redis持久化 redia

Dubbo 接口,导出 Markdown ,这些功能 DocView 现在都有了!

程序员小航

markdown idea插件 IntelliJ IDEA 文档生成 Doc View

【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!

冰河

MySQL 数据库 性能优化 数据安全 分布式数据储存

Springboot过滤器和拦截器详解及使用场景

AI乔治

Java spring 架构 Spring Boot

什么是云服务?

anyRTC开发者

音视频 WebRTC 云服务 RTC

MySQL从库维护经验分享

Simon

MySQL 主从复制

Glide.with(view)挂在了谁的生命周期上

mengxn

生命周期 Glide Activity Fragment

读谱对吉他手来说重要吗?试试它提升你的读谱效率

奈奈的杂社

学习 编曲 打谱

【薪火计划】03 - 从错误中认识到管理

码字与律动

管理

会装虚拟机,删库不用跑

MySQL从删库到跑路

虚拟机 virtualbox

Nginx-技术专题-技术介绍

码界西柚

智变的八个瞬间,京东智联云化“?”为“!”

脑极体

《网络是怎样连接的》PDF下载

计算机与AI

网络

MySQL中的锁机制

AI乔治

Java MySQL 架构 线程 锁机制

阿里P8以hashmap讲解如何学习jdk源码,还不学习

小Q

Java 学习 源码 jdk mybatis

国网浙江建设公司推进“信用基建+区块链”建设

CECBC

区块链 国网 基建

新工业化如何实现?今年的信息化百人会中藏着“懂行”密码

脑极体

SQL数据库:窗口函数

正向成长

窗口函数

11.11 应对海量访问的网络基石 京东智联云自研交换机发展之路

京东科技开发者

运维 网络 交换机

前嗅教你大数据——什么是代理IP?

前嗅大数据

爬虫 数据采集 静态IP 代理IP 动态IP

Origami:基于组件的Web应用程序_JavaScript_João Miranda_InfoQ精选文章