From 83545baa316587a61507b26499f0315053804b82 Mon Sep 17 00:00:00 2001 From: kirill Date: Wed, 10 Nov 2021 22:00:42 +0500 Subject: [PATCH] hw7 done --- .idea/.gitignore | 8 ++++++ .idea/misc.xml | 4 +++ .idea/modules.xml | 8 ++++++ .idea/rails-optimization-task7.iml | 15 ++++++++++ .idea/vcs.xml | 6 ++++ case-study.md | 43 +++++++++++++++++++++++++++++ img.png | Bin 0 -> 5191 bytes img_1.png | Bin 0 -> 6041 bytes img_2.png | Bin 0 -> 6815 bytes img_3.png | Bin 0 -> 5579 bytes 10 files changed, 84 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/rails-optimization-task7.iml create mode 100644 .idea/vcs.xml create mode 100644 case-study.md create mode 100644 img.png create mode 100644 img_1.png create mode 100644 img_2.png create mode 100644 img_3.png diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ee2f02d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..efbfd54 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/rails-optimization-task7.iml b/.idea/rails-optimization-task7.iml new file mode 100644 index 0000000..6e7c09c --- /dev/null +++ b/.idea/rails-optimization-task7.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/case-study.md b/case-study.md new file mode 100644 index 0000000..62fb542 --- /dev/null +++ b/case-study.md @@ -0,0 +1,43 @@ +### Первый прогон + +![img_2.png](img_2.png) + +### PARALLEL + +Второй прогон: +![img_1.png](img_1.png) + + +### RSPEC-DISSECT + +Выявил пару жирных let'ов +* Первая оптимизациия: +``` +Finished in 11.115231994 seconds +Process finished with exit code 0 +``` +Использовал `let_it_be` вместо `let!` для генерации сложной структуры +``` +Finished in 3.488940863 seconds +Process finished with exit code 0 +``` + +* Вторая оптимизациия: +``` +Finished in 7.255991587 seconds +``` +``` +Finished in 1.925112093 seconds +``` + +Подтянул еще парочку мест не под запись + +Остальные спеки показались некритичными по длительности, понятное дело, все подряд не оптимизировал, нет столько времени) + +Потыкался в factory-doctor, не стал менять ничего + +Финальное время +``` +7008 examples, 0 failures, 2 pendings +Took 230 seconds (3:50) +``` \ No newline at end of file diff --git a/img.png b/img.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7e967cbd9ae917addb0129ace16b8724c5d84a GIT binary patch literal 5191 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 literal 0 HcmV?d00001 diff --git a/img_1.png b/img_1.png new file mode 100644 index 0000000000000000000000000000000000000000..226eade87485fbe93958374b21b9f19f1e204cc2 GIT binary patch literal 6041 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 literal 0 HcmV?d00001 diff --git a/img_2.png b/img_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4184f6866d29b01d1990e3e7a3b9f19d70beb3a4 GIT binary patch literal 6815 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 literal 0 HcmV?d00001 diff --git a/img_3.png b/img_3.png new file mode 100644 index 0000000000000000000000000000000000000000..875f77e6eaab04cb792a61e452a80f8bf241c2f6 GIT binary patch literal 5579 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 Y%b5QCGLh!LLt21>jLPdODYKCO0*WEW?EnA( literal 0 HcmV?d00001