【问题标题】:CoffeeScript for efficiencyCoffeeScript 提高效率
【发布时间】:2013-01-20 13:00:10
【问题描述】:

我有一个 CoffeeScript 代码

for y in [coY - limit .. coY + limit]
    for x in [coX - limit .. coX + limit]

我一直在寻找提高代码速度的方法,并找到了它编译成的内容:

for (y = _i = _ref = coY - limit, _ref1 = coY + limit; _ref <= _ref1 ? _i <= _ref1 : _i >= _ref1; y = _ref <= _ref1 ? ++_i : --_i) {
  for (x = _j = _ref2 = coX - limit, _ref3 = coX + limit; _ref2 <= _ref3 ? _j <= _ref3 : _j >= _ref3; x = _ref2 <= _ref3 ? ++_j : --_j) {

当我用自己的 JavaScript 替换它时

for(y = coY - limit; y <= coY + limit; y++) {
    for(x = coX - limit; x <= coX + limit; x++) {

我已经测量出脚本明显更快(从 25 到 15 毫秒)。我可以以某种方式强制 CoffeeScript 编译成类似于我的代码吗?还是有其他解决办法?

谢谢。

【问题讨论】:

  • simple loop in coffeescript 的可能重复项
  • 是的。不幸的是,在问这个问题之前我没能找到那个问题。
  • 不用担心。这是一个很难搜索的问题。如果我不确切知道我在寻找什么,我怀疑我是否会找到它。您的重复问题只是意味着现在更有可能将来有人会出现在正确的搜索字词上。

标签: coffeescript


【解决方案1】:

假设您的循环总是从较小的数字变为较大的数字,您可以使用by 1

for y in [coY - limit .. coY + limit] by 1
    for x in [coX - limit .. coX + limit] by 1

编译为:

for (y = _i = _ref = coY - limit, _ref1 = coY + limit; _i <= _ref1; y = _i += 1) {
  for (x = _j = _ref2 = coX - limit, _ref3 = coX + limit; _j <= _ref3; x = _j += 1) {

没有HEAPS更好,但可能有点。

【讨论】:

    【解决方案2】:

    我不知道,哥们,你编辑的代码为我编译成这个:

    // Generated by CoffeeScript 1.4.0
    var x, y, _i, _j, _ref, _ref1, _ref2, _ref3;
    
    for (y = _i = _ref = coY - limit, _ref1 = coY + limit; _i <= _ref1; y = _i += 1) {
      for (x = _j = _ref2 = coX - limit, _ref3 = coX + limit; _j <= _ref3; x = _j += 1) {
      }
    }
    

    要完全按照您的要求获得它,您可能只需要实际用 JavaScript 编写它。幸运的是,CoffeeScript 具有将文字 JS 插入 CS 文件的语法。如果用反引号 (`) 包围 JS,CS 编译器会将其包含在输出中,但不会以任何方式更改反引号中的内容。

    这是一个例子:

    console.log "regular coffeescript"
    
    #surround inline JS with backticks, like so:
    `for(y = coY - limit; y <= coY + limit; y++) {
      for(x = coX - limit; x <= coX + limit; x++) {
        console.log('inline JS!');
      }
    }`
    
    console.log "continue writing regular CS after"
    

    来源:http://coffeescript.org/#embedded

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-27
      • 2015-10-08
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多