-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit ec2854f
Showing
98 changed files
with
8,380 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
# Sphinx build info version 1 | ||
# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. | ||
config: afab4f4c271189bc0eb043dc77f100eb | ||
tags: 645f666f9bcd5a90fca523b33c5a78b7 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,341 @@ | ||
|
||
|
||
<!DOCTYPE html> | ||
<html class="writer-html5" lang="en" data-content_root="../"> | ||
<head> | ||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" /> | ||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
<title>Tech Stack Benchmark and Justification — AREA documentation</title> | ||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=80d5e7a1" /> | ||
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=e59714d7" /> | ||
|
||
|
||
<script src="../_static/jquery.js?v=5d32c60e"></script> | ||
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script> | ||
<script src="../_static/documentation_options.js?v=5929fcd5"></script> | ||
<script src="../_static/doctools.js?v=9bcbadda"></script> | ||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script> | ||
<script src="../_static/js/theme.js"></script> | ||
<link rel="index" title="Index" href="../genindex.html" /> | ||
<link rel="search" title="Search" href="../search.html" /> | ||
<link rel="next" title="AREA Client Web" href="../client_web/index.html" /> | ||
<link rel="prev" title="AREA Project" href="index.html" /> | ||
</head> | ||
|
||
<body class="wy-body-for-nav"> | ||
<div class="wy-grid-for-nav"> | ||
<nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||
<div class="wy-side-scroll"> | ||
<div class="wy-side-nav-search" > | ||
|
||
|
||
|
||
<a href="../index.html" class="icon icon-home"> | ||
AREA | ||
</a> | ||
<div role="search"> | ||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> | ||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" /> | ||
<input type="hidden" name="check_keywords" value="yes" /> | ||
<input type="hidden" name="area" value="default" /> | ||
</form> | ||
</div> | ||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | ||
<ul class="current"> | ||
<li class="toctree-l1"><a class="reference internal" href="../contributing.html">Contribution Guidelines</a></li> | ||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">AREA Project</a><ul class="current"> | ||
<li class="toctree-l2"><a class="reference internal" href="index.html#overview">Overview</a></li> | ||
<li class="toctree-l2"><a class="reference internal" href="index.html#key-features">Key Features</a></li> | ||
<li class="toctree-l2"><a class="reference internal" href="index.html#mission">Mission</a></li> | ||
<li class="toctree-l2"><a class="reference internal" href="index.html#vision">Vision</a></li> | ||
<li class="toctree-l2"><a class="reference internal" href="index.html#community">Community</a></li> | ||
<li class="toctree-l2"><a class="reference internal" href="index.html#contact-us">Contact Us</a></li> | ||
<li class="toctree-l2 current"><a class="reference internal" href="index.html#contents">Contents</a><ul class="current"> | ||
<li class="toctree-l3 current"><a class="current reference internal" href="#">Tech Stack Benchmark and Justification</a><ul> | ||
<li class="toctree-l4"><a class="reference internal" href="#web-vite-react-typescript">Web: Vite + React + TypeScript</a></li> | ||
<li class="toctree-l4"><a class="reference internal" href="#mobile-flutter">Mobile: Flutter</a></li> | ||
<li class="toctree-l4"><a class="reference internal" href="#server-go">Server: Go</a></li> | ||
<li class="toctree-l4"><a class="reference internal" href="#database-mariadb">Database: MariaDB</a></li> | ||
<li class="toctree-l4"><a class="reference internal" href="#overall-synergy">Overall Synergy</a></li> | ||
</ul> | ||
</li> | ||
</ul> | ||
</li> | ||
</ul> | ||
</li> | ||
<li class="toctree-l1"><a class="reference internal" href="../client_web/index.html">AREA Client Web</a></li> | ||
<li class="toctree-l1"><a class="reference internal" href="../client_mobile/index.html">AREA Client Mobile</a></li> | ||
<li class="toctree-l1"><a class="reference internal" href="../server/index.html">AREA Server</a></li> | ||
</ul> | ||
|
||
</div> | ||
</div> | ||
</nav> | ||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > | ||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||
<a href="../index.html">AREA</a> | ||
</nav> | ||
|
||
<div class="wy-nav-content"> | ||
<div class="rst-content"> | ||
<div role="navigation" aria-label="Page navigation"> | ||
<ul class="wy-breadcrumbs"> | ||
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li> | ||
<li class="breadcrumb-item"><a href="index.html">AREA Project</a></li> | ||
<li class="breadcrumb-item active">Tech Stack Benchmark and Justification</li> | ||
<li class="wy-breadcrumbs-aside"> | ||
<a href="../_sources/Project/benchmark.rst.txt" rel="nofollow"> View page source</a> | ||
</li> | ||
</ul> | ||
<hr/> | ||
</div> | ||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||
<div itemprop="articleBody"> | ||
|
||
<section id="tech-stack-benchmark-and-justification"> | ||
<h1>Tech Stack Benchmark and Justification<a class="headerlink" href="#tech-stack-benchmark-and-justification" title="Link to this heading"></a></h1> | ||
<p>This document provides a comparative study and justification for the chosen tech stack for a project aimed at creating an app (web and mobile) for automation via connection services. The app will provide triggers and actions that users can combine. The chosen stack includes:</p> | ||
<ul class="simple"> | ||
<li><p><strong>Web</strong>: Vite + React + TypeScript</p></li> | ||
<li><p><strong>Mobile</strong>: Flutter</p></li> | ||
<li><p><strong>Server</strong>: Go</p></li> | ||
<li><p><strong>Database</strong>: MariaDB</p></li> | ||
</ul> | ||
<p>Below is the detailed analysis of the stack and comparisons with alternatives.</p> | ||
<section id="web-vite-react-typescript"> | ||
<h2>Web: Vite + React + TypeScript<a class="headerlink" href="#web-vite-react-typescript" title="Link to this heading"></a></h2> | ||
<p><strong>Justification</strong>: | ||
- <strong>React</strong>:</p> | ||
<blockquote> | ||
<div><ul class="simple"> | ||
<li><p><strong>Mature Ecosystem</strong>: A well-established library with vast community support, making development fast and reliable.</p></li> | ||
<li><p><strong>Declarative UI</strong>: Simplifies the creation of dynamic, interactive user interfaces.</p></li> | ||
<li><p><strong>Component Reusability</strong>: Promotes modular and maintainable code.</p></li> | ||
</ul> | ||
</div></blockquote> | ||
<ul class="simple"> | ||
<li><p><strong>Vite</strong>: | ||
- <strong>Fast Development</strong>: Extremely fast build and hot module replacement (HMR) compared to alternatives like Webpack. | ||
- <strong>Optimized Builds</strong>: Produces smaller and faster production builds.</p></li> | ||
<li><p><strong>TypeScript</strong>: | ||
- <strong>Type Safety</strong>: Reduces runtime errors and enhances code maintainability. | ||
- <strong>Better Tooling</strong>: Superior editor autocompletion and refactoring support.</p></li> | ||
</ul> | ||
<p><strong>Comparisons</strong>:</p> | ||
<table class="docutils align-default"> | ||
<thead> | ||
<tr class="row-odd"><th class="head"><p><strong>Tech</strong></p></th> | ||
<th class="head"><p><strong>React</strong></p></th> | ||
<th class="head"><p><strong>Vue</strong></p></th> | ||
<th class="head"><p><strong>Angular</strong></p></th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr class="row-even"><td><p>Learning Curve</p></td> | ||
<td><p>Moderate</p></td> | ||
<td><p>Easy</p></td> | ||
<td><p>Steep</p></td> | ||
</tr> | ||
<tr class="row-odd"><td><p>Performance</p></td> | ||
<td><p>Fast</p></td> | ||
<td><p>Comparable to React</p></td> | ||
<td><p>Slower for large apps</p></td> | ||
</tr> | ||
<tr class="row-even"><td><p>Ecosystem</p></td> | ||
<td><p>Extensive</p></td> | ||
<td><p>Growing but smaller</p></td> | ||
<td><p>Complete framework</p></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
<table class="docutils align-default"> | ||
<thead> | ||
<tr class="row-odd"><th class="head"><p><strong>Build Tool</strong></p></th> | ||
<th class="head"><p><strong>Vite</strong></p></th> | ||
<th class="head"><p><strong>Webpack</strong></p></th> | ||
<th class="head"><p><strong>Parcel</strong></p></th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr class="row-even"><td><p>Speed</p></td> | ||
<td><p>Fastest</p></td> | ||
<td><p>Slow</p></td> | ||
<td><p>Moderate</p></td> | ||
</tr> | ||
<tr class="row-odd"><td><p>Simplicity</p></td> | ||
<td><p>Simple</p></td> | ||
<td><p>Complex</p></td> | ||
<td><p>Simple</p></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
<p><strong>Conclusion</strong>: | ||
React, Vite, and TypeScript combine speed, maintainability, and a robust ecosystem, outperforming alternatives for this web project.</p> | ||
</section> | ||
<section id="mobile-flutter"> | ||
<h2>Mobile: Flutter<a class="headerlink" href="#mobile-flutter" title="Link to this heading"></a></h2> | ||
<p><strong>Justification</strong>: | ||
- <strong>Single Codebase</strong>: Write once, deploy to Android, iOS, and web. | ||
- <strong>Performance</strong>: Near-native performance due to Dart compiling to native machine code. | ||
- <strong>Customizable UI</strong>: Powerful widgets for designing complex UIs. | ||
- <strong>Fast Development</strong>: Hot reload and an extensive library of plugins.</p> | ||
<p><strong>Comparisons</strong>:</p> | ||
<table class="docutils align-default"> | ||
<thead> | ||
<tr class="row-odd"><th class="head"><p><strong>Tech</strong></p></th> | ||
<th class="head"><p><strong>Flutter</strong></p></th> | ||
<th class="head"><p><strong>React Native</strong></p></th> | ||
<th class="head"><p><strong>Swift/Kotlin</strong></p></th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr class="row-even"><td><p>Code Reuse</p></td> | ||
<td><p>High</p></td> | ||
<td><p>High</p></td> | ||
<td><p>None</p></td> | ||
</tr> | ||
<tr class="row-odd"><td><p>Performance</p></td> | ||
<td><p>Near-native</p></td> | ||
<td><p>Moderate (JS bridge)</p></td> | ||
<td><p>Native</p></td> | ||
</tr> | ||
<tr class="row-even"><td><p>UI Flexibility</p></td> | ||
<td><p>Highly Customizable</p></td> | ||
<td><p>Limited</p></td> | ||
<td><p>Native-specific</p></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
<p><strong>Conclusion</strong>: | ||
Flutter’s cross-platform capabilities and performance make it ideal for quickly developing a polished mobile app.</p> | ||
</section> | ||
<section id="server-go"> | ||
<h2>Server: Go<a class="headerlink" href="#server-go" title="Link to this heading"></a></h2> | ||
<p><strong>Justification</strong>: | ||
- <strong>Performance</strong>: Compiles to native machine code, offering fast execution and low resource usage. | ||
- <strong>Scalability</strong>: Excellent concurrency model using goroutines and channels. | ||
- <strong>Minimalistic</strong>: Clean syntax and reduced dependencies compared to verbose frameworks.</p> | ||
<p><strong>Comparison with Alternatives</strong>:</p> | ||
<table class="docutils align-default"> | ||
<thead> | ||
<tr class="row-odd"><th class="head"><p><strong>Tech</strong></p></th> | ||
<th class="head"><p><strong>Go</strong></p></th> | ||
<th class="head"><p><strong>NestJS (TypeScript)</strong></p></th> | ||
<th class="head"><p><strong>Flask (Python)</strong></p></th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr class="row-even"><td><p>Performance</p></td> | ||
<td><p>High</p></td> | ||
<td><p>Moderate</p></td> | ||
<td><p>Low</p></td> | ||
</tr> | ||
<tr class="row-odd"><td><p>Scalability</p></td> | ||
<td><p>Excellent</p></td> | ||
<td><p>Good</p></td> | ||
<td><p>Poor</p></td> | ||
</tr> | ||
<tr class="row-even"><td><p>Learning Curve</p></td> | ||
<td><p>Moderate</p></td> | ||
<td><p>Easy</p></td> | ||
<td><p>Easy</p></td> | ||
</tr> | ||
<tr class="row-odd"><td><p>Ecosystem</p></td> | ||
<td><p>Moderate</p></td> | ||
<td><p>Mature</p></td> | ||
<td><p>Mature</p></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
<ul class="simple"> | ||
<li><p><strong>NestJS</strong>: Strong for projects already using TypeScript but adds framework overhead.</p></li> | ||
<li><p><strong>Flask</strong>: Lightweight but lacks built-in scalability and performance for heavy tasks.</p></li> | ||
</ul> | ||
<p><strong>Conclusion</strong>: | ||
Go’s high performance and concurrency handling make it a better choice for a scalable automation service backend.</p> | ||
</section> | ||
<section id="database-mariadb"> | ||
<h2>Database: MariaDB<a class="headerlink" href="#database-mariadb" title="Link to this heading"></a></h2> | ||
<p><strong>Justification</strong>: | ||
- <strong>Relational Structure</strong>: Supports complex queries and ensures data consistency, ideal for user workflows and triggers. | ||
- <strong>Performance</strong>: Optimized for high transaction rates with multi-threading and memory improvements. | ||
- <strong>Compatibility</strong>: Drop-in replacement for MySQL with a large community and ecosystem.</p> | ||
<p><strong>Comparisons</strong>:</p> | ||
<table class="docutils align-default"> | ||
<thead> | ||
<tr class="row-odd"><th class="head"><p><strong>Database</strong></p></th> | ||
<th class="head"><p><strong>MariaDB</strong></p></th> | ||
<th class="head"><p><strong>MongoDB</strong></p></th> | ||
<th class="head"><p><strong>PostgreSQL</strong></p></th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr class="row-even"><td><p>Schema</p></td> | ||
<td><p>Relational (Strict Schema)</p></td> | ||
<td><p>NoSQL (Schema-free)</p></td> | ||
<td><p>Relational (Flexible)</p></td> | ||
</tr> | ||
<tr class="row-odd"><td><p>Scalability</p></td> | ||
<td><p>High</p></td> | ||
<td><p>High</p></td> | ||
<td><p>Moderate</p></td> | ||
</tr> | ||
<tr class="row-even"><td><p>Querying</p></td> | ||
<td><p>SQL</p></td> | ||
<td><p>JSON/BSON</p></td> | ||
<td><p>Advanced SQL</p></td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
<ul class="simple"> | ||
<li><p><strong>MongoDB</strong>: Better for schema-less, document-based storage but less suited for relational data.</p></li> | ||
<li><p><strong>PostgreSQL</strong>: Advanced features but overkill for simple relational use cases.</p></li> | ||
</ul> | ||
<p><strong>Conclusion</strong>: | ||
MariaDB balances simplicity, performance, and compatibility, fitting the automation app’s needs.</p> | ||
</section> | ||
<section id="overall-synergy"> | ||
<h2>Overall Synergy<a class="headerlink" href="#overall-synergy" title="Link to this heading"></a></h2> | ||
<p>The selected tech stack optimizes for: | ||
- <strong>Performance</strong>: Go and Flutter ensure fast server and mobile app execution. | ||
- <strong>Scalability</strong>: Go and MariaDB handle high concurrency and transaction rates. | ||
- <strong>Developer Experience</strong>: React, Vite, and TypeScript streamline web development. | ||
- <strong>Cross-Platform Reach</strong>: Flutter enables rapid multi-platform deployment.</p> | ||
<p>This stack effectively balances development speed, scalability, and maintainability while outperforming alternatives for this automation-focused app.</p> | ||
</section> | ||
</section> | ||
|
||
|
||
</div> | ||
</div> | ||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer"> | ||
<a href="index.html" class="btn btn-neutral float-left" title="AREA Project" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a> | ||
<a href="../client_web/index.html" class="btn btn-neutral float-right" title="AREA Client Web" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a> | ||
</div> | ||
|
||
<hr/> | ||
|
||
<div role="contentinfo"> | ||
<p>© Copyright 2024, Maël RABOT, Mathieu COULET, Mathieu BOREL, Charles MADJERI, Samuel BRUSCHET.</p> | ||
</div> | ||
|
||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a | ||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> | ||
provided by <a href="https://readthedocs.org">Read the Docs</a>. | ||
|
||
|
||
</footer> | ||
</div> | ||
</div> | ||
</section> | ||
</div> | ||
<script> | ||
jQuery(function () { | ||
SphinxRtdTheme.Navigation.enable(true); | ||
}); | ||
</script> | ||
|
||
</body> | ||
</html> |
Oops, something went wrong.