#47 楼 @baxiaopeng 【约定优于配置】是 rails 的风格,别弄混了啊。
这样插入要生成 5000 个对象。
转推了。
Jbuilder 还行昂。
最近怎么都和这个干上了。。。
签到
应该和 class 关键字的位置有关。
很早的事了。
#5 楼 @1272729223 真想看看您在贵圈的作品。
听了一点发现以前听过这期了。
首先赞 lz 的讲解。
但是不能理解为什么会有最后的结论。
用 block,用 lambda,不要用 proc,让 proc 做好自己的幕后工作就好了。
我觉得用哪个取决于你要做什么,根据上面你讲的他们不同的特性去选择,若没有严格的限制的话,用哪个都没问题,除非希望代码风格上保持一致,可以都选择一种,但是没有所谓的 最好用哪个,最好别用哪个的
说法。
Sinatra 的代码中绝大多数,不,应该是所有 proc 的写法都是显式的使用 Proc.new.
require 'socket'
s = TCPSocket.new 'localhost', 2000
while line = s.gets # Read lines from socket
puts line # and print them
end
s.close # close socket when done
API 的例子啊。
datas.group_by { |hash| hash[:entry_id] }.map do |_, value|
new_hash = {entry_id: value.first[:entry_id], data: Hash.new}
value.each { |grouped_hash| new_hash[:data]["field_#{grouped_hash[:field_id]}"] = grouped_hash[:content] }
new_hash
end
lz 你是真的懒啊。
#9 楼 @xiaoronglv 没看到什么正解
好吧,既然 lz 不想做实验,那我帮你做。
你说的两条记录我觉得应该没有多少差别,现在我插入 100 条记录,首先是一次在一个 sql 中执行,我用了 activerecord-import 这个 gem。
Class Create Many Without Validations Or Callbacks (1.1ms) INSERT INTO `dogs` (`id`,`name`) VALUES (NULL,'dog0'),(NULL,'dog1'),(NULL,'dog2'),(NULL,'dog3'),(NULL,'dog4'),(NULL,'dog5'),(NULL,'dog6'),(NULL,'dog7'),(NULL,'dog8'),(NULL,'dog9'),(NULL,'dog10'),(NULL,'dog11'),(NULL,'dog12'),(NULL,'dog13'),(NULL,'dog14'),(NULL,'dog15'),(NULL,'dog16'),(NULL,'dog17'),(NULL,'dog18'),(NULL,'dog19'),(NULL,'dog20'),(NULL,'dog21'),(NULL,'dog22'),(NULL,'dog23'),(NULL,'dog24'),(NULL,'dog25'),(NULL,'dog26'),(NULL,'dog27'),(NULL,'dog28'),(NULL,'dog29'),(NULL,'dog30'),(NULL,'dog31'),(NULL,'dog32'),(NULL,'dog33'),(NULL,'dog34'),(NULL,'dog35'),(NULL,'dog36'),(NULL,'dog37'),(NULL,'dog38'),(NULL,'dog39'),(NULL,'dog40'),(NULL,'dog41'),(NULL,'dog42'),(NULL,'dog43'),(NULL,'dog44'),(NULL,'dog45'),(NULL,'dog46'),(NULL,'dog47'),(NULL,'dog48'),(NULL,'dog49'),(NULL,'dog50'),(NULL,'dog51'),(NULL,'dog52'),(NULL,'dog53'),(NULL,'dog54'),(NULL,'dog55'),(NULL,'dog56'),(NULL,'dog57'),(NULL,'dog58'),(NULL,'dog59'),(NULL,'dog60'),(NULL,'dog61'),(NULL,'dog62'),(NULL,'dog63'),(NULL,'dog64'),(NULL,'dog65'),(NULL,'dog66'),(NULL,'dog67'),(NULL,'dog68'),(NULL,'dog69'),(NULL,'dog70'),(NULL,'dog71'),(NULL,'dog72'),(NULL,'dog73'),(NULL,'dog74'),(NULL,'dog75'),(NULL,'dog76'),(NULL,'dog77'),(NULL,'dog78'),(NULL,'dog79'),(NULL,'dog80'),(NULL,'dog81'),(NULL,'dog82'),(NULL,'dog83'),(NULL,'dog84'),(NULL,'dog85'),(NULL,'dog86'),(NULL,'dog87'),(NULL,'dog88'),(NULL,'dog89'),(NULL,'dog90'),(NULL,'dog91'),(NULL,'dog92'),(NULL,'dog93'),(NULL,'dog94'),(NULL,'dog95'),(NULL,'dog96'),(NULL,'dog97'),(NULL,'dog98'),(NULL,'dog99')
=> #<struct ActiveRecord::Import::Result failed_instances=[], num_inserts=1>
大概 1.1ms,但是这种方式不执行回调和验证。
第二种方式,一条一条插入,,每执行一条产生下面的 log:
(0.2ms) SAVEPOINT active_record_1
SQL (0.3ms) INSERT INTO `dogs` (`name`) VALUES ('dogs0')
(0.2ms) RELEASE SAVEPOINT active_record_1
一条大概是 0.7ms,即使不算上 savepoint,一条也要 0.3ms, 那么 100 条是 30ms.
粗略的比较一下,就可以很明显的看出差别。
多提供点信息,比如 log,比如 route 文件之类的。