为什么我不应该为 React 和 babel 使用 CDN?

2024-04-15

当我学习 jQuery 和 Bootstrap 时,我们(我的学习 Web 框架的菜鸟同胞)被告知 CDN 有很多好处等等。

现在我正在涉足 React/Babel,我们被告知应该从我们的主机服务器下载文件并准备好一切。但我们仍然能够使用 CDN,但仅用于原型设计和开发,不建议用于生产用途。

我认为使用 CDN 的目的是节省资金、带宽等。

我引用这些陈述:

Babel: 在浏览器中编译的用例相当有限,因此如果您在生产站点上工作,则应该在服务器端预编译脚本 https://babeljs.io/docs/setup/#installation

React: "以上版本仅适用于开发,不适合生产。 React 的精简和优化生产版本现已推出。 https://facebook.github.io/react/docs/installation.html“(页面底部)

class Button1 extends React.Component {
    constructor(props) {
        super(props);
        this.but = null;
    }
    render() {
        let c = 'mdc-button mdc-button--raised mdc-button--primary mdc-ripple-upgraded';
        let l = e('label', {}, this.props.label);
        let i = iconToggle(this.props.icon);
        this.but = e('button', {className: c, onClick: () => {toggleLights()}}, l, i);
        return e('div', {className: 'myCenter'}, this.but);
    }
}

Edit:

您正在使用没有 JSX 的 React https://facebook.github.io/react/docs/react-without-jsx.html.

不使用 JSX 进行反应

JSX 不是使用 React 的必要条件。使用 当你不想设置时,没有 JSX 的 React 特别方便 在您的构建环境中进行编译。

由于您不需要在计算机中编译程序,因此可以包含react.min.js没有任何问题。

Babel 用于将 JSX 转换(编译)为 JavaScript,不建议这样做 按照我下面的说明在浏览器中执行此操作。

网络上的大多数教程都是关于使用 JSX 的,因为这是使用 React 的优势之一。 JSX 是一种语法糖。使用 JSX 可以编写更少的代码。

尝试这个查看 JSX 如何转换为 JavaScript 以及生成了多少代码。

所以,如果你正在使用没有 JSX 的 React https://facebook.github.io/react/docs/react-without-jsx.html,那么使用 CDN 获取 React 库比将其托管在服务器中更快。它的工作原理与 jQuery 和 Bootstrap 相同。您不需要包含 Babel,因为您不使用 JSX。


为什么您不应该使用 CDN 已在您提供的同一 Facebook 页面中给出。

如果您喜欢使用自己的文本编辑器,也可以下载这个 HTML 文件,编辑它,然后从本地文件系统打开它 浏览器。它的运行时代码转换速度很慢,所以不要使用它 在生产中。

说清楚一点,

使用CDN:

正如 Facebook 所说,它在浏览器中进行缓慢的运行时代码转换。

那是你的代码不会立即执行。

首先,您的代码应该转换为 JavaScript,以便浏览器可以执行它,因为 JSX 不受支持。

转换为 JavaScript 后,浏览器会执行它。

在客户端浏览器上:

JSX -> JavaScript -> Execute

使用编译的(生产版本):

当您将 JSX 编译为 JavaScript 时,您可以避免客户端浏览器中的运行时代码转换,从而节省大量时间。

通常编译会优化代码并生成最终结果代码。

然后您可以缩小它,用短变量名替换长变量,删除注释,删除多余的空行等以减少大小。然后文件被 gzip 压缩并传输到客户端的浏览器。此阶段(minify 和 gzip)可减小大小并节省带宽并增加网页渲染时间。

在你的电脑:

JSX -> JavaScript -> minified JavaScript

在客户端浏览器上:

JavaScript -> Execute

在编程中,最耗费资源的工作是编译代码。 (执行取决于代码/逻辑)

因此,您正在计算机中执行资源最密集的任务,并发送简单的 JavaScript 来执行,这减少了浏览器要完成的工作,从而加快网页加载速度并减少客户端浏览器上的 CPU 工作(某些用户可能会使用较慢的速度)计算机和您的网页可能会因使用太多资源而挂起计算机)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不应该为 React 和 babel 使用 CDN? 的相关文章

随机推荐

  • 使用 sinon 断言使用所需参数进行了特定的存根调用

    假设您正在测试一个函数 该函数将使用不同的参数多次调用依赖项 var sut ImportantFunction function dependency dependency a 1 dependency b 2 使用QUnit Sinon
  • 如何在MAC上用python打开Excel实例?

    我认为这个问题之前已经被问过 但还不清楚 在最初的问题中 用户提供了 excel exe 它是 Windows 可执行扩展 不适用于 mac 我需要在 MAC 上用 Python 打开新的 Excel 实例 我应该导入哪个模块 我是一个新手
  • 如何将 perforce 用户更改为超级用户

    如何将标准 perforce 用户更改为超级用户 看到很多关于如果超级用户密码丢失该怎么办的问题 但没有看到关于如何创建另一个超级用户或授予当前用户超级用户权限的问题 您将需要更新该用户的 Perforce Protections 表 例如
  • 从 React Native 应用程序中删除 console.log

    如果您删除console log 在将 React Native 应用程序部署到商店之前调用 是否存在一些性能或其他问题 如果console log 调用保留在代码中 有没有办法使用某些任务运行程序删除日志 类似于 Grunt 或 Gulp
  • 将数据从两个 UItextfield 传递到新的视图控制器

    我有点坚持尝试将数据从一个视图控制器上的两个 UITextfield 传递到另一个视图控制器 基本上我得到了以下物品 视图控制器 h import
  • TDD 在机器学习中的好处

    据我所知 TDD 的典型工作流程是基于黑盒测试的 首先我们定义接口 然后编写一个或一组测试 然后我们实现通过所有测试的代码 那么请看下面的例子 from abc import ABCMeta class InterfaceCalculato
  • 如何使用 Volley 获取并解析 JSON 对象

    我一直无法找到这个问题的详细答案 或者至少没有一个我能理解的答案 我正在尝试设置 Volley 以从 iTunes 中提取 JSON 对象 然后我想解析这些对象 获取它们的图像 URL 例如 这里是 iTunes JSON 对象 URL S
  • python使用ssh时找不到模块

    我在服务器上使用 python 当我运行需要 numpy 模块的 python 命令时 如果我这样做 ssh
  • 连接 Hibernate 的查询生成

    我想实施虚拟视图与预处理器 一个简单的例子 之前的HQL FROM PublishedArticle a 生效后的 HQL FROM Article a WHERE a published true 本质上 我需要一种在执行查询之前处理查询
  • Angular 4 和 ng-template

    我收到此警告 The
  • 使用python(谷歌应用程序引擎)获取上传文件的名称和扩展名

    我正在使用表单将文件上传到谷歌应用程序引擎并将它们存储在数据存储中 我还想存储原始文件名和扩展名以供演示之用 有没有办法从发布服务器端检索此数据 或者只能在客户端收集并作为单独的字段发送 例如http www tinyurl com 5jy
  • 使用已填充的模型添加非空且唯一的字段

    我的应用程序中有一个模型在带有一些条目的服务器中运行 我需要添加一个SlugField 对于该模型来说是唯一且非空的 这SlugField将根据trading name 我更改了模型以添加这个新字段并修改了保存方法 class Suppli
  • jqGrid treeGrid 捕获展开折叠事件

    我使用 jqGrid 来构建一些大树 现在我想记住cookie中展开和折叠的节点 所以我想捕捉展开和折叠事件 我在手册中找不到它 所以我用这种方式解决了 grid find div treeclick bind click function
  • PRY 或 IRB - 重新加载类并忘记已删除的功能

    如果您更改文件然后在 pry 或 irb 中重新加载它 它似乎会拾取您添加到该类中的任何新功能 但不会忘记您从该类中删除的旧功能 重现步骤 使用单一方法创建一个类 例如 say hello 打开 PRY 或 IRB 并且load my cl
  • 使用 $.html() 时如何提高渲染性能

    我正在研究骨干demo app https jsfiddle net o75r7fu9 8 显示推文列表 当我用不同的数据替换所有 推文 时 我使用以下命令清除列表 html render function item table html
  • 如何将powershell UTC日期时间对象转换为EST

    我收到了日期时间字符串 格式如下 2017 08 03T12 30 00 000Z 我需要能够将它们转换为 EST 我尝试过的每个函数都会抛出一个或另一个错误 通常是 String was not recognized as a valid
  • translate3d() 导致 jQuery 悬停/单击事件无法正确触发

    在分析不同 CSS 动画类型上的 jQuery 鼠标事件时 我注意到 translate3d 会导致悬停和其他事件无法正确触发 在一个基本示例中 我从右到左对块列表进行动画处理 翻转时 我将悬停的 LI 背景设置为绿色 注意 测试是为 we
  • 实时音高检测

    用于实时检测用户歌唱的音调FFT https stackoverflow com questions 1351381 fft problem returns random results and 自相关 https stackoverflo
  • 为什么不能使用“new”运算符创建泛型类型的实例?

    我发现了很多关于how克服这个限制 但没有说明为什么存在这个限制 除了this one https stackoverflow com questions 75175 create instance of generic type in j
  • 为什么我不应该为 React 和 babel 使用 CDN?

    当我学习 jQuery 和 Bootstrap 时 我们 我的学习 Web 框架的菜鸟同胞 被告知 CDN 有很多好处等等 现在我正在涉足 React Babel 我们被告知应该从我们的主机服务器下载文件并准备好一切 但我们仍然能够使用 C