减少基于 gtk2 和 ocra 构建的 ruby 应用程序的加载时间
Decrease load time for ruby app built on gtk2 and ocra
粘贴一个使用 gtk2 启动系统托盘图标的小示例 gem。
#!/usr/bin/env ruby
# encoding: UTF-8
require 'gtk2'
si=Gtk::StatusIcon.new
si.stock=Gtk::Stock::DIALOG_INFO
si.tooltip='StatusIcon'
si.signal_connect('activate'){|icon| icon.blinking=!(icon.blinking?)}
info=Gtk::ImageMenuItem.new(Gtk::Stock::INFO)
info.signal_connect('activate'){p "Embedded: #{si.embedded?}"; p "Visible: #{si.visible?}"; p "Blinking: #{si.blinking?}"}
quit=Gtk::ImageMenuItem.new(Gtk::Stock::QUIT)
quit.signal_connect('activate'){Gtk.main_quit}
menu=Gtk::Menu.new
menu.append(info)
menu.append(Gtk::SeparatorMenuItem.new)
menu.append(quit)
menu.show_all
si.signal_connect('popup-menu'){|tray, button, time| menu.popup(nil, nil, button, time)}
si.signal_connect('scroll-event'){|icon, event|
modifier=event.state#A GdkModifierType indicating the state of modifier keys and mouse buttons
##Handle only control and shift key
ctrl_shift=(Gdk::Window::CONTROL_MASK|Gdk::Window::SHIFT_MASK)
mod=modifier&ctrl_shift
case mod
when 0
print "(None)"
when Gdk::Window::CONTROL_MASK
print "Control+"
when Gdk::Window::SHIFT_MASK
print "Shift+"
when (Gdk::Window::CONTROL_MASK|Gdk::Window::SHIFT_MASK)
print "Control+Shift+"
end
##Check for direction
case event.direction
when Gdk::EventScroll::UP
print "up\n"
when Gdk::EventScroll::DOWN
print "down\n"
end
}
exit if defined?(Ocra)
Gtk.main
如果我 运行 它作为 ruby 脚本,即 ruby my_program.rb
但我想分发它,所以我选择了 OCRA,它为我构建了一个 exe 文件,这样用户就可以 运行 它而无需 ruby 或其软件包安装。
所以我 运行 ocra my_program.rb --windows
它给了我一个很好的 exe 文件,叫做 my_program.exe
。
问题: 当我启动 my_program.exe
时,加载程序需要 25 到 30 秒。
系统托盘图标需要 1 秒,打包为 exe 文件时需要 30 倍以上才能启动。
是否有任何可能的方法来减少此加载时间。非常感谢你提前。
编辑: 提醒后,我将 ocra exe 创建更改为 ocra my_program.rb --windows --no-lzma
。这个解决方案为我节省了 10 秒,现在程序加载大约需要 18-20 秒。
我可以优化它以缩短加载时间吗?请帮忙。
请在此处查看相关主题的讨论:
http://programming.nullanswer.com/question/28323543
可能会有帮助。
粘贴一个使用 gtk2 启动系统托盘图标的小示例 gem。
#!/usr/bin/env ruby
# encoding: UTF-8
require 'gtk2'
si=Gtk::StatusIcon.new
si.stock=Gtk::Stock::DIALOG_INFO
si.tooltip='StatusIcon'
si.signal_connect('activate'){|icon| icon.blinking=!(icon.blinking?)}
info=Gtk::ImageMenuItem.new(Gtk::Stock::INFO)
info.signal_connect('activate'){p "Embedded: #{si.embedded?}"; p "Visible: #{si.visible?}"; p "Blinking: #{si.blinking?}"}
quit=Gtk::ImageMenuItem.new(Gtk::Stock::QUIT)
quit.signal_connect('activate'){Gtk.main_quit}
menu=Gtk::Menu.new
menu.append(info)
menu.append(Gtk::SeparatorMenuItem.new)
menu.append(quit)
menu.show_all
si.signal_connect('popup-menu'){|tray, button, time| menu.popup(nil, nil, button, time)}
si.signal_connect('scroll-event'){|icon, event|
modifier=event.state#A GdkModifierType indicating the state of modifier keys and mouse buttons
##Handle only control and shift key
ctrl_shift=(Gdk::Window::CONTROL_MASK|Gdk::Window::SHIFT_MASK)
mod=modifier&ctrl_shift
case mod
when 0
print "(None)"
when Gdk::Window::CONTROL_MASK
print "Control+"
when Gdk::Window::SHIFT_MASK
print "Shift+"
when (Gdk::Window::CONTROL_MASK|Gdk::Window::SHIFT_MASK)
print "Control+Shift+"
end
##Check for direction
case event.direction
when Gdk::EventScroll::UP
print "up\n"
when Gdk::EventScroll::DOWN
print "down\n"
end
}
exit if defined?(Ocra)
Gtk.main
如果我 运行 它作为 ruby 脚本,即 ruby my_program.rb
但我想分发它,所以我选择了 OCRA,它为我构建了一个 exe 文件,这样用户就可以 运行 它而无需 ruby 或其软件包安装。
所以我 运行 ocra my_program.rb --windows
它给了我一个很好的 exe 文件,叫做 my_program.exe
。
问题: 当我启动 my_program.exe
时,加载程序需要 25 到 30 秒。
系统托盘图标需要 1 秒,打包为 exe 文件时需要 30 倍以上才能启动。
是否有任何可能的方法来减少此加载时间。非常感谢你提前。
编辑: 提醒后,我将 ocra exe 创建更改为 ocra my_program.rb --windows --no-lzma
。这个解决方案为我节省了 10 秒,现在程序加载大约需要 18-20 秒。
我可以优化它以缩短加载时间吗?请帮忙。
请在此处查看相关主题的讨论:
http://programming.nullanswer.com/question/28323543
可能会有帮助。