我无法弄清楚如何使用jsoup和coldfusion将多个脚本标记合并为1,这里的代码放在application.cfc页面中。
<cfsavecontent variable="htmlContents">
<cfoutput>
<cfinclude template="#arguments.TargetPage#">
</cfoutput>
</cfsavecontent>
<cfscript>
jsoup = createObject("java", "org.jsoup.Jsoup");
html = jsoup.parse(htmlContents);
head = html.head();
children = head.children();
cssdata = "";
scriptdata = "";
if(ArrayLen(children)) {
for (i=1; i<ArrayLen(children); i++) {
if (children[i].tagName() EQ "style") {
returnHTML = children[i].html();
if (returnHTML NEQ "") {
cssdata = cssdata & returnHTML;
children[i].remove();
}
} else if (children[i].tagName() EQ "script") {
returnHTML = children[i].html();
if (returnHTML NEQ "") {
scriptdata = scriptdata & returnHTML;
children[i].remove();
}
}
}
}
WriteOutput(html);
</cfscript>
结果应该是这样的:
<script>
//script
</script>
<script>
//script
</script>
<script>
//script
</script>
<script>
//script
</script>
并将其转化为此
<script>
//script//script//script//script
</script>
使用java对象和coldfusion在正确方向上的任何步骤都会有所帮助。
答案 0 :(得分:2)
我使用jsoup,但我不建议这样使用它。您可能需要其他JS参数,并将所有脚本添加到单个块中可能会导致问题(即延迟)。
作为一种练习,我们添加了所有CSS&amp; JSS脚本到数组对象,然后使用CFHTMLHEAD将它们输出到HTML头部分。
<cfset AddToHeader = arraynew(1)>
<cfsavecontent variable="tempJS">
<script type="text/javascript">
$(function(){
console.log('hello world');
});
</script>
</cfsavecontent>
<cfset arrayappend(AddtoHeader, tempJS)>
...
<cfhtmlhead text="#arraytolist(AddtoHeader, chr(10))#">
您使用的是哪个网络服务器?如果是IIS,请查看http://www.iispeed.com/此Google PageSpeed插件会自动将脚本(&amp; CSS)智能地移动到标题,根据每个设备的最佳文件大小连接脚本,缩小,控制缓存并在需要时嵌入内联。 (我已经使用了IISpeed和ColdFusion 9&amp; 10,绝对没有问题。)
您可以使用
中的演示来试验PageSpeed和您的网站