Merge branch 'lectura-de-jekyll' into 'rails'

optimizar la lectura de datos desde jekyll

See merge request sutty/sutty!25
This commit is contained in:
Maki 2021-05-08 20:05:34 +00:00
commit f2981a6a45
2 changed files with 47 additions and 27 deletions

View file

@ -175,30 +175,17 @@ class Site < ApplicationRecord
end end
alias default_lang default_locale alias default_lang default_locale
def read?
@read ||= false
end
# Lee el sitio y todos los artículos
def read
# No hacer nada si ya se leyó antes
return if read?
@jekyll.read
@read = true
end
# Trae los datos del directorio _data dentro del sitio # Trae los datos del directorio _data dentro del sitio
#
# XXX: Leer directamente sin pasar por Jekyll
def data def data
read unless @jekyll.data.present?
@jekyll.reader.read_data
# Define los valores por defecto según la llave buscada # Define los valores por defecto según la llave buscada
@jekyll.data.default_proc = proc do |data, key| @jekyll.data.default_proc = proc do |data, key|
data[key] = case key data[key] = case key
when 'layout' then {} when 'layout' then {}
end end
end
end end
@jekyll.data @jekyll.data
@ -207,7 +194,10 @@ class Site < ApplicationRecord
# Traer las colecciones. Todos los artículos van a estar dentro de # Traer las colecciones. Todos los artículos van a estar dentro de
# colecciones. # colecciones.
def collections def collections
read unless @read
@jekyll.reader.read_collections
@read = true
end
@jekyll.collections @jekyll.collections
end end
@ -221,8 +211,6 @@ class Site < ApplicationRecord
# #
# @param lang: [String|Symbol] traer los artículos de este idioma # @param lang: [String|Symbol] traer los artículos de este idioma
def posts(lang: nil) def posts(lang: nil)
read
# Traemos los posts del idioma actual por defecto o el que haya # Traemos los posts del idioma actual por defecto o el que haya
lang ||= locales.include?(I18n.locale) ? I18n.locale : default_locale lang ||= locales.include?(I18n.locale) ? I18n.locale : default_locale
lang = lang.to_sym lang = lang.to_sym

View file

@ -32,31 +32,52 @@ module ActionDispatch
end end
# Lazy Loading de Jekyll, deshabilitando la instanciación de elementos # Lazy Loading de Jekyll, deshabilitando la instanciación de elementos
# que no necesitamos # que no necesitamos. Esto permite que podamos leer el sitio por partes
# en lugar de todo junto.
# #
# TODO: Aplicar monkey patches en otro lado... # TODO: Aplicar monkey patches en otro lado...
module Jekyll module Jekyll
Reader.class_eval do Reader.class_eval do
# No necesitamos otros posts
def retrieve_posts(_); end def retrieve_posts(_); end
# No necesitamos otros directorios
def retrieve_dirs(_, _, _); end def retrieve_dirs(_, _, _); end
# No necesitamos las páginas
def retrieve_pages(_, _); end def retrieve_pages(_, _); end
# No necesitamos los archivos estáticos
def retrieve_static_files(_, _); end def retrieve_static_files(_, _); end
# Solo lee los datos
def read_data
@site.data = DataReader.new(site).read(site.config["data_dir"])
end
# Lee todos los artículos del sitio
def read_collections
read_directories
read_included_excludes
sort_files!
CollectionReader.new(site).read
end
end end
# No necesitamos los archivos de la plantilla
ThemeAssetsReader.class_eval do ThemeAssetsReader.class_eval do
def read; end def read; end
end end
# Prevenir la lectura del documento # Aplazar la lectura del documento
Document.class_eval do Document.class_eval do
alias_method :read!, :read alias_method :read!, :read
def read; end def read; end
end end
# https://github.com/jekyll/jekyll/pull/8425 # Prevenir la instanciación de Time
#
# @see {https://github.com/jekyll/jekyll/pull/8425}
Utils.class_eval do Utils.class_eval do
def parse_date(input, msg = 'Input could not be parsed.') def parse_date(input, msg = 'Input could not be parsed.')
@parse_date_cache ||= {} @parse_date_cache ||= {}
@ -66,3 +87,14 @@ module Jekyll
end end
end end
end end
# JekyllData::Reader del plugin jekyll-data modifica Jekyll::Site#reader
# para también leer los datos que vienen en el theme.
module JekyllData
Reader.class_eval do
def read_data
super
read_theme_data
end
end
end