Как лучше хранить html/java script/ в коде или во flash на esp32

У меня есть esp32, на котором работает веб-страница вместе с java-скриптом, и с помощью сокета я обновляю некоторые значения на веб-странице. Я делаю это очень быстро (например, каждые 50 мс). Теперь я обслуживаю весь код сценария html/java, хранящийся в строковой переменной, но мне интересно, какой из них лучше? Чтобы сохранить этот html в spiff или в коде? и почему? Большое спасибо

, 👍1

Обсуждение

SRAM обычно на порядок быстрее, чем NVRAM., @dandavis

почему вам нужно обновлять веб-страницу каждые 50 мс?, @jsotola

Я показываю обороты двигателя, которые считываются через порт obd, и я хочу видеть их как можно «в реальном времени»., @lucian_v


2 ответа


Лучший ответ:

1

Лучше всего хранить статические файлы в SPIFFS и обслуживать их с установленным заголовком Expires, чтобы позволить браузеру кэшировать файлы html, css, js и файлы изображений.

Как создать заголовок Expires:

unsigned long expires = now() + SECS_PER_YEAR;
bp.printf(F("Expires: %s, "), dayShortStr(weekday(expires))); // два printfs, потому что функции ShortStr совместно используют буфер
bp.printf(F("%d %s %d 00:00:00 GMT"), day(expires), monthShortStr(month(expires)), year(expires));

И используйте метод AJAX для отображения данных на странице. Сделайте запрос с помощью объекта XMLHttpRequest:

function getData(cmd) {
  var xhr = new XMLHttpRequest();
  xhr.onerror = function(e) {
    alert(xhr.status + " " + xhr.statusText);
  }
  xhr.onload = function(e) {
    showValues(xhr.responseText);
  };
  xhr.open("GET", "http://" + host + ":" + restPort + "/" + cmd, true);
  xhr.send();
}

showValues будет вашей функцией для заполнения данных на странице

В ESP32 создавайте ответ как JSON для простой обработки данных в JavaScript.

Вот веб-сервер в моем проекте. Он использует базовый класс Arduino Server, а не esp WebServer. Он имеет #ifdefs для SD или SPIFFS. Статические файлы моего проекта, включая файл js, находятся здесь.

,

0

Это зависит от вашего определения слова "лучше".

Непосредственное встраивание в ваш код, вероятно, будет быстрее, так как оно будет подвержено механизмам кэширования конвейера выполнения, тогда как SPIFFS должен будет выполнять определенные вызовы SPI для чтения данных из флэш-чипа в то время, когда это требуется. Однако SPIFFS будет проще поддерживать, так как вы просто работаете с файлами.

Я бы, вероятно, выбрал SPIFFS для больших файлов, таких как графика или большие фрагменты Javascript. Вещи, которые клиент может загрузить один раз, а затем кэшировать (если ваш веб-сервер поддерживает такую функциональность - не уверен, какие возможности имеет код веб-сервера ESP32 по умолчанию). Остальные, более динамичные вещи, которые часто меняются, имеют встроенные строковые литералы.

,