เว็บเบราว์เซอร์ (Chromium / Firefox) ไม่ตอบสนองเป็นเวลา 1-2 วินาทีหลังจากโต้ตอบไฟล์


9

ฉันจะปรับปรุงรหัสนี้เพื่อลบการตอบสนอง / ความล่าช้าหน้าหลังจากที่เลือกไฟล์จากกล่องโต้ตอบไฟล์แล้วคลิกตกลงได้อย่างไร

ฉันทดสอบไฟล์ที่มีขนาดประมาณ 50-100 KB

function handleFileSelect(evt) {
  var files = evt.target.files; // FileList object

  // files is a FileList of File objects. List some properties.
  var output = [];
  for (var i = 0, f; f = files[i]; i++) {
    output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
      f.size, ' bytes, last modified: ',
      f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
      '</li>');
  }
  document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}

document.getElementById('files').addEventListener('change', handleFileSelect, false);
<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

ฉันใช้หน้านี้เป็น localhost และฉันใช้ SSD

ขอบคุณ


3
หมายเหตุ: <input>แท็กไม่ได้ใช้และไม่จำเป็นต้องปิดทับและไม่เคยมีใน HTML
Rob

หลังจากที่คุณส่งแบบฟอร์มไฟล์จะต้องถูกส่งไปยังเซิร์ฟเวอร์และเบราว์เซอร์รอการตอบกลับ (ซึ่งอาจมีข้อผิดพลาด ฯลฯ )
Pointy

1
@Kaiido เพียงไฟล์เดียว OS: Windows .. When happens the lag, before the dialog appears?หลังจากคลิกOpenในกล่องโต้ตอบไฟล์เพื่อให้หลังจากที่มันหายไป
Joelty

2
คุณเคยลองกับคอมพิวเตอร์เครื่องอื่นด้วยหรือไม่ สิ่งนี้อาจมาจากประสิทธิภาพของระบบของคุณ
BrightFaith

2
ฉันคัดลอกรหัสของคุณวางไว้ในไฟล์ HTML และเรียกใช้จากเดสก์ท็อป เนื่องจากนี่เป็นจาวาสคริปต์ที่แท้จริงไม่จำเป็นต้องมี "เซิร์ฟเวอร์" ฉันสามารถค้นหาไม่ล่าช้าไม่ว่าฉันจะเลือกไฟล์ใด
ซอฟต์แวร์ KIKO

คำตอบ:


4

รหัสของคุณดีอย่างสมบูรณ์ ลองวัดประสิทธิภาพเพื่อตรวจสอบเพิ่มเติม:


ป้อนคำอธิบายรูปภาพที่นี่


2

ใช้สัญญาในฟังก์ชั่นhandleFileSelectของคุณหรือทำให้ฟังก์ชั่นasyncของมัน


0

รหัสของคุณใช้งานได้และไม่มีอะไรผิดปกติกับมันคุณสามารถปรับปรุงประสิทธิภาพได้โดยการวัดครั้งแรกจากนั้นทำการกระทำที่เหมาะสม

สำหรับเช่นคุณอาจ refactor รหัสวิธีการทำความสะอาด -

let handleFileSelect = (evt) => {
  let files = evt.target.files; // FileList object

  let output = [...files].map((file) => {
    return `<li>
                <strong>${escape(file.name)}</strong> 
                (${file.type || "n/a"}) - ${file.size} bytes,
                 last modified: ${
                   file.lastModifiedDate
                     ? file.lastModifiedDate.toLocaleDateString()
                     : "n/a"
                 }
                </li>`;
  });

  document.getElementById("list").innerHTML = `<ul>${output.join("")}</ul>`;
};

document
  .getElementById("files")
  .addEventListener("change", handleFileSelect, false);
<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.