Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JsRender/JsViews边缘和IE中的性能问题_Javascript_Web Worker_Jsrender_Jsviews - Fatal编程技术网

Javascript JsRender/JsViews边缘和IE中的性能问题

Javascript JsRender/JsViews边缘和IE中的性能问题,javascript,web-worker,jsrender,jsviews,Javascript,Web Worker,Jsrender,Jsviews,const N_COLS=20;//使用它可以修改列数 常数N_行=20;//使用它可以修改行数 常数数据={ 名称:“样本”, 列:generateColumns(N_COLS), 行:GeneratorOWS(N_行), } 函数生成列(n){ 让列=[]; for(设i=0;i

const N_COLS=20;//使用它可以修改列数
常数N_行=20;//使用它可以修改行数
常数数据={
名称:“样本”,
列:generateColumns(N_COLS),
行:GeneratorOWS(N_行),
}
函数生成列(n){
让列=[];
for(设i=0;i

{{:name}
{{include tmpl=“#contentTemplate”/}
{{对于列}}
{{include tmpl=“#columnTemplate”/}
{{/for}}
{{对于行}}
{{include tmpl=“#行模板”/}
{{/for}}
{{:name}
{{对于字段}}
{{include tmpl=“#fieldTemplate”/}
{{/for}}
{{:text}

IE和Edge比Chrome慢得多,尽管多少取决于代码和场景的细节。例如,IE在某些HTML表格呈现场景中比Chrome慢得多。您可能会发现,避免使用表格布局,而是使用CSS进行等效的网格布局,您的性能会有很大的提高,而且在IE和Edge中可能会更显著

如果您在不同的浏览器中查看这一点,您将看到IE可能会慢得多,不仅对于JsRender,对于其他组件或模板引擎也是如此

除了避免HTML表(如果可能的话),您可以考虑替换:

{{for columns}}
  {{include tmpl="#columnTemplate"/}}
{{/for}}

如果你能做到的话

此外,一个小的改进可能来自:

{{... tmpl=~columnTemplate/}}
并提供编译后的模板作为助手,如中所示

var tmpls = {
    columnTemplate: $.templates("#columnTemplate"),
    ...
};

tmpl.link("#container", data, tmpls);

另外,如果您根本没有使用JsViews数据链接(我注意到您所有的标记都是
{…}
,而不是
{^{…}}
),那么您可以执行tmpl.render(…),然后一次性将HTML插入DOM中

你有没有做过任何关于速度缓慢发生在哪里的分析?模板编译应该只在初始页面加载时发生,所以若每次调用都触发新的模板编译或子模板编译,那个就是一个错误。任何模板只能编译一次。分析是否表明问题包括重新编译?否则,预编译将不会有多大帮助。…@Borismore模板肯定只编译一次。我注意到我在web工作者的问题中犯了一个错误,我想说“在web工作者上渲染”不编译^^的JsRender不需要jQuery(请参阅)。它也不需要DOM来渲染。(它呈现为HTML标记字符串)。但是JSView(和数据链接)确实需要jQuery和DOM。要了解性能问题,您可能需要显示编码样式的示例,或者创建一个示例/jsfiddle来说明性能问题,即使您没有显示项目中的特定代码。@borismore我在Web Worker中使用JsRender还有一个问题,我使用自定义原型,我想不出一个方法来发送我的对象到它。我知道这不是一个JsRender问题,所以随它去吧,我会找到一种解决方法:p。不过,我会尽快用JSFIDLE更新我的问题,让您了解我的场景,可能我的模板或对象可以重新定义以提高性能,谢谢您的时间:)@borismore我用一个简单的JSFIDLE更新了我的问题,试图展示我正在使用的内容。如果你在chrome上运行它,你会注意到编译和渲染平均需要50毫秒,但在edge上几乎需要200毫秒(至少在我的电脑上)。在我的真实场景中,这种差异更大,因为模板和对象更复杂。谢谢你的建议,我认为我唯一可以尝试的是,正如你所说的,摆脱表格,使用自定义CSS解决方案,因为在我的真实场景中,我已经提供了编译后的模板作为帮助,并使用一行for/include。我还避免使用数据链接,因为在Edge中,性能所涉及的内容非常痛苦(没有注意到我在JSFIDLE示例中使用的是tmpl.link,很抱歉^^”)。无论如何,谢谢你抽出时间:)
var tmpls = {
    columnTemplate: $.templates("#columnTemplate"),
    ...
};

tmpl.link("#container", data, tmpls);