Прежде чем начинать выпендриваться своими нанооптимизациями, стоит вспомнить про benchmark.
А то программа после этих нанооптимизаций начинает медленней работать.
explain ANALYZE SELECT * FROM messages order by created_at limit 1;
QUERY PLAN
Limit (cost=0.14..1.15 rows=1 width=49) (actual time=0.009..0.009 rows=1 loops=1)
-> Index Scan using my_index on messages (cost=0.14..12.31 rows=12 width=49) (actual time=0.008..0.008 rows=1 loops=1)
Planning time: 0.059 ms
Execution time: 0.022 ms
explain ANALYZE SELECT * FROM messages WHERE created_at = (SELECT min(created_at) FROM messages);
QUERY PLAN
Seq Scan on messages (cost=1.16..2.31 rows=1 width=49) (actual time=0.016..0.018 rows=1 loops=1)
Filter: (created_at = $1)
Rows Removed by Filter: 11
InitPlan 2 (returns $1)
-> Result (cost=1.15..1.16 rows=1 width=0) (actual time=0.008..0.008 rows=1 loops=1)
InitPlan 1 (returns $0)
-> Limit (cost=0.14..1.15 rows=1 width=8) (actual time=0.007..0.007 rows=1 loops=1)
-> Index Only Scan using my_index on messages messages_1 (cost=0.14..12.34 rows=12 width=8) (actual time=0.006..0.006 rows=1 loops=1)
Index Cond: (created_at IS NOT NULL)
Heap Fetches: 1
Planning time: 0.096 ms
Execution time: 0.040 ms
# Ruby-метод для создания объекта нужного класса
def self.Operation type
const_get("Operation::#{type.capitalize}").new
rescue NameError
fail "Неизвестный тип"
end
class Operation
class Event < self; end
class Task < self; end
end
operation = Operation :event
def self.Complect type
const_get("Complect::#{type.capitalize}").new
rescue NameError
fail "Неизвестный тип"
end
module Complect
class Event; end
class QC; end
class Tast; end
end
complect = Complect :event
Спецслужбы могут с точностью определить местонахождение мобилы, могут удалённо включить микрофон на любой мобиле, если, конечно, из неё не вынули аккумулятор. FBI может определить местонахождение авто с On-Star, а также скрытно включить микрофон.
Вот недавно взламывали. geektimes.ru/post/251842
А то программа после этих нанооптимизаций начинает медленней работать.
sarzwwd89ucsqhpn6vs82l536w4rg9kv289
2v8du512mdfbxc965r4l6kcjcxy212psu2vn3w9nnroju
inl9vzopu0oxwiaveeu0d1l2tmrtfgov6
177hezlcs6jnakygw35fdf4fz0dguytlak0whb80
k5z7boob8neg4inbfoobt8pjovj4ik9g4fx1ise8y0q