我正在通过Zend Framework创建网站,我一直想知道这个问题很长一段时间......
想象一下,您已经创建了最好的文章模块,并且您通常会为每篇文章添加meta_keywords / meta_description数据库条目,以便在视图呈现时,它会使用在管理后端中输入的数据填充相关的元字段。
但是,想象一下动态内容较少的情况,到目前为止,您使用HeadMeta()视图助手向页面添加元关键字/元描述。
我想有办法在数据库中为每个页面配置元关键字/元描述或其他元元素。我一直在考虑什么是最好的解决方案,而不会增加过多的开销(因为你需要对你网站上发生的每一个动作执行查询)
我最初的想法是将元属性保存在数据库中的索引上,这样对于每个操作,您都可以快速检索所有相关数据。我很快意识到通过GET / POST传递的参数可能会改变结果,使得结果集无关紧要。
所以也许我们也可以添加参数,但你可能想要同时忽略一些(因为不需要考虑?page = 12参数......)。也许在索引中添加另一个带有序列化参数的varchar列?
或者添加整个网址并执行REGEXP选择而不是常规选择? (我猜这可能是最慢的解决方案......)
另请注意,mySQL对大约varchar(200)的UTF-8索引有限制(因此无法保存一个巨大的URL)
有没有人想过解决这个问题的好方法?
答案 0 :(得分:1)
听起来我觉得数据结构是正确的:元关键字/描述需要是每篇文章。
最终,您需要从数据库中获取文章 - 无论是单篇文章还是一组“最佳”文章。所以在我看来,关键是要通过某种服务器端缓存保持最大性能。
通常我使用配置了db连接的服务类(see sample)并缓存它检索的数据。缓存生存期可以设置得足够短,以便即使缓存数据也“足够新鲜”。或者,您通过cron清除/填充缓存,以便前端请求始终获得缓存命中。或者,您可以将缓存生命周期设置为永久性,并且仅在管理端更新时清除/填充更新缓存;这种方法的可行性取决于更新的频率。
获得数据后,它会将值限制在HeadMeta视图助手中。