11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

Pinterest 转向通用 JavaScript 和 React

  • 2016-12-05
  • 本文字数:951 字

    阅读完需:约 3 分钟

在 2015 年,Pinterest 决定转向 React。但是对于一个有数百万活跃用户的站点来说,谈何容易。 Pinterest 转向 React 的故事本质上是 Pinterest 转向通用 JavaScript 的故事。

Pinterest 的软件工程师 Imad Elyafi道,决定转向React 的部分原因是React 是“黄金标准”,有着“庞大的开发者社区”以及它“能极大地提升工程效率和质量”。React 通常用在通用JavaScript 场景下,在此服务器和浏览器使用同一类模板。

Pinterest 的服务器端引擎是 Django,它使用 Jinja 模板引擎。然而,Pinterest 的客户端的 JavaScript 使用 Nunjucks ,它的灵感来源于 Jinja,也与之相似。这导致了代码的重复,一份 Python 版和一份 JavaScript 版。但是他们无法抛弃一切而转向 React,Pinterest 的软件工程师 Jessica Chan 说道。

我们需要一个方案,能让我们在不打断产品组工作和影响用户体验的情况下,迭代地转换数以百计的 Pinterest 构件。第一步就是要将客户端和服务器端统一到单一的模板渲染引擎,然后再将引擎替换掉。如果服务器能解释 JavaScript,使用 Nunjucks 渲染模板以及共享客户端代码,我们就能进行迭代迁移到 React。

在触及 React 之前,该团队重新设计了服务器渲染引擎的架构以使用现成的 Nunjucks 模板。Jessica Chan 说,他们没有在 Django 的内部渲染 Jinja 模板,而是创建了一个进程使用 Node 来渲染模板。“最终,我们在 Nginx 代理层后使用常驻的 Node 进程,将接口架构设计为每一个网络请求都是无状态的渲染过程。我们因此能将请求分发到这些进程组,并在需要的时候扩展进程数。”

一旦该系统上线,他们就能慢慢转向基于 React 的组件渲染模式。Elyafi 说只要可能他们都扩展 Nunjucks 模板语言来渲染 React。

复制代码
{% if in_react %}
{{ component('MyReactComponent', {pinId: '123'}) }}
{% else %}
{{ module('MyDenzelComponent', pinId='123') }}
{% endif %}

component 关键字告诉模板引擎应该使用基于 React 的组件,而不是基于 Nunjucks 的。Pinterest 转向 React 的努力还在继续。

查看英文原文: Pinterest’s Switch to Universal JavaScript and React


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-12-05 18:002368
用户头像

发布了 33 篇内容, 共 96624 次阅读, 收获喜欢 9 次。

关注

评论

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

银行小程序隐私安全如何做?诊疗一体,一步到位

WeTest

堡垒机品牌就认行云管家!为什么呢?

行云管家

云计算 系统运维 堡垒机 IT运维 云计算运维

好评如潮,PerfDog两年迭代正式启动商业化探索

WeTest

经济学人:若比特币价格清零会怎样?

CECBC

还不了解 static ?年轻人,劝你耗子尾汁...

神策技术社区

数据分析 大前端 后端 埋点

python——利用tkinter制作可视化窗体1

YUKI0506

OceanBase数据库源码解读之模块结构

OceanBase 数据库

数据库 分布式数据库 oceanbase OceanBase 开源 OceanBase 社区版

牛客网论坛最具争议的Java面试成神笔记,GitHub已下载量已过百万

Java~~~

Java 架构 面试 算法 架构师

二本渣渣5面阿里,从准备简历到“直怼”面试官,经历了什么?

Java 程序员 架构 面试 计算机

架构实战营毕业总结

俞立夫

架构实战营

Fil今日价格行情?Fil未来多少钱一枚?

区块链 分布式存储 IPFS fil价格 fil行情

容器化 | ClickHouse on K8s 基础篇

RadonDB

数据库 Kubernetes Clickhouse

python——execl写入数据2

YUKI0506

去哪儿网数据同步平台技术演进与实践

Qunar技术沙龙

数据库 数据中台 ES 数据同步 Kafk

腾讯WeTest零售行业质量解决方案

WeTest

八家知名大厂联合手写的Java面试手册刚上线!竟就到达巅峰?

Java~~~

Java 架构 面试 JVM 多线程

金融助力补链强链 科技发挥关键作用

CECBC

云时代的到来会淘汰运维人员吗?运维工作可以一直做吗?

行云管家

云计算 运维 云服务 IT运维 云时代

架构师训练营-毕业设计

俞立夫

“区块链”赋能智慧社区,多维度提升管理质效

旺链科技

区块链 智慧社区

容器化 | ClickHouse on K8s 部署篇【建议收藏】

RadonDB

数据库 Kubernetes Clickhouse

当知识图谱遇上预训练语言模型

博文视点Broadview

给Arm生态添把火,腾讯Kona JDK Arm架构优化实践

腾源会

开源 腾讯 jdk 腾讯开源 KonaJDK

云原生 | 混沌工程工具 ChaosBlade Operator Node 篇

RadonDB

数据库 云原生 混沌工程

工具 | 使用 CLion 编译调试 MySQL 8.0

RadonDB

MySQL 数据库

数字人民币专利数激增, “区块链”领域大有可为

CECBC

2021 年 iOS 应用程序开发七种最佳语言

iOSer

Java flutter ios objective-c swift

为什么你的数据总是丢?

神策技术社区

数据分析 大前端 后端 埋点

阿里这份15w字Java核心面试笔记!GitHub凭借百万下载量位居榜首

Java~~~

Java 架构 面试 微服务 多线程

终于有人把TCP协议与UDP协议给搞明白了

编程菌

Java 编程 程序员 计算机 java技术宅

IM开发技术学习:揭秘微信朋友圈这种信息推流背后的系统设计

JackJiang

即时通讯 IM 微信朋友圈

Pinterest转向通用JavaScript和React_JavaScript_David Iffland_InfoQ精选文章