Как лучше хранить html/java script/ в коде или во flash на esp32
У меня есть esp32, на котором работает веб-страница вместе с java-скриптом, и с помощью сокета я обновляю некоторые значения на веб-странице. Я делаю это очень быстро (например, каждые 50 мс). Теперь я обслуживаю весь код сценария html/java, хранящийся в строковой переменной, но мне интересно, какой из них лучше? Чтобы сохранить этот html в spiff или в коде? и почему? Большое спасибо
@lucian_v, 👍1
Обсуждение2 ответа
Лучший ответ:
Лучше всего хранить статические файлы в 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, находятся здесь.
Это зависит от вашего определения слова "лучше".
Непосредственное встраивание в ваш код, вероятно, будет быстрее, так как оно будет подвержено механизмам кэширования конвейера выполнения, тогда как SPIFFS должен будет выполнять определенные вызовы SPI для чтения данных из флэш-чипа в то время, когда это требуется. Однако SPIFFS будет проще поддерживать, так как вы просто работаете с файлами.
Я бы, вероятно, выбрал SPIFFS для больших файлов, таких как графика или большие фрагменты Javascript. Вещи, которые клиент может загрузить один раз, а затем кэшировать (если ваш веб-сервер поддерживает такую функциональность - не уверен, какие возможности имеет код веб-сервера ESP32 по умолчанию). Остальные, более динамичные вещи, которые часто меняются, имеют встроенные строковые литералы.
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Питание esp32cam от аккумулятора
- Контакты RX и TX на esp32
- ESP32: отключить детектор отключения питания
SRAM обычно на порядок быстрее, чем NVRAM., @dandavis
почему вам нужно обновлять веб-страницу каждые 50 мс?, @jsotola
Я показываю обороты двигателя, которые считываются через порт obd, и я хочу видеть их как можно «в реальном времени»., @lucian_v