【问题标题】:How to make my home page very fast?如何让我的主页变得非常快?
【发布时间】:2011-10-01 10:40:04
【问题描述】:

它有效,我想让它超快。 index page 非常静态,除非日期更新或地图更新,否则几天内不会真正改变。所以应该可以优化到非常快,因为它变化不大。我最近迁移到 HRD,我的 URI 是 montaoproject.appspot.com 我重写了这个,所以它只有 python 和 django / html(没有数据层之旅。) Memcache?其他选择?减少javascript?我首先确保没有触及数据层:

def get(self):
    logo = ''
    if get_host().find('.br') > 0:
        cookie_django_language = 'pt-br'
        logo = 'montao'
    elif get_host().find('allt') > 0 and not self.request.get('hl'):
        logo = ''
        cookie_django_language = 'sv'
    elif get_host().find('gralumo') > 0 \
        and not self.request.get('hl'):
        cookie_django_language = 'es_AR'  # learn
    else:
        logo = ''
        cookie_django_language = self.request.get('hl', '')  # edit
    if cookie_django_language:
        if cookie_django_language == 'unset':
            del self.request.COOKIES['django_language']
        else:
            self.request.COOKIES['django_language'] = \
                cookie_django_language
        translation.activate(cookie_django_language)
    loginmsg = ''
    user = users.get_current_user()
    twittername = None
    client = OAuthClient('twitter', self)
    if client.get_cookie():
        info = client.get('/account/verify_credentials')
        twittername = info['screen_name']

    # seconds_valid = 8600
    # self.response.headers['Cache-Control'] = "public, max-age=%d" % seconds_valid

    if logo == 'montao':
        self.render(
            u'montao',
            host=get_host(),
            twittername=twittername,
            continue_url=get_host(),
            loginmsg=loginmsg,
            form_url=blobstore.create_upload_url('/fileupload'),
            user_url=(api.users.create_logout_url(self.request.uri) if api.users.get_current_user() else api.users.create_login_url(self.request.uri)),
            admin=users.is_current_user_admin(),
            user=(users.get_current_user() if users.get_current_user() else ''
                  ),
            logo=logo,
            )
    else:
        self.render(
            u'home',
            host=get_host(),
            twittername=twittername,
            continue_url=get_host(),
            loginmsg=loginmsg,
            form_url=blobstore.create_upload_url('/fileupload'),
            latest=Ad.all().filter('published =',
                    True).order('-modified').get(),
            user_url=(api.users.create_logout_url(self.request.uri) if api.users.get_current_user() else api.users.create_login_url(self.request.uri)),
            admin=users.is_current_user_admin(),
            guser=(users.get_current_user() if users.get_current_user() else ''
                   ),
            logo=logo,
            )

【问题讨论】:

  • 如果您使用的是 Django,您是否考虑过阅读有关缓存的 Django 文档? docs.djangoproject.com/en/dev/topics/cache。如果您不使用 django,您是否考虑过使用像 Varnish 这样的现成缓存工具?

标签: python google-app-engine caching memcached gzip


【解决方案1】:

我不知道python,但如果它几天都没有改变,我相信你可以写一些东西把上面的内容转换成HTML(比如每小时),然后只提供HTML版本。这将为您提供最大的优化之一,因为您的主页根本不必由脚本引擎处理。

【讨论】:

  • 是的,我可以让我的 cron 作业生成一个 html 文件。我想那会很快。非常感谢您的洞察力。它可能需要处理,因为它使用 django 来选择语言翻译,这些翻译是文件中的代码,例如 django.po,以便参数可以指示语言,即希腊语的 hl=el
  • 好的,你的主页可以是一个 django 脚本,它会重定向到你支持的每一种语言(index_en.html、index_de.html 等)。您需要每小时为每种不同的语言重新生成,但这对服务器来说并没有太大的负载。结果仍然比使用脚本构建每个页面要快。
  • 优秀。我只需要翻译,而且我可以用静态 html 代替 django 翻译。
【解决方案2】:

通常,我建议反转页面,将 index.html 作为静态文件以及 css 和 js 文件,然后向服务器发出 AJAX 请求以填充动态位。静态文件加载速度非常快。

您仍然可以通过使用客户端 JavaScript 来确定要使用哪个徽标等来实现这一点,但是渲染文件上传表单会更慢,因为需要发生 create_upload_url服务器端。

【讨论】:

  • 对于基本功能,我认为我可以将所有内容都设为静态。我只需要翻译,而且我可以使用静态 html 而不是 django 翻译。 create_upload_url 我可以转到另一个真正需要脚本的页面。我认为最快的方法是使用 ETag 或类似方法将所有内容设为静态和缓存。动态位就像每日更新+logged_in_user.name,这些不是基本功能。我也不需要登录用户的欢迎消息“欢迎,{{logged_in_user.name}}` 是不必要的糖果,因为我可以让它更快。或者使用 AJAX 编写欢迎消息。
  • 我不认为修改用户浏览器必须执行的操作以适应相当随意的(“静态”与“动态”)服务器端区别是一个好主意。相反,您可以在服务器端预渲染内容,并以极低的延迟将其提供给用户 - 请参阅主题上的 my article 以获取示例。
  • 尼克和我对此进行了讨论,并同意不同意。如果没有要应对的服务器启动,预渲染就可以了。如果您的站点获得足够的流量,并且始终存在实时实例,则可以进行预渲染。另一方面,快速加载静态内容给人一种快速响应的错觉。选择适合您的任何方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2018-08-23
  • 1970-01-01
  • 2015-05-08
  • 2019-09-19
相关资源
最近更新 更多