CoffeeScript for efficiency
I have CoffeeScript code
for y in [coY - limit .. coY + limit]
for x in [coX - limit .. coX + limit]
I was looking for ways to improve the speed of my code and found that it compiles:
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) {
When I replaced this with my own JavaScript
for(y = coY - limit; y <= coY + limit; y++) {
for(x = coX - limit; x <= coX + limit; x++) {
I measured the script significantly faster (25 to 15ms). Can I somehow get CoffeeScript to compile to code similar to mine? Or is there another solution?
Thank.
source to share
Assuming your loop will always go from lower to higher, you can use by 1
:
for y in [coY - limit .. coY + limit] by 1
for x in [coX - limit .. coX + limit] by 1
What compiles:
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) {
It's not HEAPS better, but maybe not much.
source to share
I don't know, the code in your edit compiles for me:
// 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) {
}
}
To get it exactly the way you want it, you just need to write it in JavaScript. Fortunately, CoffeeScript has a syntax for inserting literal JS into a CS file. If you surround the JS with backward inference (`), the CS compiler will include it in the output, but it won't change what it does in reverse.
Here's an example:
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"
source to share