On Fri, Feb 12, 2016 at 6:07 AM, Strainu <[email protected]> wrote:

> There are obviously some optimizations there and I would be curious
> what they are? Do you use some CoW or other trick to prevent loading
> that table 100 times?


Regarding memory usage, much of the actual data generated during an #invoke
is no longer referenced afterward and can be garbage collected, so the peak
memory usage won't necessarily increase.

Regarding loading, Lua has a two-step process for loading a package: the
searcher returns a loader function, then the loader function returns the
actual package table. Scribunto's searcher caches the loader functions
inside Lua across #invokes, which can speed up subsequent loads. For
modules loaded from the wiki, the PHP code that fetches the text of the
module page also caches that text across #invokes.

If your table is static data, you can go one better by using mw.loadData()
to load it. This caches the actual data table inside Lua across #invokes.


> Do you have the loading/parsing process documented somewhere?
>

The standard Lua package module is documented at
http://www.lua.org/manual/5.1/manual.html#5.3

mw.loadData() is documented from an end-user standpoint at
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.loadData

If you want to look at the actual code, the package module is implemented
in engines/LuaCommon/lualib/package.lua, the searcher is near the top of
engines/LuaCommon/lualib/mw.lua (look in makePackageModule()), the PHP code
behind the searcher starts in engines/LuaCommon/LuaCommon.php
(Scribunto_LuaEngine::loadPackage()), and mw.loadData is near the end of
engines/LuaCommon/lualib/mw.lua.

-- 
Brad Jorsch (Anomie)
Senior Software Engineer
Wikimedia Foundation
_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to