php解析速度优化

php解析速度优化,php,parsing,optimization,Php,Parsing,Optimization,我想根据数据库中可用的元素添加工具提示或生成链接,例如,如果打印的html页面是: 要以单用户模式重新启动linux主机,您可以 我将使用explode(“,$row[page]),现在的想法是查找页面中的每一个单词,以确定它们在本例中是否有相关引用,假设我有一个表引用,一个用于重新启动,一个用于linux 重新启动:重新启动计算机 linux:操作系统 现在我的输出看起来像(被@替换为) 要以单用户模式运行@a href=“ref/reboot”@reboot@/a@您的@a href=“re

我想根据数据库中可用的元素添加工具提示或生成链接,例如,如果打印的html页面是:

要以单用户模式重新启动linux主机,您可以

我将使用explode(“,$row[page]),现在的想法是查找页面中的每一个单词,以确定它们在本例中是否有相关引用,假设我有一个表引用,一个用于重新启动,一个用于linux 重新启动:重新启动计算机 linux:操作系统

现在我的输出看起来像(被@替换为<和>)

要以单用户模式运行@a href=“ref/reboot”@reboot@/a@您的@a href=“ref/linux”@linux@/a@主机,您可以

  • 当我保存内容时,如果我在将来添加更多的关键字,那么文本将变得更具交互性,而不是生成一个静态列表
我主要关心的问题是如何创建一个足够有效的流程来完成这项工作

  • 我是否应该将所有db条目存储在一个数组中并进行比较
  • 对每个单词进行sql查询(看起来很疯狂)
  • 将表转储到一个文件中,并使用很长的正则表达式或“grep-f模式数据”方式来完成
  • 或者我肯定这一定是一种更好的方式,只是我对此一无所知,或者这太不利于资源,我应该避免做这样的事情

干杯

我会为每篇文章添加一个额外字段,其中包含用于处理本文的“关键字表版本”

每次用户打开一篇文章时,您都应该将此版本与关键字列表的版本进行比较。如果已过时,则处理文章并将结果保存到“文章”表中。否则,您只需显示文章

您可以通过添加用于处理的日期列来控制负载,并对其进行检查。如果项目相对较新,您可能希望推迟处理。同样,您可以比较版本差异,例如,如果它大于5或10,您应该更新文章。如果您添加了一个重要的关键字,只需将关键字表的版本增加10,您的所有文章都将被迫更新

其主要思想是将负载分配给用户请求,并缓存结果


如果您的系统负载很重,您可能希望使用随机数生成器来定义更新文章的概率仅为10%,例如。

根据数据库中关键字的数量,有两种解决方案。 1.如果关键字的数量小于文本中的单词数量。然后,您只需从数据库中提取所有关键字并进行比较。 2.如果关键字的数量大于文本中的单词数量。动态创建一个查询,该查询将带来所有必要的单词。例如,从关键字中选择*,其中关键字为class='system'或关键字为class='linux'等


但是,如果您真的关心资源,我建议您创建一个缓存系统。每个页面处理一次,然后将原始文本和结果存储在数据库中。如果更新了关键字表,您可以再次重新处理所有页面。

您可以将关键字索引静态存储在某个位置(数据库、文件或数组中)。更新内容后,可以相应地重建或更新索引。你只需要确保它可以很快被查找到

当您有了它,您就可以很快地查找数据库中是否有该单词,因为索引为此进行了优化

我会将索引存储在一个文件中的排序列表中,并使用二进制搜索进行查找。这是一个简单的解决方案,如果没有太多的数据需要处理,我认为应该足够快。 或者,您可以在一个SQL查询中将文章中的单词列表发送到数据库,并让它返回与列表中任何单词匹配的文章列表


此外,处理完文章后,您还应该缓存数据,以便在对同一篇文章的后续请求中,您可以给他们处理过的文章,而不是每次都处理它们。

Thx伙计们,谢谢您的回答!我想把所有的东西都放到2个数组中进行比较。但也发现了并可能会使用缓存痛苦加载的数据的技巧(尼斯缓存)和顶部关闭。我将测试不同的解决方案,看看哪一个是最cpu环保的。