Как я могу оптимизировать этот Код двигателя Google App?

Я относительно плохо знаком с миром Python, но это кажется очень прямым.

Google вопит на меня, что этот код должен быть оптимизирован:

class AddLinks(webapp.RequestHandler):
     def post(self):
          # Hash the textarea input to generate pseudo-unique value
          hash = md5.new(self.request.get('links')).hexdigest()

          # Seperate the input by line
          allLinks = self.request.get('links').splitlines()

          # For each line in the input, add to the database
          for x in allLinks:
               newGroup = LinkGrouping()
               newGroup.reference = hash
               newGroup.link = x
               newGroup.put()

          # testing vs live
          #baseURL = 'http://localhost:8080'
          baseURL = 'http://linkabyss.appspot.com'

          # Build template parameters
          template_values = {
               'all_links': allLinks,
               'base_url': baseURL,
               'reference': hash,
          }

          # Output the template
          path = os.path.join(os.path.dirname(__file__), 'addLinks.html')
          self.response.out.write(template.render(path, template_values))   

Панель инструментов говорит мне, что это использует тонну ЦП.

Где я должен искать улучшения?

5
задан 2 revs, 2 users 99% 8 October 2019 в 11:05
поделиться

6 ответов

Основные издержки здесь являются несколькими, которые человек помещает в хранилище данных. Если Вы можете, сохранить ссылки как единственный объект, как Andre предполагает. Можно всегда разделять ссылки на массив и хранить его в ListProperty.

При необходимости в объекте для каждой ссылки попробуйте это:

# For each line in the input, add to the database
groups = []
for x in allLinks:
     newGroup = LinkGrouping()
     newGroup.reference = hash
     newGroup.link = x
     groups.append(newGroup)
db.put(groups)

Это уменьшит распространения в прямом и обратном направлениях хранилища данных до одного, и это - распространения в прямом и обратном направлениях, которые действительно уничтожают Ваше высокое ограничение ЦП.

7
ответ дан 13 December 2019 в 05:44
поделиться

Выглядит довольно трудным мне.

Я вижу одну вещь, которая может сделать маленькое улучшение. Ваш вызов, "self.request.get ('ссылки')" дважды.

Так добавление:

unsplitlinks = self.request.get('links')

И ссылка, "unsplitlinks" мог помочь.

Кроме этого цикл является единственной областью, я вижу, что это было бы целью для оптимизации. Действительно ли возможно подготовить данные и затем добавить, что это к дб сразу, вместо того, чтобы делать дб добавляет на ссылку? (Я принимаю .put (), команда добавляет ссылку к базе данных),

3
ответ дан 13 December 2019 в 05:44
поделиться

никакие / Вы не можете использовать что-то как "links.contains ('http://www.google.com')" GQL не, не поддерживают это

0
ответ дан 13 December 2019 в 05:44
поделиться

Я могу запросить против ListProperty?

Что-то как

SELECT * FROM LinkGrouping WHERE links.contains('http://www.google.com')

У меня есть будущие планы, где мне была бы нужна та функциональность.

Я определенно реализую единственный db.put () для сокращения использования.

0
ответ дан 13 December 2019 в 05:44
поделиться

Как часто это называет? Это не смотрит что плохо... особенно после удаления дублирующегося запроса.

0
ответ дан 13 December 2019 в 05:44
поделиться

Можно существенно уменьшить взаимодействие между приложением и базой данных, просто храня полное self.request.get('links') в текстовом поле в базе данных.

  • только один put() на post(self)
  • хеш не является сохраненными n-временами (для каждой ссылки, которая не имеет никакого смысла и является действительно тратой пространства),

И Вы сохраняете себя парсинг текстового поля, когда кто-то на самом деле называет страницу....

2
ответ дан 13 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: