Вопрос был не в разнице. Я просто предположил, что с названием «setInterval» этот таймер должен соблюдать интервалы.
Небольшой пример того, что все можно и с setInterval.
working = false
setInterval ->
return if working
working = true
$.get '/smth', -> working = false
, 200
Impress использует каждый инстанс nodejs для всех приложений? У v8 производительность резко падала раньше при размерах хипа > ~1.5гб. С этим проблем не будет у impress?
Invisible.Person.query({firstName: "Jane"}, function(err, results){
if (err){
console.log("something went wrong");
} else {
console.log("Persons named Jane are:");
for (var i = 0; i < results.length; i++){
console.log(results[i].fullName());
}
}
});
Т.е. каждый, кто умеет открывать JS консоль в браузере, может выполнять любые запросы на базе?
Область применения этой библиотеки довольно узкой получается.
Использую capistrano и для деплоя nodejs приложений. Он очень гибкий в конфигурации, так что легко можно создавать любые нужные таски (миграции, прекомпиляцию ассетов и прочие). Также из коробки работает multistage — возможность указывать разные конфиги для development, staging, production.
Таски для работы с forever получились довольно простыми
%w(start restart stop).each do |action|
task :"forever_#{action}" do
run "cd #{current_path} && NODE_ENV=#{stage} forever -al #{log_file} #{action} #{forever_cmd}"
end
end
С npm install тоже проблем не возникло.
Единственный минус — по умолчанию конфиг лежит в config/deploy.rb, так что если нет у вас этой директории, придется добавить :)
Некоторое время назад начал потихоньку дописывать doT, так как из всех существовавших он больше всех привлек. Основной репозиторий был заброшен долгое время, и PR они не принимали.
Позже получилось, что переписал полностью шаблонизатор, оставив основные идеи и скорость ту же. Появилась куча плюшек самых разных: от простой кастомизации тэгов, до прозрачного автолоада, кэширования и препроцессора haml.
Я, наверное, непонятно выразился в предыдущем коментарии. Класс — технически это функция. А у любой функции в js .constructor — Function. A Function.prototype (он же .constructor.prototype для класса) перезаписать нельзя, только изменять. Да и то выходит, что он один на все функции.
Во 2м примере вы привели пример изменения прототипа класса. Это всегда было. Я добивался того, чтобы так же можно было поступать с методами класса (статическими, если так будет понятнее). A.classMethod напримерю. Чтобы в унаследованном В, он был доступен по цепочке прототипов, а не собственным свойством.
К сожалению, Function.protoype (ведь это он и есть SomeClass.constructor.prototype) в моей версии node.js доступен только для чтения. Да и в браузере так же. К нему лишь можно добавлять свойства.
Да и если поменять его сначала для одной функции, а потом для другой, то и в первой он поменяется. А кому нужно наследование, которое наследует во все классы сразу.
А extendsWithProto как раз таки добавляет предка только в качестве прототипа одного класса.
Если вы правда знаете, как реализовать для всех движков, поделитесь, пожалуйста. Я буду очень благодарен.
Я добавлю еще один пример работы classkit, если может остались вопросы по его функциям.
describe 'coffee_classkit', ->
describe '#extendsWithProto', ->
beforeEach ->
class @A
@x = -> true
class @B extends @A
classkit.extendsWithProto @
it 'keeps child`s own properties clean', ->
assert.deepEqual Object.keys(@A), ['x']
assert.deepEqual Object.keys(@B), ['__super__']
assert.equal @A.x(), true
assert.equal @B.x(), true
Абстракция? Если точнее, были конструкторы и их прототипы. Кофе поверх этого позволил группировать код относящийся к классу, объявлять методы классов, определять наследование, для которого до этого нужно было было писать функции или подключать библиотеки.
1. .prototype — будет применяться к экземплярам класса. Если вы про то, чтобы сделать промежуточный класс для создания класса потомка с нужным прототипом, то тоже загвоздка тут. Чтобы этот прототип применился, нужно вызвать new. При этом JS создает объект с таким прототипом, а нужна функция. Все равно придется использовать __proto__.
Если же я неправильно понял, приведите, пожалуйста, пример.
2. Я уже и забывать начал, что где-то нельзя переопределять методы :) Но раз в JS можно переопределять, я этот контекст и использовал. Не уверен, называется ли имеющееся классическим, но в любом случае оно принадлежит подмножеству, доступному с помощью classkit.
2.1. Можно конечно и свою полностью, но так как-то нагляднее и везде одинаково. А где потребуется — там расширять возможности.
Но идея отличная — я добавлю такую функциональность.
3. Тут вы тоже правы — формулировка неправильная. Можно было. Но у каждого свой способ, и это часто мешает совместной разработке. classkit я писал с оглядкой на Ruby, потому что в нём пока лучшая подель модулей и классов, которую я встречал. Изобретать свой велосипед заново и обкатывать его тоже не хотелось.
Я не так что-то делаю?
Почему? В моем комментарии выше есть ссылка на спецификацию. Даже
setInterval(function(){throw 'asd'}, 500)сработает только 1 раз.Небольшой пример того, что все можно и с setInterval.
setIntervalне дает желаемого результата?Т.е. каждый, кто умеет открывать JS консоль в браузере, может выполнять любые запросы на базе?
Область применения этой библиотеки довольно узкой получается.
Таски для работы с forever получились довольно простыми
С
npm installтоже проблем не возникло.Единственный минус — по умолчанию конфиг лежит в
config/deploy.rb, так что если нет у вас этой директории, придется добавить :)Вобще было бы хорошо иметь возможность указать свою функцию перевода, чтобы хранить все переводы в одном месте. Что-то вроде
tempus.translations = gettext // или I18n.tПозже получилось, что переписал полностью шаблонизатор, оставив основные идеи и скорость ту же. Появилась куча плюшек самых разных: от простой кастомизации тэгов, до прозрачного автолоада, кэширования и препроцессора haml.
Тут можно посмотреть github.com/printercu/doT
Во 2м примере вы привели пример изменения прототипа класса. Это всегда было. Я добивался того, чтобы так же можно было поступать с методами класса (статическими, если так будет понятнее). A.classMethod напримерю. Чтобы в унаследованном В, он был доступен по цепочке прототипов, а не собственным свойством.
Да и если поменять его сначала для одной функции, а потом для другой, то и в первой он поменяется. А кому нужно наследование, которое наследует во все классы сразу.
А extendsWithProto как раз таки добавляет предка только в качестве прототипа одного класса.
Если вы правда знаете, как реализовать для всех движков, поделитесь, пожалуйста. Я буду очень благодарен.
Я добавлю еще один пример работы classkit, если может остались вопросы по его функциям.
.prototype— будет применяться к экземплярам класса. Если вы про то, чтобы сделать промежуточный класс для создания класса потомка с нужным прототипом, то тоже загвоздка тут. Чтобы этот прототип применился, нужно вызвать new. При этом JS создает объект с таким прототипом, а нужна функция. Все равно придется использовать __proto__.Если же я неправильно понял, приведите, пожалуйста, пример.
2. Я уже и забывать начал, что где-то нельзя переопределять методы :) Но раз в JS можно переопределять, я этот контекст и использовал. Не уверен, называется ли имеющееся классическим, но в любом случае оно принадлежит подмножеству, доступному с помощью classkit.
2.1. Можно конечно и свою полностью, но так как-то нагляднее и везде одинаково. А где потребуется — там расширять возможности.
Но идея отличная — я добавлю такую функциональность.
3. Тут вы тоже правы — формулировка неправильная. Можно было. Но у каждого свой способ, и это часто мешает совместной разработке. classkit я писал с оглядкой на Ruby, потому что в нём пока лучшая подель модулей и классов, которую я встречал. Изобретать свой велосипед заново и обкатывать его тоже не хотелось.