Я работаю над новой конечной точкой (iOS) продукта. Он имеет веб-присутствие. Несколько компонентов (бизнес-логика c) также потребуются в iOS. Я пытаюсь взвесить преимущества JS повторного использования кода по сравнению с повторной реализацией бизнес-логики c в Swift.
Чтобы измерить производительность, я выполнил пузырьковую сортировку с жестко закодированными данными размера 10. Тот же код (кроме syntacti c) сахар) было написано в Swift и JS. Библиотека JavascriptCore использовалась для выполнения кода, записанного в файле. js.
Я провел два эксперимента. Оба были повторены 5 раз. Один, запустить пузырьковую сортировку
одна итерация в мс.
Swift: 0.09500980377197266 JS: 1.0221004486083984
Swift: 0.04100799560546875 JS: 0.160932540235547
Swift: 0,0400543212890625 JS: 0,11491775512695312
Swift: 0,03910064697265625 JS: 0,12,91036605834961
Swift: 0,03898143768310547 JS 101 * 101 * 10 * 288, 1030, 030800000000 запустить сортировку пузырьков 10k раз и запомните общее истекшее время.
10 тыс. Итераций в мс
Сдв. Общее время: 432,3619604110718 JS общее время: 1050.1370429992676
Сдвиг общее время: 405.10010719299316 JS общее время: 1043,85790662
Общее время выполнения Swift: 396,6749906539917 * Общее время выполнения JS: 1031.238079071045
Общее время выполнения Swift: 399,82903003692627 JS Общее время выполнения: 1010,8669996261597
Общее время выполнения Swift : 419.8509454727173 JS общее время: 1007.6370239257812
В первом эксперименте видно, что JS perf было 10x Swift в первом запуске и 2,5 - 4x в последующих. Во втором эксперименте JS perf было примерно в 2,5 раза больше Swift.
Вопросы:
1. Почему JS perf меняется в первом и последующих прогонах? Движок JS выполняет кэширование байтового кода? Что за JS настройка компонента / среды выполняется Swift?
2. В настоящее время один и тот же JSContext передается при каждом вызове. Будет ли какая-то разница, если JSContext создается перед каждым вызовом?
3. Ожидается ли, что выполнение кода JS всегда будет медленнее, чем в Swift? Рекомендуется ли выполнять код JS из Swift, если производительность (2.5x) плохая?
4. Насколько громоздкой является JS история отладки, когда она забита Swift?