JavaScript 更新文本区域会冻结 Chrome,但 Firefox 不会
JavaScript update textarea freezes Chrome, but not Firefox
页面上有一个上传按钮,允许用户上传文本文件,文件内容被输入到同一页面上的文本框。在 Firefox 中使用此功能测试 3MB 文本文件时,它工作正常。但是当与 Chrome 一起使用时,浏览器锁定并且动画加载器冻结了一点,然后页面再次响应。这是相关的js代码:
function getFile(event) {
const input = event.target
if ('files' in input && input.files.length > 0) {
placeFileContent(document.getElementById('corpus'), input.files[0]);
setTimeout(function() {
$('#characters').text($('#corpus').val().length.toLocaleString());
$('#words').text($('#corpus').val().trim().split(/\s+/).length.toLocaleString());
}, 10);
}
}
function placeFileContent(target, file) {
readFileContent(file).then(content => {
target.value = content;
}).catch(error => console.log(error))
}
function readFileContent(file) {
const reader = new FileReader()
return new Promise((resolve, reject) => {
reader.onload = event => resolve(event.target.result)
reader.onerror = error => reject(error)
reader.readAsText(file)
})
};
上传按钮代码:
$('#uploadCorpus').on('change', function(event) {
$("#corpus").LoadingOverlay("show");
setTimeout(function() {
getFile(event);
}, 1000);
$("#corpus").LoadingOverlay("hide", true);
})
我删除了动画,以及 words/characters 的计数,但问题仍然存在。使用 Chrome 开发工具,延迟出现在阅读文本后的布局操作中。当我只是将内容放入 var 时,浏览器没有任何延迟。除了更新 textarea 值,是否有其他更新方式而不锁定 UI?用户将在提交到数据库之前编辑文件。
我禁用了拼写检查、自动完成等
这似乎是 Chrome 中的一个问题,即使在粘贴大文本时也是如此。我通过检查文件大小来缓解它,如果超过 x 上传而不在浏览器中查看文本。
var size = document.getElementById('uploadCorpus').files[0].size;
页面上有一个上传按钮,允许用户上传文本文件,文件内容被输入到同一页面上的文本框。在 Firefox 中使用此功能测试 3MB 文本文件时,它工作正常。但是当与 Chrome 一起使用时,浏览器锁定并且动画加载器冻结了一点,然后页面再次响应。这是相关的js代码:
function getFile(event) {
const input = event.target
if ('files' in input && input.files.length > 0) {
placeFileContent(document.getElementById('corpus'), input.files[0]);
setTimeout(function() {
$('#characters').text($('#corpus').val().length.toLocaleString());
$('#words').text($('#corpus').val().trim().split(/\s+/).length.toLocaleString());
}, 10);
}
}
function placeFileContent(target, file) {
readFileContent(file).then(content => {
target.value = content;
}).catch(error => console.log(error))
}
function readFileContent(file) {
const reader = new FileReader()
return new Promise((resolve, reject) => {
reader.onload = event => resolve(event.target.result)
reader.onerror = error => reject(error)
reader.readAsText(file)
})
};
上传按钮代码:
$('#uploadCorpus').on('change', function(event) {
$("#corpus").LoadingOverlay("show");
setTimeout(function() {
getFile(event);
}, 1000);
$("#corpus").LoadingOverlay("hide", true);
})
我删除了动画,以及 words/characters 的计数,但问题仍然存在。使用 Chrome 开发工具,延迟出现在阅读文本后的布局操作中。当我只是将内容放入 var 时,浏览器没有任何延迟。除了更新 textarea 值,是否有其他更新方式而不锁定 UI?用户将在提交到数据库之前编辑文件。
我禁用了拼写检查、自动完成等
这似乎是 Chrome 中的一个问题,即使在粘贴大文本时也是如此。我通过检查文件大小来缓解它,如果超过 x 上传而不在浏览器中查看文本。
var size = document.getElementById('uploadCorpus').files[0].size;