Fasterer: Parallel assignment is slower

Parallel assignment is slower than sequential assignment.
Only got the low hanging fruit. There are some functions that
have multiple return values. Fixing this needs more refactoring.
This commit is contained in:
Reinier Balt 2015-08-19 15:12:52 +02:00
parent 9f81e1a5c3
commit 5092b388fe
4 changed files with 63 additions and 47 deletions

View file

@ -40,18 +40,21 @@ class TodosController < ApplicationController
cookies[:mobile_url]= { :value => request.fullpath, :secure => SITE_CONFIG['secure_cookies']} cookies[:mobile_url]= { :value => request.fullpath, :secure => SITE_CONFIG['secure_cookies']}
determine_down_count determine_down_count
render :action => 'index' render :action => 'index'.freeze
end end
format.text do format.text do
# somehow passing Mime::TEXT using content_type to render does not work # somehow passing Mime::TEXT using content_type to render does not work
headers['Content-Type']=Mime::TEXT.to_s headers['Content-Type'.freeze]=Mime::TEXT.to_s
render :content_type => Mime::TEXT render :content_type => Mime::TEXT
end end
format.xml do format.xml do
@xml_todos = params[:limit_to_active_todos] ? @not_done_todos : @todos @xml_todos = params[:limit_to_active_todos] ? @not_done_todos : @todos
render :xml => @xml_todos.to_xml( *todo_xml_params ) render :xml => @xml_todos.to_xml( *todo_xml_params )
end end
format.any(:rss, :atom) { @feed_title, @feed_description = 'Tracks Actions', "Actions for #{current_user.display_name}" } format.any(:rss, :atom) do
@feed_title = 'Tracks Actions'.freeze
@feed_description = "Actions for #{current_user.display_name}"
end
format.ics format.ics
end end
end end
@ -156,7 +159,10 @@ class TodosController < ApplicationController
p = Todos::TodoCreateParamsHelper.new(params, current_user) p = Todos::TodoCreateParamsHelper.new(params, current_user)
tag_list = p.tag_list tag_list = p.tag_list
@not_done_todos, @build_todos, @todos, errors = [], [], [], [] @not_done_todos = []
@build_todos = []
@todos = []
errors = []
@predecessor = nil @predecessor = nil
validates = true validates = true
@ -887,13 +893,15 @@ class TodosController < ApplicationController
elsif params[:format].nil? elsif params[:format].nil?
# if no format is given, default to html # if no format is given, default to html
# note that if url has ?format=m, we should not overwrite it here # note that if url has ?format=m, we should not overwrite it here
request.format, params[:format] = :html, :html request.format = :html
params[:format] = :html
end end
end end
def set_format_for_tag_view(format) def set_format_for_tag_view(format)
# tag name ends with .m, set format to :m en remove .m from name # tag name ends with .m, set format to :m en remove .m from name
request.format, params[:format] = format, format request.format = format
params[:format] = format
params[:name] = params[:name].chomp(".#{format.to_s}") params[:name] = params[:name].chomp(".#{format.to_s}")
end end

View file

@ -25,7 +25,8 @@ module ProjectsHelper
end end
def project_next_prev_mobile def project_next_prev_mobile
prev_project,next_project= "", "" prev_project = ""
next_project = ""
prev_project = content_tag(:li, link_to_project_mobile(@previous_project, "5", @previous_project.shortened_name), :class=>"prev") if @previous_project prev_project = content_tag(:li, link_to_project_mobile(@previous_project, "5", @previous_project.shortened_name), :class=>"prev") if @previous_project
next_project = content_tag(:li, link_to_project_mobile(@next_project, "6", @next_project.shortened_name), :class=>"next") if @next_project next_project = content_tag(:li, link_to_project_mobile(@next_project, "6", @next_project.shortened_name), :class=>"next") if @next_project
return content_tag(:ul, "#{prev_project}#{next_project}".html_safe, :class=>"next-prev-project") return content_tag(:ul, "#{prev_project}#{next_project}".html_safe, :class=>"next-prev-project")

View file

@ -9,7 +9,7 @@ module LoginSystem
def prefs def prefs
current_user.prefs unless current_user.nil? current_user.prefs unless current_user.nil?
end end
# Logout the {#current_user} and redirect to login page # Logout the {#current_user} and redirect to login page
# #
# @param [String] message notification to display # @param [String] message notification to display
@ -25,9 +25,9 @@ module LoginSystem
redirect_to_login redirect_to_login
end end
end end
protected protected
# overwrite this if you want to restrict access to only a few actions # overwrite this if you want to restrict access to only a few actions
# or if you want to check if the user has the correct rights # or if you want to check if the user has the correct rights
# example: # example:
@ -39,7 +39,7 @@ module LoginSystem
def authorize?(user) def authorize?(user)
true true
end end
# overwrite this method if you only want to protect certain actions of the controller # overwrite this method if you only want to protect certain actions of the controller
# example: # example:
# #
@ -54,7 +54,7 @@ module LoginSystem
def protect?(action) def protect?(action)
true true
end end
# When called with before_filter :login_from_cookie will check for an :auth_token # When called with before_filter :login_from_cookie will check for an :auth_token
# cookie and log the user back in if appropriate # cookie and log the user back in if appropriate
def login_from_cookie def login_from_cookie
@ -69,7 +69,7 @@ module LoginSystem
flash[:notice] = t('login.successful') flash[:notice] = t('login.successful')
end end
end end
def login_or_feed_token_required def login_or_feed_token_required
if ['rss', 'atom', 'txt', 'ics'].include?(params[:format]) if ['rss', 'atom', 'txt', 'ics'].include?(params[:format])
if user = User.where(:token => params[:token]).first if user = User.where(:token => params[:token]).first
@ -79,7 +79,7 @@ module LoginSystem
end end
login_required login_required
end end
# login_required filter. add # login_required filter. add
# #
# before_filter :login_required # before_filter :login_required
@ -90,19 +90,19 @@ module LoginSystem
# def authorize?(user) # def authorize?(user)
# #
def login_required def login_required
if not protect?(action_name) if not protect?(action_name)
return true return true
end end
login_from_cookie login_from_cookie
if session['user_id'] and authorize?(get_current_user) if session['user_id'] and authorize?(get_current_user)
return true return true
end end
http_user, http_pass = get_basic_auth_data auth = get_basic_auth_data
if user = User.authenticate(http_user, http_pass) if user = User.authenticate(auth[:user], auth[:pass])
session['user_id'] = user.id session['user_id'] = user.id
set_current_user(user) set_current_user(user)
return true return true
@ -111,22 +111,22 @@ module LoginSystem
# store current location so that we can # store current location so that we can
# come back after the user logged in # come back after the user logged in
store_location unless params[:format] == 'js' store_location unless params[:format] == 'js'
# call overwriteable reaction to unauthorized access # call overwriteable reaction to unauthorized access
access_denied access_denied
return false return false
end end
def login_optional def login_optional
login_from_cookie login_from_cookie
if session['user_id'] and authorize?(get_current_user) if session['user_id'] and authorize?(get_current_user)
return true return true
end end
http_user, http_pass = get_basic_auth_data auth = get_basic_auth_data
if user = User.authenticate(http_user, http_pass) if user = User.authenticate(auth[:user], auth[:pass])
session['user_id'] = user.id session['user_id'] = user.id
set_current_user(user) set_current_user(user)
return true return true
@ -134,22 +134,22 @@ module LoginSystem
return true return true
end end
def logged_in? def logged_in?
current_user != nil current_user != nil
end end
def get_current_user def get_current_user
if @user.nil? && session['user_id'] if @user.nil? && session['user_id']
@user = User.find(session['user_id']) @user = User.find(session['user_id'])
end end
@user @user
end end
def set_current_user(user) def set_current_user(user)
@user = user @user = user
end end
# overwrite if you want to have special behavior in case the user is not authorized # overwrite if you want to have special behavior in case the user is not authorized
# to access the current operation. # to access the current operation.
# the default action is to redirect to the login screen # the default action is to redirect to the login screen
@ -179,28 +179,34 @@ module LoginSystem
session['return-to'] = nil session['return-to'] = nil
end end
end end
# HTTP Basic auth code adapted from Coda Hale's simple_http_auth plugin. Thanks, Coda! # HTTP Basic auth code adapted from Coda Hale's simple_http_auth plugin. Thanks, Coda!
def get_basic_auth_data def get_basic_auth_data
auth_locations = ['REDIRECT_REDIRECT_X_HTTP_AUTHORIZATION', auth_locations = ['REDIRECT_REDIRECT_X_HTTP_AUTHORIZATION',
'REDIRECT_X_HTTP_AUTHORIZATION', 'REDIRECT_X_HTTP_AUTHORIZATION',
'X-HTTP_AUTHORIZATION', 'HTTP_AUTHORIZATION'] 'X-HTTP_AUTHORIZATION', 'HTTP_AUTHORIZATION']
authdata = nil authdata = nil
for location in auth_locations auth_locations.each do |location|
if request.env.has_key?(location) if request.env.has_key?(location)
authdata = request.env[location].to_s.split authdata = request.env[location].to_s.split
end end
end end
if authdata and authdata[0] == 'Basic' if authdata and authdata[0] == 'Basic'
user, pass = Base64.decode64(authdata[1]).split(':')[0..1] data = Base64.decode64(authdata[1]).split(':')[0..1]
return {
user: data[0],
pass: data[1]
}
else else
user, pass = ['', ''] return {
user: ''.freeze,
pass: ''.freeze
}
end end
return user, pass
end end
def basic_auth_denied def basic_auth_denied
response.headers["WWW-Authenticate"] = "Basic realm=\"'Tracks Login Required'\"" response.headers["WWW-Authenticate"] = "Basic realm=\"'Tracks Login Required'\""
render :text => t('login.unsuccessful'), :status => 401 render :text => t('login.unsuccessful'), :status => 401
@ -216,4 +222,4 @@ private
end end
end end
end end

View file

@ -4,13 +4,14 @@ module Tracks
class Utils class Utils
AUTO_LINK_MESSAGE_RE = %r{message://<[^>]+>} unless const_defined?(:AUTO_LINK_MESSAGE_RE) AUTO_LINK_MESSAGE_RE = %r{message://<[^>]+>} unless const_defined?(:AUTO_LINK_MESSAGE_RE)
# Converts message:// links to href. This URL scheme is used on Mac OS X # Converts message:// links to href. This URL scheme is used on Mac OS X
# to link to a mail message in Mail.app. # to link to a mail message in Mail.app.
def self.auto_link_message(text) def self.auto_link_message(text)
text.gsub(AUTO_LINK_MESSAGE_RE) do text.gsub(AUTO_LINK_MESSAGE_RE) do
href = $& href = $&
left, right = $`, $' left = $`
right = $'
# detect already linked URLs and URLs in the middle of a tag # detect already linked URLs and URLs in the middle of a tag
if left =~ /<[^>]+$/ && right =~ /^[^>]*>/ if left =~ /<[^>]+$/ && right =~ /^[^>]*>/
# do not change string; URL is alreay linked # do not change string; URL is alreay linked
@ -30,25 +31,25 @@ module Tracks
config = Sanitize::Config.merge(Sanitize::Config::RELAXED, config = Sanitize::Config.merge(Sanitize::Config::RELAXED,
:protocols => { 'a' => {'href' => Sanitize::Config::RELAXED[:protocols]['a']['href'] + ['onenote', 'message']}} :protocols => { 'a' => {'href' => Sanitize::Config::RELAXED[:protocols]['a']['href'] + ['onenote', 'message']}}
) )
rendered = Sanitize.clean(rendered, config) rendered = Sanitize.clean(rendered, config)
return rendered.html_safe return rendered.html_safe
end end
def self.textile(text) def self.textile(text)
RedCloth.new(text).to_html RedCloth.new(text).to_html
end end
def self.sanitize_filename(filename) def self.sanitize_filename(filename)
filename.gsub(/[^0-9A-z.\-]/, '_') filename.gsub(/[^0-9A-z.\-]/, '_')
end end
private private
def self.helpers def self.helpers
ActionController::Base.helpers ActionController::Base.helpers
end end
end end
end end