如何将小部件webapp框架与SEO友好的CSS和JS文件结合起来

时间:2010-05-23 18:55:46

标签: javascript css zend-framework seo

我正在使用Zend框架和自制小部件系统编写webapp。每个小部件都有一个控制器,如果选择,可以选择渲染其中一个视图。这确实有助于我们在网站的任何位置模块化,重新配置和重用小部件。

问题是每个小部件的视图都包含自己的JS和CSS代码,当整个页面放在一起时会导致非常混乱的HTML代码。你到处都有口袋的样式和脚本标签。由于我确定你知道,这对于很多不同的原因是不好的,但它对我们的SEO也有深远的影响。

我能够提出的几个解决方案

  1. 将每个窗口小部件的每个视图的CSS和JS分成它自己的文件 - 这对加载时间有很大的缺点(需要单独加载更多资源)并且它使编码变得非常困难,因为现在你必须打开3-4个文件只是为了编辑小部件。

  2. 将所有小部件CSS组合成一个文件(与JS相同) - 当有人进入网站时,也会导致大量负载,混合所有小部件的CSS和JS,因此更难保持追踪他们,以及我相信你能想到的其他问题。

  3. 创建一个使用方法1(每个小部件单独的CSS和JS)的系统,在交付页面时,将所有CSS和JS拼接在一起。这显然需要更多的处理时间,当然还需要创建这样的系统等。

  4. 我的问题是您对这些解决方案的看法,或者您是否知道(或任何可能有帮助的技术)解决此问题的预先存在的解决方案。我非常感谢你的所有想法和评论!!

    谢谢你们,

    阿里

3 个答案:

答案 0 :(得分:2)

使用方法2,您将能够利用浏览器缓存。如果合适,如果网站有一个带有导航等的“前门”输入页面而不需要小部件库,则可以在着陆页之后为其他页面预加载CSS和JS负荷。

如果你通过像YUICompressor这样的东西运行你的JS,然后确保服务器gzips JS和CSS文件,你真的不是在谈论那么多东西,除非你的代码真的很松弛。如果您利用托管在可靠网站(如Google的API存储库)上的库,那么您可以将自己的代码缩小。 (我对Zend一无所知,因此可能相关或不相关。)

答案 1 :(得分:1)

我肯定会选择第三种方法。您可以获得第一种方法中描述的分离灵活性,但您可以获得微调应用程序性能的能力(正如Pointy所指出的那样)。

您需要的只是一些中央注册系统(一个类),您可以使用它来跟踪需要加载的样式表。

Styles::add_sheet('widget_1.css');

此外,您可以向此类添加触发器(方法),以便处理缓存的代码可以跟踪是否需要重建连接样式表。

if (Styles::cache_needs_update()) {
  // rebuild (concatenate) stylesheet and save in cache
}

为了更进一步,还可以通过模块或其他类型的分组标准来连接样式表。当有很多样式表(或js文件)时,这些连接的样式表组可以单独缓存。

以上代码示例将类似于

Styles::add_sheet('widget_1.css','group_name');

if (Styles::cache_needs_update('group_name')) {
  // rebuild (concatenate) stylesheet for this 'group_name' and save in cache
}

答案 2 :(得分:0)

不确定这是否可以在PHP中使用,但如果您能够推迟页面传输直到页面处理完毕;

  • 让每个小部件使用一些静态方法
  • 在页面上注册它
  • 在渲染管道中放置一个钩子,用于读取和连接所包含小部件所需的所有资源
  • 修改响应以包含资源
  • 将回复发送给客户