我刚刚制作了user-content orientated website。
它是在PHP,MySQL和jQuery的AJAX中完成的。目前只有十几个提交,我已经可以感觉它在进入新页面时略有滞后(因此运行新的MySQL查询)
对我来说最重要的是尝试优化我的MySQL查询(通过准备好的语句),还是值得查看CDN(Amazon S3)和缓存(很像WordPress插件WP Super Cache)静态HTML文件尚未提交新内容。
对于我作为开发人员来说,哪条路线最有利,即。我最好集中精力加快网站建设速度?
答案 0 :(得分:4)
过早优化是万恶之源
-Donald Knuth
当您发现问题时进行优化,不要妄下结论并浪费时间来优化您认为可能存在的问题。
此外,我认为你有更重要的事情可以在网站上解决(比如能够在同一个问题上投票多次),然后再担心缓存层。
它在PHP,MySQL和jQuery的AJAX中完成,目前只有十几个提交,并且我已经可以感觉它在进入新页面时略有滞后(因此运行新的mysql查询)
“可以感觉它略微滞后” - 感觉不到,知道。运行基准测试并为查询计时。您是否有效地运行查询?是否使用正确的索引和键设置数据库?
有人说......
CDN非常适合提供静态内容。 CSS,JavaScript,图像等。这可以通过最小化请求所有资源所需的时间来加速页面的加载。 它不会修复错误的查询实践。
实现内容缓存的最简单方法是Varnish。基本上位于您的网站前面,并重新提供尚未更新的内容。极其干扰,易于设置,同时具有惊人的效果。
对我来说,最重要的是尝试优化我的MySQL查询(通过准备好的语句)
为什么地狱你还没有使用预备语句?如果您正在进行原始SQL查询始终使用预准备语句,除非绝对信任查询中的内容。鉴于基于用户内容的网站,我认为您无法安全地说出这一点。如果您发现查询时间过高,请查看数据库架构,每页运行的查询以及您拥有的内容量。有几十个条目,即使是最糟糕的查询也不应该注意到任何问题。
答案 1 :(得分:2)
我检查了你的网站,对我来说似乎有些迟钝,虽然它不是100%清楚它是数据库。
这里好的第一步是从外面开始并按照你的方式工作。所以使用像Firebug(对于Firefox)这样的东西 - 就像它的类型的类似插件 - 将允许你分解时间进入加载页面。
其次,根据您的上述评论,请在适用的情况下开始使用PreparedStatements;它可以产生很大的不同。
第三,确保您的数据库工作最低限度 - 这意味着确保您在正确的位置拥有索引。这里运行您在网站上获得的查询类型以及时间可能会很有用。解释计划
http://dev.mysql.com/doc/refman/5.0/en/explain.html
和MySQL驱动程序日志记录(如果您的驱动程序支持它)在这里可能会有所帮助。
如果网站仍然很慢并且您已将其缩小到使用数据库,我的建议是首先进行简单的优化。如果可行的话,缓存数据库数据可能会给你带来巨大的收益。一个非常简单的解决方案,特别是考虑到你上面提到的堆栈,使用Memcached:
将其注入您的堆栈后,衡量您的性能+可扩展性,并且只在您真正需要时才采用更先进的技术。我想你会发现简单的负载平衡,缓存和一些服务实例在解决基本性能和可伸缩性目标方面都会有很大的作用。
与此同时,我建议采用一种方法来更加定期和准确地衡量这一点。例如,决定如何实际执行自动延迟测量和负载测试等。
答案 2 :(得分:1)
对我来说 - 优化数据库是第一位的 - 因为当你发现一些问题时,任何缓存都会导致你需要重建所有缓存
答案 3 :(得分:1)
有几个方面可以优化。
第一,我会使用firefox和yslow标签评估您网站的性能,它会提供基于服务器的建议。
我使用的另一个解决方案就是这个插件。
http://aciddrop.com/php-speedy/
“PHP Speedy是一个脚本,您可以在Web服务器上安装该脚本以自动加快网页的下载时间。”
第二,我会在不同的文件夹中创建静态域名,例如static.yourdomainane.com,然后将所有图像,css,js移动到那里。然后将所有代码指向该域,然后调整Web服务器设置以缓存所有这些文件。
第3,我会查看像这样的文章/技术,http://www.catswhocode.com/blog/3-ways-to-compress-css-files-using-php来帮助压缩/优化你的静态文件,比如css / js。
第4步,检查所有图像及其尺寸,并确保它们已完全优化。或者,转换为使用css sprites。
http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/ http://css-tricks.com/css-sprites/
基本上对于所有主站点图像,将它们移动到1个css精灵中,然后更改你的css,引用该精灵上的不同点来显示所需的图像。
第五,检查您的内容页面,哪些页面经常更改,哪些页面很少更改,哪些页面很少更改,请将这些页面转换为静态html页面。那些经常变化的,你可以留下作为php页面,或者使用php命令行创建一个cron或计划任务来创建php页面的新静态html版本。
6,对于mySQL,我建议您使用慢查询登录,以帮助识别慢查询。检查您的表结构,确保它们是最佳的,并拥有设计良好的表。使用视图和存储过程,将硬sql逻辑或从php运行到mySQL。
我知道这很多,但我希望它很有用。
答案 4 :(得分:0)
这取决于你的减速真正存在的地方。你有很多推特和脸书的东西,很容易让你的页面显着减慢。
使用firebug查看在您感知的缓慢加载时间内是否正在下载任何内容。您还可以下载YSlow firefox插件,为您提供加速页面加载的提示。
感知缓慢的很大一部分可能是由于页面上的javascript而不是你的后端。有了这么小的网站,在你有数千个提交之前,你不应该在后端看到任何性能问题。
答案 5 :(得分:0)
对我来说,最重要的是尝试优化我的MySQL查询(通过准备好的语句)
不确定。
但准备好的陈述与优化无关。
近99%的网站都在运行,根本没有缓存。所以,我认为你真的不需要它 如果您的网站运行缓慢,您必须首先配置文件,然后优化某个地方,这已成为瓶颈。