【问题标题】:A mechanism of the CoffeeScript languageCoffeeScript 语言的一种机制
【发布时间】:2014-07-22 14:22:13
【问题描述】:

在使用 JavaScript 中的任何库、框架等之前,我对它的机制很感兴趣。 我想了解 CoffeeScript 的工作原理。

我的假设:

第一步:编译器从以下位置获取字符串:

  <script type="text/coffeescript"></script>

第二个:它创建一个像字符串一样的js代码:

 it = "test" -> "var it = 'test';"

最后一步编译器使用 eval() 来实现代码。

附: 为什么会流行起来? 它对性能有影响,毕竟我们花费大量时间来执行 .coffee 文件。

【问题讨论】:

  • CoffeeScript 文件可以编译服务器端,这意味着浏览器只能看到js文件(如果你提供.map文件,调试时除外)。

标签: javascript coffeescript


【解决方案1】:

通常的方法是在服务器端编译 CoffeeScript 代码,然后在 HTML 文件中链接 JavaScript。这通常使用coffeee 命令行实用程序执行,但您也可以找到为您处理它的构建系统,例如 Grunt、Brunch 等。您还可以编写Makefiles 或简单的 shell 脚本来获取替你处理这个。

使用某些构建系统和coffee 工具时,您可以选择让这些工具监控您的CoffeeScript 源代码,并在保存它们后立即重新编译。这可能非常方便。查看文档中的“监视”功能。

我对 CoffeeScript 流行度的猜测是它为您提供了可以说更好的语法。就个人而言,我发现 CoffeeScript 的最大优点是添加了语法糖,如列表推导式,并且它将所有内容都视为表达式(例如,能够从函数返回 for 循环或 if-else 块)。您还会发现更进一步的语言,例如 Coco、LiveScript。

需要注意的一点是,CoffeeScript 不是一种解释型语言。它被转译(编译成另一种语言),然后由目标运行时(JavaScript 引擎)执行。因此,它具有与等效 JavaScript 代码相同的性能特征。您是否可以手动编写性能更高的代码是另一个问题。你可能可以。无论如何,谈论 CoffeeScript 的“性能”有点傻。至于编译后的 CoffeeScript 的性能,如果你对 JavaScript 有很好的了解,你可能可以到处优化,但我一直没有必要这样做。

【讨论】:

    【解决方案2】:

    使用 Coffee Script 的通常方式是在构建过程中作为一个步骤进行编译。所以你会编写 Coffee Script,然后将其编译为纯 Javascript,然后在你的 Web 应用程序中使用它。

    这不会产生运行时成本,因为浏览器只会加载 Javascript,即:

    <script type="text/javascript" src="compiled-js-file.js"></script>
    

    可以直接使用coffee命令编译,也可以使用GulpGrunt等更花哨的编译系统。

    您可以查看Coffe Script 网站,了解它有哪些功能(这就是吸引开发人员的地方)。在我看来,最有用的是:

    • 函数的数组语法(JS 将在 ES6 中支持)
    • 存在运算符可保护您免受空值错误的影响
    • 类(也存在于 ES6 中)
    • 解构赋值

    另外,这意味着当您调试这样的 web 应用程序时,您将无法看到错误的确切位置(或在咖啡源中设置断点)。幸运的是,我们有 source maps 来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 2011-01-04
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多