小编tka*_*000的帖子

组合CSS文件:每个站点或每页模板?

我们都知道我们应该将CSS合并到一个文件中,但每个站点或每页?我找到了两者的亲和缺点.

这是场景:

  • 大型网站
  • CSS文件分为一个文件,用于全局样式,许多用于模块

解决方案A:将整个站点的所有CSS文件合并为一个文件:

最好的部分是在初始命中后,每个页面上都会缓存一个文件!缺点是,随着命名空间冲突的机会增加,选择器(类和id)的命名约定变得更加重要.您还需要一个系统,在不同的页面上以不同方式设置相同模块的样式.这会在CSS中产生额外的选择器,这对浏览器来说更有用.这可能会导致像iPad这样没有太多内存和处理能力的移动设备出现问题.如果您使用媒体查询进行响应式设计,那么当您添加额外的样式时,您的麻烦就会更加复杂.

解决方案B:每页模板合并一个CSS文件:

(通过页面模板,我的意思是一个布局,但许多不同的页面,如文章页面)在这种情况下,您将失去上述选择的大部分问题,但您也失去了一些缓存优势.这项技术最糟糕的部分是,如果你在2个不同的页面模板上有相同的样式,那么它们将被下载两次,每个页面一次!例如,所有全局文件都会发生这种情况.:(

摘要:

因此,正如编程中常见的那样,这两种解决方案都不是完美的,但如果有人遇到这种情况并找到答案,我很乐意听到它!特别是,如果您知道任何有助于解决方案A的选择器问题的技术.

css minify

6
推荐指数
1
解决办法
663
查看次数

在匹配规则后,为什么Tuckey UrlRewrite不调用过滤器调用chain.doFilter?

在这里使用Spring Framework ......

我创建了一个过滤器来更改css文件的响应体,如果我直接调用url它就会运行.但是,如果匹配urlrewrite规则,则跳过过滤器.

示例: 在web.xml中:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <!-- skipping init params here for brevity -->
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>cssFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
    <filter-mapping>
    <filter-name>cssFilter</filter-name>
    <url-pattern>*css</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

在urlrewrite.xml中有一个这样的映射设置:

<rule>
    <from>/styles-special/(.*)$</from>
    <to last="true">/styles/$1</to>
</rule>
Run Code Online (Sandbox Code Playgroud)

(出于多种原因,我们需要这个)

因此,路径以"/ styles-special /"开头的任何*.css文件将被重写为"/ styles /",并且不会调用cssFilter,而是任何路径以"/"开头的*.css文件styles /"将按预期运行cssFilter.

我已经尝试将cssFilter的url-pattern更改为许多不同的选项,但结果相同.在我看来,像tuckey urlrewrite过滤器只是在重写后没有调用chain.doFilter(),但也许它比那更复杂?

知道问题可能在这里吗?这是预期的功能吗?任何解决方法?...也许拦截器或控制器是去这里的方式?

提前感谢您对此提出的任何建议!!


注意:使用以下内容(如axtavt所建议):

<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
Run Code Online (Sandbox Code Playgroud)

修复了链接和运行过滤器的问题.但是,我收到以下错误:

java.lang.IllegalStateException: NO CONTENT
at org.mortbay.jetty.HttpGenerator.addContent(HttpGenerator.java:106)
at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:644)
at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:579)
Run Code Online (Sandbox Code Playgroud)

这是Filter的代码片段:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    HttpServletResponse httpResponse …
Run Code Online (Sandbox Code Playgroud)

java spring url-rewriting servlet-filters tuckey-urlrewrite-filter

5
推荐指数
1
解决办法
5153
查看次数