如果我需要做更多其他事情来提高我的webapp的性能,需要一些想法和建议

时间:2010-12-29 20:25:57

标签: php ajax performance memcached gzip

我正在开发一个使用大量ajax来显示数据的webapp,我想知道我是否可以就如何加快应用程序,减少带宽等方面提出任何建议。

我在我的环境中使用php,mysql,freeBSD,Apache,Tomcat。我拥有服务器,可以完全访问所有配置文件等。

我在apache http.conf文件中打开了gzip deflate压缩。我对所有.js和.css文件进行了混淆和缩小。

我的webapp以这种一般方式工作。登录后,用户登陆index.php页面。索引页面上的所有链接都是ajax调用,用于读取.php类函数,该函数将检索字符串中的html并将其显示在主index.php页面上的某个div中。

返回html的大多数函数都返回如下字符串:

<table>
    <tr>
       <td>Data here</td>
    </tr>
</table>

我没有返回完整的“<html><head>”内容,因为它已存在于index.php主页面中。

但是,返回的html字符串使用制表符,空格,注释等进行格式化,以便于阅读代码。我是否应该花时间缩小这些页面并删除标签,注释,空格?或者缩小.php页面是否可以忽略不计,因为它在服务器上?

我想我正在试图弄清楚我构建webapp的方式是否会导致带宽问题,如果我可以减少.php类文件大小,我可以通过减少它们来提高性能。大多数.php类是40-50KB,最大的是99KB。

为了速度,我考虑过使用memcache,但是不知道是否在事实之后添加它是值得的,我不知道如何实现它。我不知道服务器上是否有任何缓存...我想我已经把它留给了浏览器......我不太熟悉缓存领域。

现在网站看起来并不慢,但我是唯一的用户...我只是想知道它是否值得付出额外的努力。

任何建议或文章都将受到赞赏。

提前致谢。

3 个答案:

答案 0 :(得分:0)

我的建议是不要通过AJAX调用发送HTML。相反,只通过JSON发送底层数据(“Data here”部分),然后通过客户端函数处理该数据,该函数将使用正确的HTML装饰它,然后将其注入DOM。这将大大加快Ajax调用。

答案 1 :(得分:0)

Memcache提供了一个允许您缓存数据的API。您还需要(并且在我看来更重要的是)是关于缓存什么以及何时使缓存无效的策略。这不能通过查看源代码来确定,它来自您的网站的使用方式。

但是,可以立即使用操作码缓存(例如APC)。

答案 2 :(得分:0)

代码美化是为人而不是机器。
作为优化的一部分,您应该起飞。

或者只是在应用程序中添加一个标志检查,某些条件匹配(如调试模式),它返回格式良好的javascript。否则,空格并不意味着要加工。


<强> APC

你应该使用APC来编译&amp;将php脚本缓存到操作码

<强>为什么吗

  1. 部署后很难进行更改
  2. 如果每个脚本都准备好操作代码,那么您的服务器不需要动态地将纯文本脚本编译成二进制操作码
  3. 编译一次并使用许多
  4. 有什么好处?

    1. 编译纯文本脚本的较小执行周期
    2. 较少的内存消耗(两者都相关)
    3. 一个简单的数学运算,如果在当前环境中2秒内提供请求,现在使用APC在0.5秒内提供服务,您获得 4次更好的性能,2秒使用APC可以提供4个请求。这意味着之前您可以容纳50个并发用户,现在您可以允许200个并发用户
    4. Memcache - 不是吗?

      取决于,如果您处于单一主机环境中,可能无法获得更好的效果。 memcache的最大优点是信息共享和信息共享。分发(这意味着多个服务器环境,缓存一次并使用很多)。

      <强>等吗

      1. 带有过期标头的静态文件(prime cache concept,没有请求最快,节省带宽)
      2. 将昂贵的请求缓存到memcache / disk-cache甚至数据库中(报告/统计信息生成等昂贵的请求)
      3. 始终检查您的代码以获得最佳优化(但不要过度执行)
      4. 始终做基准并比较结果(当前和当前)
      5. 微调您的apache / tomcat配置
      6. 考虑用最小的库/扩展名重新编译PHP并在运行时加载必要的库(例如使用mysqli的应用程序,不使用PDO,没有理由保留它)