{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Experiments\n", "\n", "The [experiments source folder](https://github.com/jupyterlab/benchmarks/tree/master/experiments) contains code useful to find the root cause of the issues." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simple Notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Editor Comparison\n", "\n", "We compare for different editor technologies the time (in seconds) needed to receive the `DOMContentLoaded` event for 1000 editors.\n", "\n", "- 1000 CodeMirrors: 50 seconds.\n", "- 1000 JupyterLab Cells: 50 seconds.\n", "- 1000 JupyterLab Cells in a Lumino BoxPanel: 10 seconds for DOMContentLoaded, cells are only shown after 140 seconds.\n", "- 1000 Monaco: 40 seconds for DOMContentLoaded, editors are only shown after 60 seconds.\n", "- 1000 ProseMirror (basic version): 2 seconds.\n", "- 1000 ReMirror: 50 seconds." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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sX///gzPIyoqymjUqJFd29q1aw1JRvXq1Y3169cb27ZtM4KDg406deoYzz77rLFt2zbjxx9/NPLnz2+MHj3abqyAgABj6dKlxp49e4wOHToYefPmtZ3bzXFDQ0ONFStWGPv37zdOnTpljBgxwihbtqzxww8/GAcOHDBmzpxpWK1WIzY2NtP5L1asmDFx4kTDMAxjwYIFhre3t7F06VLj0KFDxsaNG41PPvkk030rVapkjBs3zjAMw9i+fbuRL18+w9XV1fb98NprrxkRERGGYRhGSkqK4e/vb/z73/82du3aZaxevdooXry40aFDB9t4HTp0MLy8vIx27doZu3fvNnbv3m2cOnXKKFKkiPHee+/Zvt8M48bfCRcXF6NBgwbG5s2bja1btxohISHGyy+/bFdjQkKCIck4ePBgpucBIOchvAIA4CDZCa+1atWyvb927Zrh6elptGvXztZ2/PhxQ5KxYcMGwzAMY/jw4cazzz5rN+6RI0cMSUZiYmKW69m7d68hyYiLi7O1/f3334a7u7sxf/78TM9NktGrVy+7tvr16xujRo2ya/viiy8Mf39/u/3effdd2/uUlBRDkrFs2TLDMAxj4MCBRrly5ezG6N+/v1147dy5s9GlSxe7Pj/99JPh5ORkXLx40TCMG+GuRYsWmdZ/U/PmzY1OnTrZtd0MmatWrbK1RUdHG5KMAwcO2NreeOMNIzw83HYeLi4uxpw5c2zbr1y5YgQEBBhjx461G3fRokW2PpcuXTI8PDyMn3/+2a6Gzp07Gy+99FKmdd8aXsePH2+ULl36jr9suFXv3r2NJk2aGIZhGJMmTTJeeOEFo2LFiravQXBwsC38fvLJJ0bevHmNlJQU2/7ff/+94eTkZJw4ccIwjBvfz76+vsbly5czrfGmmTNnGpLsfpnw0UcfGb6+vnb9kpOTDUl3DPAAch7ueQUA4BEQGhpq+3OuXLmUP39+VahQwdbm6+srSTp58qQkaceOHVq7dm2G988eOHBApUuXztJxExIS5OzsrKeeesrWlj9/fpUpU0YJCQl33LdKlSp273fs2KG4uDjbJcSSdP36dV26dEmpqany8PBId66enp7y9va2nVdCQoJdLZJUo0aNdMfZuXOn5syZY2szDENpaWk6ePCgQkJCMqwvIxcvXpSbm1uG226t09fXVx4eHipRooRd26ZNmyTdmPOrV6+qZs2atu0uLi6qVq1aunm8ta79+/crNTVVDRs2tOtz5coVhYWF3bV+SWrTpo0mTZqkEiVKqFGjRmrcuLGaNWuW6b20derU0eeff67r169r3bp1evbZZ+Xn56fY2FiFhoZq//79qlu3rqQbX4+KFSvK09PTtn/NmjWVlpamxMRE2/dlhQoVsnyfq4eHh0qWLGl77+/vb/v63+Tu7i5JdpdlA8j5CK8AADwCbn/YkcVisWu7ec9gWlqaJCklJUXNmjXTmDFj0o3l7+//ACv9f7cGmps1DRs2TP/+97/T9b01IGZ0rjfPKytSUlL0xhtvZHhfZ9GiRTOtLyMFChTQmTNnMtx2+/z/07ozquvmvaPff/+9ChcubNfParVmabzAwEAlJiZq1apVWrlypbp3765x48Zp3bp1GT5E65lnntH58+e1bds2/fjjjxo1apT8/Pw0evRoVaxYUQEBASpVqtQ9n9PdZDSPhmHYtZ0+fVqSuR9MBeD+I7wCAJADVapUSQsXLlRQUFCWn1br6uqq69ev27WFhITo2rVr2rhxo55++mlJNz73NDExUeXKlct2TYmJiQoODs7WfrfXc/sDnH755Zd0x4mPj/9Hx7kpLCxMX3755T8ep2TJknJ1dVVcXJyKFSsm6cYTmDdv3qxevXplul+5cuVktVp1+PBh1alT556P7+7urmbNmqlZs2bq0aOHypYtq127dqlSpUrp+vr4+Cg0NFRTpkyRi4uLypYtq0KFCumFF17QkiVL7OoICQlRTEyMLly4YAuocXFxcnJyUpkyZe5YU0bfb1m1e/duubi46Iknnrin/QE8mnjaMAAAOVCPHj10+vRpvfTSS9q8ebMOHDig5cuX69VXX800MAQFBSklJUWrV6/W33//rdTUVJUqVUrNmzfX66+/rvXr12vHjh165ZVXVLhwYTVv3jxbNQ0ePFizZ8/WsGHDtGfPHiUkJGju3Ll69913szxG165dtW/fPvXr10+JiYn66quv0n0mbv/+/fXzzz8rMjJS27dv1759+/Tdd98pMjIyW/VKUnh4uPbs2ZPp6mtWeXp6qlu3burXr59++OEHxcfH6/XXX1dqaqo6d+6c6X65c+dW37599dZbb2nWrFk6cOCAtm3bpg8//FCzZs3K0rFjYmL0+eefa/fu3fr999/15Zdfyt3d3RaiM1K3bl3NmTPHFlTz5cunkJAQzZs3zy68RkREyM3NTR06dNDu3bu1du1a9ezZU+3atbNdMpyZoKAg/fjjjzp27FimT8HOzE8//WR7mjSAxwfhFQCAHCggIEBxcXG6fv26nn32WVWoUEG9evWSj4+PnJwy/uf/6aefVteuXfXCCy+oYMGCGjt2rCRp5syZqly5spo2baoaNWrIMAwtXbo025/bGh4eriVLlmjFihWqWrWqqlevrokTJ94xRN2uaNGiWrhwoRYtWqSKFStq2rRpGjVqlF2f0NBQrVu3Tnv37lXt2rUVFhamwYMHKyAgIFv1Sjfu1axUqZLmz5+f7X1vN3r0aLVq1Urt2rVTpUqVtH//fi1fvlx58+a9437Dhw/XoEGDFB0drZCQEDVq1Ejff/+9ihcvnqXj+vj46NNPP1XNmjUVGhqqVatW6X//+5/y58+f6T516tTR9evXbfe2SjcC7e1tHh4eWr58uU6fPq2qVauqdevWql+/vqZMmXLXut577z0lJSWpZMmS2b78d+7cuXr99deztQ+AR5/FuP0mAgAAANh8//336tevn3bv3p1p8MfDs2zZMvXp00c7d+7M8iXxAHIG/sYDAADcQZMmTbRv3z4dO3ZMgYGBji7nsXfhwgXNnDmT4Ao8hlh5BQAAAACYHte+AAAAAABMj/AKAAAAADA9wisAAAAAwPQIrwAAAAAA0yO8AgAAAABMj/AKAAAAADA9wisAAAAAwPQIrwAAAAAA0yO8AgAAAABM7/8A6HXuuY2diiIAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "plt.rcdefaults()\n", "fig, ax = plt.subplots(figsize=(9,5))\n", "\n", "\"\"\"\n", "1000 JupyterLab Cells: 50 seconds.\n", "1000 JupyterLab Cells in a Lumino BoxPanel: 10 seconds for DOMContentLoaded, cells are only shown after 140 seconds.\n", "1000 CodeMirrors: 50 seconds.\n", "1000 Monaco: 40 seconds for DOMContentLoaded, editors are only shown after 60 seconds.\n", "1000 ProseMirror (basic version): 2 seconds.\n", "1000 ReMirror: 50 seconds.\n", "\"\"\"\n", "exp = ('CodeMirrors', 'JLab Cells', 'JLab Cells in Lumino', 'JLab Cells in Lumino (no resize)', 'Monaco', 'ProseMirror (base)', 'ReMirror')\n", "y_pos = np.arange(len(exp))\n", "performance = [50,50,140,50,60,2,50]\n", "ax.barh(y_pos, performance, align='center')\n", "ax.set_yticks(y_pos)\n", "ax.set_yticklabels(exp)\n", "ax.invert_yaxis() # labels read top-to-bottom\n", "ax.set_xlabel('Time to render (more is worth)')\n", "ax.set_title('Render 1000 Editors')\n", "plt.savefig('./../../../decks/root-causes/images/exp.png')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CodeMirror\n", "\n", "The time measures from 1 to 1000 CodeMirror editors show an non-linear nature." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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1CimTJlCXl6e387DMIyjK61ycecbK4gNC2b5g2fjCG7hCIJpifjFIx+vZ0NuWYvuMz05iocuHHzMbaqrqxkxYgQ1NTXk5eXx1VfWgn8Oh4MPPviAqKgoCgsLGTduHBdddBGff/45ycnJfPrppwCUlpbicrn4yU9+wuzZs0lMTOTtt9/m17/+NTNnzmzR8zEM4+R4vcrdb68kd381b902nviIUJ8cxwSRTqRxd9bChQu5/vrrWbduHarKr371K7755hsCAgLIyclh3759DB06lHvuuYf77ruPCy64gNNOO41169axbt06zjnnHAA8Hg/dunXz41kZhnEkf/tyK/M2F/DbaYMZ1TvWZ8cxQcQPjtdiaA3jx4+nsLCQgoIC5syZQ0FBAcuXLyc4OJiUlBRqamro378/K1asYM6cOTz44IOcddZZXHLJJQwePJiFCxf6+xQMwziKLzfu429fbuWyjB5cO663T4/lszEREXGIyBIRWS0i60XkEbu8j4gsFpFtIvK2iITY5aH282326ymN9vWAXb5ZRKY0Kp9ql20Tkft9dS4d0aZNm/B4PMTHx1NaWkqXLl0IDg5m3rx57NplJevMzc0lLCyMa6+9lnvvvZcVK1YwYMAACgoKGoKIy+Vi/fr1/jwVwzAaySqs5O63VzE4OYrfXzLE59cl+bIlUgucqaoVIhIMfCcinwE/B55S1bdE5J/AzcBz9n2JqvYTkauAx4EfiEg6cBUwGEgG/ici/e1j/AM4B8gGlorIR6q6wYfn1K7Vj4mAlX7jlVdeITAwkOnTp3PhhRcydOhQMjMzGThwIABr167l3nvvJSAggODgYJ577jlCQkJ49913+elPf0ppaSlut5u7776bwYP937oyjM6uqs7N7a8tJzBA+Oe1o3wykH4onwURVVWgwn4abN8UOBO4xi5/BXgYK4hMsx8DvAs8I1YInQa8paq1wE4R2QaMsbfbpqo7AETkLXtbE0SOwuPxHLE8ISHhiN1TKSkpTJky5bDyESNG8M0337R4/QzDaD5V5b731rIlv5xXbhxDz7iwVjmuT6f4ikigiKwC8oEvgO3AflV125tkA93tx92BPQD266VAfOPyQ95ztPIj1eM2EVkmIssKCgpa4MwMwzDalpe+28nHq3P5xeQBnN7/sAUIfcanQURVPao6AuiB1XoY6MvjHaMez6tqpqpm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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "df = pd.read_csv('./exp/codemirror-comparison.csv')\n", "df.set_index('cell-id', inplace=True)\n", "\n", "def plot():\n", " plt.title('CodeMirrors in HTML')\n", " plt.xlabel('Number of CodeMirrors')\n", " plt.ylabel('Time to Display')\n", " plt.plot(df['base'], label = 'Base')\n", " plt.plot(df['contain'], label = 'Contain')\n", " plt.plot(df['operation'], label = 'Operation')\n", " plt.plot(df['operation+contain'], label = 'Operation+Contain')\n", " plt.plot(df['next'], label = 'Next')\n", " plt.legend(bbox_to_anchor=(0.5, 0.6), loc='lower right')\n", "\n", "plot()\n", "plt.savefig('./../../../decks/root-causes/images/codemirror-comparison.png')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGzCAYAAADJ3dZzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+m0lEQVR4nO3deVwVZf//8fcBBNwAMRVIxH0rEZcyd80NKbWv5pYplql5uyVl6bfFLZe00lLT6k7MO0uz0nYTzS13KdwiFW/3QFNTBBMVrt8f/jxfT4ByFDwwvZ6PxzwezDXXXPOZwzHeXWdmjs0YYwQAAGBRbq4uAAAAIC8RdgAAgKURdgAAgKURdgAAgKURdgAAgKURdgAAgKURdgAAgKURdgAAgKURdgAAgKURdgDke2vWrJHNZtOaNWvsbX379lX58uVdVtOd0qJFC917770uObbNZtOQIUNccmwgNxF2gHwmJSVFY8aMUXh4uPz9/WWz2TR//vxs+8fHxys8PFzFihWTv7+/evfurT/++CNTv4yMDE2dOlUVKlSQt7e3QkND9cknn9zWmNm5ePGipk+frgYNGsjX11fe3t6qWrWqhgwZon379uV4nDvFZrPJZrPpjTfeyLRt/vz5stls2r59u9Pjbty4UWPHjtXZs2dzoUoAt4qwA+Qzp06d0vjx4xUfH6/atWvfsO+xY8fUrFkzJSQkaNKkSXruuef07bffqk2bNrp06ZJD3xdffFEvvPCC2rRpo5kzZ6pcuXJ67LHHtGjRolseM7v6mzRpoqioKJUuXVrjx4/X7Nmz9cgjj+irr75y2SxFTkybNk0XLlzItfE2btyocePGEXYAF/NwdQEAHAUGBioxMVEBAQHavn277rvvvmz7Tpo0SampqYqNjVW5cuUkSffff7/atGmj+fPna8CAAZKk48eP64033tDgwYM1a9YsSdJTTz2l5s2ba+TIkeratavc3d2dGjM7ffv21S+//KLPPvtMXbp0cdg2YcIEvfjii7f2wuSxsLAwxcXFae7cuYqKinJ1OQByETM7QD7j5eWlgICAHPX9/PPP9fDDD9tDiSS1bt1aVatW1aeffmpv+/LLL3X58mX961//srfZbDYNGjRIx44d06ZNm5weMytbtmzRt99+q379+mUKOtfO7fXXX3do++233/Too4/K399f3t7eql+/vr766qsc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TRvNmzdPGRkZOR5n/vz5BeJp53379tUjjzzi6jLyvQ4dOig8PDzLbevXr5fNZtPOnTv13HPPOTw4Njt36o99Vq69x6dMmeLQvmzZMqe/hsiV52FVhB3c0Nq1azV48GBt3rxZMTExunz5stq2bavU1NRs91mzZo169uyp1atXa9OmTQoODlbbtm11/PjxbPfZsGGD+vTpo379+mnPnj1asmSJtm7dqv79++fFacEFwsPDlZiYqEOHDun7779Xy5YtNXz4cD388MO6cuWKq8uDC/Tr108xMTE6duxYpm3R0dGqX7++QkNDVaxYMZUsWTLbcS5dupSXZeaYt7e3XnvtNf3555+uLgV/ZwAnnDx50kgya9euzfE+V65cMcWLFzcffvhhtn2mTZtmKlas6ND29ttvm7vvvvuWa0X+ERkZaTp16pSpfdWqVUaSef/9940xxvz555+mX79+5q677jLFixc3LVu2NHFxcfb+0dHRxtfXN9vjfP/996Zx48bG19fX+Pv7m4ceesgkJCTYt7ds2dIMHjzYYZ+TJ0+aQoUKmZUrVxpjjDlz5ozp3bu38fPzM4ULFzbh4eFm37599v5jxowxtWvXdhhj+vTpJiQkxL5dksOyevXqHLxK/zyXL182ZcqUMRMmTHBoP3/+vClWrJiZM2eOMSbza37t/fTqq6+awMBAU758edO8efNMr3tW+xrj+PsyxpitW7ea1q1bm5IlSxofHx/TrFkzExsb67CPJLN06dJszyUyMtI8/PDDpnr16mbkyJH29qVLl5q//6n97LPPTM2aNY2np6cJCQkxr7/+un1bdudhjDHr1683TZo0Md7e3qZs2bJm6NChJiUlxb49JCTEjB8/3vTo0cMUKVLEBAUFmVmzZjkc+/Dhw6Zjx46maNGipnjx4qZr164mKSnJoc8777xjKlasaAoVKmSqVq1qFixYcMPX4pVXXjEBAQFmx44d2b4+rsbMDpxy7tw5SZK/v3+O97lw4YIuX758w30aNmyoo0eP6rvvvpMxRidOnNBnn32miIiI264Z+deDDz6o2rVr64svvpAkde3aVSdPntT333+v2NhY1a1bV61atdKZM2dyNF5qaqqioqK0fft2rVq1Sm5ubvqf//kf+0dlTz31lD7++GOlpaXZ9/noo490991368EHH5R09eOI7du366uvvtKmTZtkjFFE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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt;\n", "import matplotlib.pyplot as plt\n", "\n", "y_pos = ('2.2.8', 'DeLayout', 'Virtual Notebook')\n", "performance = [185, 155, 10]\n", "\n", "plt.bar(y_pos, performance, align='center', alpha=0.5)\n", "plt.ylabel('Time to display')\n", "plt.title('1000 Cells Notebook')\n", "\n", "plt.savefig('./../../../decks/root-causes/images/fixes-comparison.png')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Lumino actions on resize\n", "\n", "- https://github.com/jupyterlab/lumino/blob/master/packages/widgets/src/widget.ts#L610 \n", "- https://github.com/jupyterlab/jupyterlab/search?q=onResize \n", "- https://github.com/jupyterlab/lumino/search?q=onResize " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }