Attention
Version 3 is now the current version of MathJax. This document is for version 1.
The MathJax Startup Sequence¶
When you load MathJax.js into a web page, it configures itself and
immediately begins loading the components it needs. As MathJax starts
up, it uses its signaling mechanism
to indicate the actions that it is taking so that MathJax extensions
can tie into the initialization process, and so other applications
within the page can synchronize their actions with MathJax.
The startup process performs the following actions:
It creates the
MathJaxvariable, and defines the following subsystems:MathJax.Object(object-oriented programming model)MathJax.Callback(callbacks, signals, and queues)MathJax.Ajax(file-loading and style-creation code)MathJax.HTML(support code for creating HTML elements)MathJax.Message(manages the menu line in the lower left)MathJax.Hub(the core MathJax functions)
It then creates the base
MathJax.InputJax,MathJax.OutputJax, andMathJax.ElementJaxobjects.
MathJax sets up the default configuration, and creates the signal objects used for the startup and hub actions.
MathJax locates the
<script>tag that loaded theMathJax.jsfile, and sets theMathJax.Hub.config.rootvalue to reflect the location of the MathJax root directory.
MathJax determines the browser being used and its version. It sets up the
MathJax.Hub.Browserobject, which includes the browser name and version, plusisMac,isPC,isMSIE, and so on.
MathJax set up the
MathJax.Hub.queuecommand queue, and populates it with the commands MathJax runs at startup. This includes creating theMathJax.Hub.Startup.onloadonload handler that is used to synchronize MathJax’s action with the loading of the page.
Once the MathJax.Hub.queue is created, the following actions are
pushed into the queue:
Post the
Beginstartup signal
Perform the configuration actions:
Post the
Begin Configstartup signalLoad any configuration files specified via
config=as a script parameterExecute the content of the
<script>that loaded MathJax, if it is not emptyWait for the
delayStartupUntilcondition to be met, if one was specifiedExecute any
text/x-mathjax-configscript blocksload the files listed in the
MathJax.Hub.config.configarrayPost the
End Configstartup signal
Load the cookie values:
Post the
Begin Cookiestartup signalLoad the menu cookie values
Use the cookie to set the renderer, if it is set
Post the
End Cookiestartup signal
Define the MathJax styles:
Post the
Begin Stylesstartup signalLoad the stylesheet files from the
MathJax.Hub.config.stylesheetsarrayDefine the stylesheet described in
MathJax.Hub.config.stylesPost the
End Stylesstartup signal
Load the jax configuration files:
Post the
Begin Jaxstartup signalLoad the jax config files from the
MathJax.Hub.config.jaxarrayThe jax will register themselves when they are loaded
Post the
End Jaxstartup signal
Load the extension files:
Post the
Begin Extensionstartup signalLoad the files from the
MathJax.Hub.config.extensionsarrayMost extensions will post a
Extension [name] Readystartup message when they are loaded (where[name]is the name of the extension)
Post the
End Extensionstartup signal
Set the MathJax menu’s renderer value based on the jax that have been loaded
Wait for the onload handler to fire
Set
MathJax.isReadytotrue
Perform the typesetting pass (preprocessors and processors)
Post the
Begin Typesetstartup signalPost the
Begin PreProcesshub signalRun the registered preprocessors
Post the
End PreProcesshub signalClear the hub signal history
Post the
Begin Processhub signalProcess the math script elements on the page
Each new math element generates a
New Mathhub signal with the math element’s ID
Post the
End Processhub signalPost the
End Typesetstartup signal
Post the
Endstartup signal
The loading of the jax and extensions in steps 5 and 6 are now done in parallel, rather than sequentially. That is, all the jax and extensions are requested simultaneously, so they load concurrently. That means they can load in any order, and that the begin and end signals for the jax and extensions can be intermixed. (In general, you will get Begin Jax followed by Begin Extensions, but the order of End Jax and End Extensions will depend on the files being loaded.) Both 5 and 6 must complete, however, before 7 will be performed.
See the test/sample-signals.html file to see the signals in action.