Independently designed a fully functional website, MasterBUY, as an open-source project, to help users purchase products through a user-friendly front-end and help the admin user manage products available on the website and customers’ orders. The website was developed with a scalable backend and connected to a payment gateway (PayPal). The used languages/Techniques are HTML and CSS, and user interactivity by JavaScript, implement frontend using React and Redux and build a web API using Node Js and MongoDB.
- HTML5 and CSS3 including flexbox to design website.
- JavaScript to make dynamic pages.
- React.JS to implement a fully functional Ecommerce frontend like sign-in,cart etc.
- Redux to manage the state of whole application in a predictable manner.
- Node.JS and Express JS to build a scalable backend in measurable way “web server, API”.
- Mongoose object data mapper to model data and create relationship between them.
- JSONwebToken ‘JWT’ to authenticate users and http requests.
- Bcryptjs to encrypt the passwords in the Database.
- MongoDB to create and managed cloud-based database to save and retrieve data like products, orders, and users.
- Payment API to make real payment on the website.
- EmilJS to send payment notification to use.
- Multer to upload files.
- Create React App.
- Create Node.Js Server
- Fetch server Data
- Add Redux to Home Screen.
- Connect to MongoDB.
- Create Place Order API
I used JMeter to test my website ability to handle high number of requests coming at the same time (high-traffic). Single Page Applications behavior is totally varied than typical web applications. During the homepage load, all the objects will be loaded to the Document Object Model. Further navigation in the application is purely based on how the application is designed.
- When I recorded test results for my Application in JMeter using web protocols after running testing plan for 2 minutes, it captured only the service calls, which is not the actual communication between the client and the server in React application.
- I made a client-side performance analysis using WebDriver sample. Firstly, I created a test plan then a thread group represents the users and defined in it the number of expected users(thread)=10, ramp up period=20 and make a loop count equal to 3. After that I created WebDriver Sampler and in script section defined “http://localhost:3000” as tested client. Then I added a config element for Chrome Driver Config and set the pat to chromedriver.exe as a default driver. I added a listener as view results tree. Finally run the test plan.
- I run the plan for more than 3 minutes and the response message of each request was ‘OK’ with code= 200, which means that the request sent successfully,
- The load time & latency time. Here I consider these two fields only because these are the values, I need to use for analyzing my website performance: . Latency time is number of seconds taken to get the first initial response from the server for each request, which was 0 means that my server was in his ideal state for receiving the request and serving it. . Sample time is the time taken by the server to fully serve the request. Here I noticed that this time varies between the requests according to how many requests received by the server at the same time. At the very first requests the server takes longer to serve them and being faster on the last requests.
- I tested all APIs in my application using developer tools feature in chrome web browser, by viewing XHR requests which received by the browser, where each service call will return its output in JSON format.
- https://stackoverflow.com/
- https://reactjs.org/
- https://redux.js.org/
- https://nodejs.org/en/
- https://mongoosejs.com/
- https://jwt.io/
- https://www.npmjs.com/package/bcryptjs
- https://www.mongodb.com/
- https://developer.paypal.com/
- https://www.emailjs.com/
- https://www.npmjs.com/package/multer
- https://code.visualstudio.com/
- https://nodemon.io/
- https://www.freecodecamp.org/news/introduction-to-mongoose-for-mongodbd2a7aa593c57/
- https://www.npmjs.com/package/express-async-handler
- https://www.npmjs.com/package/body-parser
- https://www.npmjs.com/package/bcryptjs
- https://www.npmjs.com/package/multer
- https://jmeter.apache.org/download_jmeter.cgi
- https://github.com/undera/jmeter-plugins-webdriver)