#123 Excesivo tiempo de generación

Open
opened 1 year ago by jorgesumle · 3 comments

El sitio web tarda bastante en generarse:

Done: Processed 33 articles, 0 drafts, 0 hidden articles, 2 pages, 9 hidden pages and 0 draft pages in 
2.40 seconds.
Done: Processed 35 articles, 0 drafts, 0 hidden articles, 2 pages, 9 hidden pages and 0 draft pages in 
4.51 seconds.
Done: Processed 81 articles, 0 drafts, 0 hidden articles, 3 pages, 9 hidden pages and 0 draft pages in 
7.22 seconds.
Done: Processed 34 articles, 0 drafts, 0 hidden articles, 1 page, 19 hidden pages and 0 draft pages in 
9.26 seconds.
Done: Processed 1 article, 0 drafts, 0 hidden articles, 0 pages, 19 hidden pages and 0 draft pages in 
11.03 seconds.
Done: Processed 185 articles, 0 drafts, 0 hidden articles, 3 pages, 8 hidden pages and 0 draft pages in 
17.83 seconds.

Para disminuir el tiempo de generación se podría usar otro lenguaje de programación más eficiente que Python, como Rust. Hay un programa para generar sitios web estáticos llamado Zola que permite generar sitios multilingües.

El sitio web tarda bastante en generarse: ``` Done: Processed 33 articles, 0 drafts, 0 hidden articles, 2 pages, 9 hidden pages and 0 draft pages in 2.40 seconds. Done: Processed 35 articles, 0 drafts, 0 hidden articles, 2 pages, 9 hidden pages and 0 draft pages in 4.51 seconds. Done: Processed 81 articles, 0 drafts, 0 hidden articles, 3 pages, 9 hidden pages and 0 draft pages in 7.22 seconds. Done: Processed 34 articles, 0 drafts, 0 hidden articles, 1 page, 19 hidden pages and 0 draft pages in 9.26 seconds. Done: Processed 1 article, 0 drafts, 0 hidden articles, 0 pages, 19 hidden pages and 0 draft pages in 11.03 seconds. Done: Processed 185 articles, 0 drafts, 0 hidden articles, 3 pages, 8 hidden pages and 0 draft pages in 17.83 seconds. ``` Para disminuir el tiempo de generación se podría usar otro lenguaje de programación más eficiente que Python, como Rust. Hay un programa para generar sitios web estáticos llamado [Zola](https://www.getzola.org/) que permite generar sitios multilingües.

El tiempo de generación con Zola se reduce un montón:

Building site...
Checking all internal links with anchors.
> Successfully checked 9 internal link(s) with anchors.
-> Creating 370 pages (0 orphan) and 5 sections
Done in 614ms.

Para migrar los metadatos de los artículos al formato de Zola se puede usar el siguiente programa:

#!/usr/bin/env python3

import os
import re

direct ='/var/www/html/Repositorios/Freak-Spot/content/'

for file in os.listdir(direct):
    if os.path.isfile(os.path.join(direct, file)) and file[-3:] == '.md':
        with open(os.path.join(direct, file)) as f:
            lineas = f.read()

            rc_title = re.compile('Title: (.*)')
            r_title = rc_title.search(lineas)
            title = r_title.group(1)

            rc_autor = re.compile('Author: (.*)')
            r_autor = rc_autor.search(lineas)
            autor = r_autor.group(1)

            rc_categoria = re.compile('Category: (.*)')
            r_categoria = rc_categoria.search(lineas)
            categoria = r_categoria.group(1)

            rc_etiquetas = re.compile('Tags: (.*)')
            r_etiquetas = rc_etiquetas.search(lineas)
            etiquetas = r_etiquetas.group(1)

            rc_date = re.compile('Date: ([0123456789-]+) ([0123456789:]+)')
            r_date = rc_date.search(lineas)
            if not r_date:
                rc_date = re.compile('Date: ([0123456789-]+)')
                r_date = rc_date.search(lineas)
                date = r_date.group(1) + 'T00:00:00Z'
            else:
                date = r_date.group(1) + 'T' + r_date.group(2) + ':00Z'

            rc_updated = re.compile('Modified: ([0123456789-]+) ([0123456789:]+)')
            r_updated = rc_updated.search(lineas)
            is_updated = False
            if not r_updated:
                rc_updated = re.compile('Modified: ([0123456789-]+)')
                r_updated = rc_updated.search(lineas)
                if r_updated:
                    updated = r_updated.group(1) + 'T00:00:00Z'
                    is_updated = True
            else:
                if r_updated:
                    updated = r_updated.group(1) + 'T' + r_updated.group(2) + ':00Z'
                    is_updated = True

            rc_url = re.compile('URL: (.*)/')
            r_url = rc_url.search(lineas)
            if not r_url:
                rc_url = re.compile('Slug: (.*)')
                r_url = rc_url.search(lineas)
            url = r_url.group(1)

            lista_etiq = etiquetas.split(',')

            texto = ''
            limite = False
            lineas_list = lineas.splitlines()
            for linea in lineas_list:
                if not linea:
                    limite = True
                if limite:
                    texto += linea + '\n'


            cabecera = '---\n'
            cabecera += "title: '{}'".format(title) + '\n'
            cabecera += 'slug: "{}"'.format(url) + '\n'
            cabecera += 'date: "{}"'.format(date) + '\n'
            if is_updated:
                cabecera += 'updated: "{}"'.format(updated) + '\n'

            cabecera += 'taxonomies:' + '\n'
            cabecera += ' autor:' + '\n'
            cabecera += ' - ' + autor + '\n'
            cabecera += ' etiqueta:' + '\n'
            for etiq in lista_etiq:
                cabecera += ' - ' + etiq.lstrip() + '\n'
            cabecera += ' categoría:' + '\n'
            cabecera += ' - ' + categoria + '\n'
            cabecera += '---'

            salida = open('pelican/' + file, 'w')
            salida.write(cabecera + texto)
            salida.close()
El tiempo de generación con Zola se reduce un montón: ``` Building site... Checking all internal links with anchors. > Successfully checked 9 internal link(s) with anchors. -> Creating 370 pages (0 orphan) and 5 sections Done in 614ms. ``` Para migrar los metadatos de los artículos al formato de Zola se puede usar el siguiente programa: ``` #!/usr/bin/env python3 import os import re direct ='/var/www/html/Repositorios/Freak-Spot/content/' for file in os.listdir(direct): if os.path.isfile(os.path.join(direct, file)) and file[-3:] == '.md': with open(os.path.join(direct, file)) as f: lineas = f.read() rc_title = re.compile('Title: (.*)') r_title = rc_title.search(lineas) title = r_title.group(1) rc_autor = re.compile('Author: (.*)') r_autor = rc_autor.search(lineas) autor = r_autor.group(1) rc_categoria = re.compile('Category: (.*)') r_categoria = rc_categoria.search(lineas) categoria = r_categoria.group(1) rc_etiquetas = re.compile('Tags: (.*)') r_etiquetas = rc_etiquetas.search(lineas) etiquetas = r_etiquetas.group(1) rc_date = re.compile('Date: ([0123456789-]+) ([0123456789:]+)') r_date = rc_date.search(lineas) if not r_date: rc_date = re.compile('Date: ([0123456789-]+)') r_date = rc_date.search(lineas) date = r_date.group(1) + 'T00:00:00Z' else: date = r_date.group(1) + 'T' + r_date.group(2) + ':00Z' rc_updated = re.compile('Modified: ([0123456789-]+) ([0123456789:]+)') r_updated = rc_updated.search(lineas) is_updated = False if not r_updated: rc_updated = re.compile('Modified: ([0123456789-]+)') r_updated = rc_updated.search(lineas) if r_updated: updated = r_updated.group(1) + 'T00:00:00Z' is_updated = True else: if r_updated: updated = r_updated.group(1) + 'T' + r_updated.group(2) + ':00Z' is_updated = True rc_url = re.compile('URL: (.*)/') r_url = rc_url.search(lineas) if not r_url: rc_url = re.compile('Slug: (.*)') r_url = rc_url.search(lineas) url = r_url.group(1) lista_etiq = etiquetas.split(',') texto = '' limite = False lineas_list = lineas.splitlines() for linea in lineas_list: if not linea: limite = True if limite: texto += linea + '\n' cabecera = '---\n' cabecera += "title: '{}'".format(title) + '\n' cabecera += 'slug: "{}"'.format(url) + '\n' cabecera += 'date: "{}"'.format(date) + '\n' if is_updated: cabecera += 'updated: "{}"'.format(updated) + '\n' cabecera += 'taxonomies:' + '\n' cabecera += ' autor:' + '\n' cabecera += ' - ' + autor + '\n' cabecera += ' etiqueta:' + '\n' for etiq in lista_etiq: cabecera += ' - ' + etiq.lstrip() + '\n' cabecera += ' categoría:' + '\n' cabecera += ' - ' + categoria + '\n' cabecera += '---' salida = open('pelican/' + file, 'w') salida.write(cabecera + texto) salida.close() ```

Cambiar de generador no es nada fácil. Zola no permite hacer algunas cosas que con Pelican sí puedo:

  • Complementos para internacionalizar el sitio web (gettext)
  • Complemento para crear nube de etiquetas
  • Complemento para acceder a artículos adyacentes
Cambiar de generador no es nada fácil. Zola no permite hacer algunas cosas que con Pelican sí puedo: - Complementos para internacionalizar el sitio web (gettext) - Complemento para crear nube de etiquetas - Complemento para acceder a artículos adyacentes

Cuando añado código más complejo en el tema, similar al que se usa con Pelican, el ahorro en la generación del sitio no supone demasiado:

Checking all internal links with anchors.
> Successfully checked 9 internal link(s) with anchors.
-> Creating 370 pages (0 orphan) and 5 sections
Done in 7.3s.

Quizá lo mejor sería usar un lenguaje del lado del servidor y usar caché.

Cuando añado código más complejo en el tema, similar al que se usa con Pelican, el ahorro en la generación del sitio no supone demasiado: ``` Checking all internal links with anchors. > Successfully checked 9 internal link(s) with anchors. -> Creating 370 pages (0 orphan) and 5 sections Done in 7.3s. ``` Quizá lo mejor sería usar un lenguaje del lado del servidor y usar caché.
Sign in to join this conversation.
Loading...
Cancel
Save
There is no content yet.