【发布时间】:2018-07-03 10:28:36
【问题描述】:
在我的 Typo3 扩展中,我使用 <f:for 来迭代几个项目。正好 184 项。
我由此生成了一个滑块。
问题是这个迭代非常慢。有没有办法快点。后端速度不到一秒。只有前端渲染需要很长时间。
我的完整前端代码如下所示:
<f:if condition="{videos -> f:count()} > 4">
<f:then>
<f:for each="{videos}" as="video" iteration="i">
<f:if condition="{i.isFirst}">
<f:then>
<div class="item active">
</f:then>
<f:else>
<div class="item">
</f:else>
</f:if>
<div class="col-lg-3 thumbnailParent">
<f:link.action controller="FrontendVideo" action="show" arguments="{video : video}">
<f:render partial="Video/ShowThumbnail" arguments="{video : video, userAuthorization : userAuthorization}"/>
</f:link.action>
</div>
<!-- adding slider-class to one of all slides. condition: slide must have more than 4 videos for slide-effect -->
<f:if condition="{i.isLast}">
<f:then>
<script type="text/javascript">
addClassForSliding('{myCarouselID}');
function addClassForSliding(myCarouselID) {
$("#myCarousel"+myCarouselID).addClass("isCarousel");
if(!$("div.videoSlide").find("div").hasClass("thisIsTheOnlySliderWhichSlides")){
$("#myCarousel"+myCarouselID).addClass("thisIsTheOnlySliderWhichSlides");
}
}
</script>
</f:then>
<f:else></f:else>
</f:if>
</div>
</f:for>
</f:then>
<f:else>
<f:for each="{videos}" as="video" iteration="i">
<div class="item active">
<div class="col-lg-3">
<f:link.action controller="FrontendVideo" action="show" arguments="{video : video}">
<f:render partial="Video/ShowThumbnail" arguments="{video : video, userAuthorization : userAuthorization}"/>
</f:link.action>
</div>
</div>
</f:for>
</f:else>
</f:if>
【问题讨论】:
-
您检查过缩略图的图像尺寸吗?
-
我正在一个测试系统上运行,此时所有缩略图的大小为 1kb。
-
加载东西需要多少时间?
-
我删除了
<f:render partial="Video/ShowThumbnail" arguments="{video : video, userAuthorization : userAuthorization}"/>并直接在里面设置了这个部分的代码。所以目前我需要 12 秒……有什么进一步的提示来固定它吗? -
将代码从部分移动到模板对性能的影响非常非常小。要测试实际影响,您必须删除对 f:render 的调用。我怀疑你会发现这个部分是你面临的大部分沉重成本的原因——Fluid 代码本身没有一个天生就性能不佳。您没有包括部分内容,因此我无法判断该部分。